Ivan,
Voici ce que j’ai pu coder pour colorer un cercle en dégradé grâce à des segments :
p=1000
for i = 0 to p
x=400/p*(i)
y=SQRT(SQUARE(210)-SQUARE(-210+210*2/(p-1)*i))
yprime=-SQRT(SQUARE(210)-SQUARE(-210+210*2/(p-1)*i))
z=p/4
if x<= 400*1/4 then
r=255
g=165/z*i
b=0
elsif x <= 400*2/4 then
r=255
g=165+(255-165)/z*(i-z*1)
b=0
elsif x <= 400*3/4 then
r=255-255/z*(i-z*2)
g=255
b=0
elsif x <= 400 then
r=0
g=255-(255-128)/z*(i-z*3)
b=0
endif
drawsegment(-105+x,0+y,90,0) anchor (middle,xshift,yshift) COLOURED(r,g,b) style (line,5)
drawsegment(-105+x,22+yprime,90,0) anchor (middle,xshift,yshift) COLOURED(r,g,b) style (line,5)
next
return
Et voici le code pour un demi-cercle :
p=1000
for i = 0 to p
x=400/p*(i)
y=SQRT(SQUARE(210)-SQUARE(-210+210*2/(p-1)*i))
z=p/4
if x<= 400*1/4 then
r=255
g=165/z*i
b=0
elsif x <= 400*2/4 then
r=255
g=165+(255-165)/z*(i-z*1)
b=0
elsif x <= 400*3/4 then
r=255-255/z*(i-z*2)
g=255
b=0
elsif x <= 400 then
r=0
g=255-(255-128)/z*(i-z*3)
b=0
endif
drawsegment(-105+x,0+y,90,0) anchor (middle,xshift,yshift) COLOURED(r,g,b) style (line,5)
next
return
Comme tu peux le voir sur les photos, j’ai triché sur le cercle entier en remontant le deuxième demi-cercle sur l’axe des y pour combler les trous.
Pour le demi-cercle il y une zone non colorée car j’ai utilisé la formule mathématique d’un demi-cercle. Or dans cette formule les points ne sont pas équidistants sur l’axe des y. Ils sont larges au début, puis se resserrent et s’écartent à nouveau de l’autre côté. J’ai un moyen d’y pallier en mettant p=5000, mais le calcul prend beaucoup de temps.
Si tu as une formule mathématique qui permet d’obtenir des points équidistants sur un cercle je suis preneur. Est-ce que ta méthode ci-avant (via l’ellipse) permet de coder le remplissage d’un demi-cercle ?
Merci