
Envoyé par
Arkhemval
a et b, c'est la longueur des demis axes (grand et petit), ou des grand axe et petit axe ?
Erreurs d'étourderie de ma part :
- Le demi-grand axe a une longueur a et pas 2a.
- Le demi-petit axe a une longueur b et pas 2b.

Envoyé par
Arkhemval
Ensuite, qu'est-ce que tu entends par déduire l'angle ? Je ne comprend pas très bien comment déduire un ange entre deux points !
Si on note C le centre de ton ellipse et M le "point de fin de l'axe majeur", le vecteur CM a un argument alpha.
La valeur absolue de alpha est l'angle entre la droite (CM) et l'axe des abscisses.
Pour déduire l'argument alpha des coordonnées cartésiennes du vecteur CM, tu peux utiliser une des formules qui se trouvent sur Wikipédia :
https://fr.wikipedia.org/wiki/Coordo...cart.C3.A9sien

Envoyé par
Arkhemval
De plus, est-ce que l'angle est en radian ou en degré ? (je suppose en degré, vu que tu n'as pas précisé, mais je n'en suis pas sur...)
Les formules que j'ai écrites sont aussi valables quand tout est en radians que quand tout est en degrés.
Si tu utilises <cmath>, tout est en radians.
A part ça, pour ton code :
1 2
| double minorAxis = majorAxis * ellipse.ratio;
minorAxis /= 2; // c'est le demi petit axe |
La division par deux est en trop.
for(double theta = 0; theta < 2*M_PI; theta+=step)
alpha = ellipse.angle2; /// Là c'est un peu random, je savais pas quoi mettre pour remplacer alpha... (angle1 c'est l'angle de départ, angle2 c'est l'angle d'arrivee)
Dans ton énoncé, quand j'avais lu "angle de départ" et "angle d'arrivée", j'avais interprété que theta irait de l'angle de départ à l'angle d'arrivée et donc qu'il ne fallait tracer qu'une portion de l'ellipse.
Si j'ai mal interprété, je ne sais pas ce que signifient "angle de départ" et "angle d'arrivée".
En tout cas, alpha doit être égal à l'argument du vecteur CM.
1 2
| double x = ellipse.cx + majorAxis * cos(step) * cos(alpha) * step - minorAxis * sin(step) * sin(alpha);
double y = ellipse.cy + majorAxis * cos(step) * step * sin(alpha) + majorAxis * sin(step) * cos(alpha); |
Dans les deux lignes, il y a une multiplication par step en trop.
Dans la deuxième, à la place du deuxième majorAxis, c'est minorAxis.
A part ça, il ne faut pas utiliser step mais theta. Sinon, tu vas écrire toujours le même point.
Partager