Posté le 04/06/2014 14:46
Planète Casio v4.3 © créé par Neuronix et Muelsaco 2004 - 2024 | Il y a 235 connectés | Nous contacter | Qui sommes-nous ? | Licences et remerciements
Planète Casio est un site communautaire non affilié à Casio. Toute reproduction de Planète Casio, même partielle, est interdite.
Les programmes et autres publications présentes sur Planète Casio restent la propriété de leurs auteurs et peuvent être soumis à des licences ou copyrights.
CASIO est une marque déposée par CASIO Computer Co., Ltd
Citer : Posté le 03/07/2014 17:37 | #
petite erreur de ma part, M' n'est pas fixe, par contre, il appratient à la droite(AM) dont M est fixe.
Et A n'est pas fixe non plus
Citer : Posté le 03/07/2014 17:40 | #
Donc voilà ce que tu connais/sais :
→ La position de O
→ La position de M
→ La position de A' ?
→ (AM) // (A'M')
Et tu veux A t.q. (OA) soit perpendiculaire à (AM) ?
Citer : Posté le 03/07/2014 17:43 | #
oui, ainsi que AO est perpendiculaire à (AM)
on ne connait pas A', mais on connait [OA] (distance focale)
Citer : Posté le 03/07/2014 17:44 | #
Et tu veux A t.q. (OA) soit perpendiculaire à (AM) ?
oui, ainsi que AO est perpendiculaire à (AM)
Que cherches-tu exactement alors ?
Citer : Posté le 03/07/2014 17:46 | #
la position de A, comme ça, je peux savoir [AM] et [AO]
Citer : Posté le 03/07/2014 18:00 | #
Tu connais l'angle (OM;OA) ?
Ajouté le 03/07/2014 à 18:05 :
Bon, j'ai une solution, mais géométrique -- il faudra la simplifier ensuite pour pouvoir l'implémenter de manière optimisée.
Ajouté le 03/07/2014 à 18:16 :
On va décomposer α : α = γ + β.
Avec H projeté orthogonal de M sur (O;vec{x}), γ sera l'angle (vec{OH};vec{OM}) et β sera (vec{OM};vec{OA}).
On a donc H(xM-xO;0).
Ensuite, γ = arctan(sin γ / cos γ) = atan2(sin γ, cos γ) = atan2(yM;xM).
Du coup, on a β = α - γ.
Une fois que tu as β, comme OAM est rectangle, tu peux établir que AM = OM * sin β et que AO = OM * cos β.
Par conséquent, A est l'intersection des cercles de centres M et O est de rayons respectifs MA et OA.
Le couple(x;y) solution de
{ (x-xM)² + (y-yM)² = MA²
{ (x-xO)² + (y-yO)² = OA²
sera donc les coordonnées de A.
C'est probablement pas ce qu'il y a de mieux, mais c'est déjà ça.
Citer : Posté le 03/07/2014 18:44 | #
Une petite erreur, tu as mi 2fois sigma
Sinon, c'est bien explicité
Ajouté le 04/07/2014 à 16:47 :
c'est bon,
et
Citer : Posté le 04/07/2014 17:32 | #
Comme je l'ai dit, faire la division pour appeler atan() n'est pas forcément une bonne idée.
Voilà comment je l'implémenterais :
int y = M.geyY() - O.getY();
int h = sqrt(x*x+y*y);
double gamma = alpha - atan2(y,x);
int AM = h * sin(gamma);
int OA = h * cos(gamma);
Ainsi, on ne répète aucun calcul.
J'ai quand même un peu peur pour la vitesse, mais je te laisse tester...
Citer : Posté le 04/07/2014 17:52 | #
atan2(x,y) = tan(x/y)
Citer : Posté le 04/07/2014 18:02 | #
Non, atan2(y,x) = atan(y/x).
Citer : Posté le 05/07/2014 09:14 | #
l'angle est en radians ou en degré?
Citer : Posté le 05/07/2014 09:21 | #
Ah, l'angle est toujours en radians, du coup tu es obligé de faire du calcul flottant.
Citer : Posté le 05/07/2014 16:08 | #
alors,
angle en radians
Citer : Posté le 05/07/2014 16:09 | #
Ben oui, de quoi tu parles ?
Citer : Posté le 05/07/2014 16:12 | #
de ça
[/HS]
Ajouté le 05/07/2014 à 16:17 :
et comme les radians c'est moins représentatif, j'ai mis un
Citer : Posté le 05/07/2014 16:37 | #
D'une part, si tu divises d'abord, tu perds de la précision. D'autre part, tu aurais pu mettre
pour simplifier au moins les constantes -- sinon je peux t'assurer que tu vas lagger.
Citer : Posté le 07/07/2014 13:40 | #
C'est moche... Et si jamais j'ai une variable/macro qui s'appelle (par exemple) CONVERSION_RADIANS? Utilise une macro de type fonction plutôt.