Les figures obtenues n'ont de noms que ceux attribués aux recherches sur le web telles que hypotrochoîdes, ou plus proche, celles du pendule sphérique avec amortissement !
La partie mathématique sera transposée en language informatique à l'aide de python
(version parfaitement integrée à Gimp 2.8)
Comme me l'a suggéré LeJeu
Posté par LeJeu
Le forum 'informatique" me semble fait pour si tu veux causer de ton programme de dessin.
... causons donc du programme sans plus tardé.
Le but de ce WIP (Work In Progress) sera donc d'essayer de reproduire sous Gimp la jolie figure de ci-dessous.
Et comme me l'a encore suggéré LeJeu
Posté par LeJeu
... tu as essayé ? tu en es où ?
... commençons ce premier post par le début en traçant une ellispe.
L'algorithme de tracé est conditionné par l'instruction suivante :
pdb.gimp_airbrush_default(drawable, num_strokes, strokes)
qui trace des segments entre les coordonnées de points (x,y) contenues dans un tableau.
Cette instruction utilise l'aérographe, pour un rendu plus réaliste. Il en existe 2 autres semblables :
pdb.gimp_paintbrush_default(drawable, num_strokes, strokes) pour le pinceau
pdb.gimp_pencil_default(drawable, num_strokes, strokes) pour le crayon
Le cercle sera donc décrit par des points (x,y) représentant des sommets reliés entre eux par des segments. Le tableau contenant ces points se nommera sommets et l'instruction de tracé aura la forme :
pdb.gimp_airbrush_default(calque, 2*nb_sommets, sommets)
Avec un calque de 1600 x 1200, nous prendrons 100 segments pour ressembler au mieux à la trace de l'ampoule sur la photo
Pour terminer cette introduction au tracé, il existe aussi l'instruction suivante qui ne "trace" que des points :
pdb.gimp_drawable_set_pixel(drawable, x_coord, y_coord, num_channels, pixel)
Voici le code commenté. (Je vous passe le bla-bla initial et le bla-bla final du script python)
- Code: Tout sélectionner
# --- initialisations
# --- premier calque
premiercalque = img.layers[0]
# --- dimensions image
largeur = img.width
hauteur = img.height
# --- origines
ox = largeur/2
oy = hauteur/2
# --- init rayons et segments
initRayonA = 705
initRayonB = 236
nbSegments = 100
# --- increment angulaire en radian des 100 sommets a tracer pour 2pi
rdCote = 2 * pi/nbSegments
# --- remplissage tableau des 100 sommets de segments a tracer
sommets = []
for j in range(0,nbSegments):
# --- coordonnees x et y du cercle
x = sin(j * rdCote) * initRayonA + ox
y = cos(j * rdCote) * initRayonB + oy
# --- nombre entier pour pixel
intx = int(x)
inty = int(y)
P = (intx ,inty)
sommets.extend(P)
# --- + le point du debut (soit pour sin 0 et cos 1) pour boucler
# --- et ajouter +2 pour avoir un couple de plus
x = ox
y = initRayonB + oy
intx =int(x)
inty =int(y)
P = (intx ,inty)
sommets.extend(P)
# --- et trace avec Airbrush ...
pdb.gimp_airbrush_default(premiercalque, 2*nbSegments+2, sommets)
# --- fastoche ...
Et l'image obtenue :
Nous sommes encore loin de la figure de la photo ...
Cette étape de débrouissaillage python était, je pense, nécessaire pour passer tranquillement à la suite.
La suite au prochain post ... comme l'a deviné encore LeJeu
Posté par LeJeu
... Sinon, le point parcourant un ellipse, celle ci tournant sur elle même ( précession) ne te donne pas une bonne modélisation ?
... ben c'est là qu'il risque d'y avoir un problème (d'amortissement) ! :lol2:
on fera tourner 123 fois le repére de cette ellispe ... enfin j'espère.
Dans l'étape suivante le repère subira un amortissement dans sa rotation ... et à ce moment là j'aurais besoin d'un coup de main. :lol2: