Bonjour,
mon probleme est la simulation d'un jeu. Nous sommes dans un plan "discret" de 6000x6000 points. Les 2 joueurs A et B sont donc a des positions entieres, e.g. x=3, y=900 (et pas x=3.1415 par ex.).
A veut se rapprocher le plus possible de B, et doit avancer par pas de 100 en distance euclidienne.
Donc si A est à (Ax, Ay) et B est à (Bx, By), je cherche les nouvelles coordonnees de A (Ax', Ay') apres avoir avancé (au max) de 100 en distance euclidienne ; donc
[INDENT](Ax'-Ax)^2 + (Ay'-Ay)^2 <= 10000[/INDENT]
Pour déterminer (Ax',Ay') je calcule
[INDENT]dx = |Bx-Ax|[/INDENT]
[INDENT]dy = |By-Ay|[/INDENT]
je sais que l'équation de la droite passant par A et B (depuis A) est
[INDENT]y = ax[/INDENT]
avec
[INDENT]a = dy / dx[/INDENT]
et je veux
[INDENT](Ax'-Ax)^2 + (Ay'-Ay)^2 <= 10000[/INDENT]
donc je résous et obtiens
[INDENT]Ax' = sqrt (10000 / (1+a^2))[/INDENT]
[INDENT]Ay' = a * Ax'[/INDENT]
en prenant la partie entière de Ax' et Ay'.
Mon problème est que je veux me rapprocher au maximum de B,
Et il y a des points <= au cercle de centre A et de rayon 100 plus proches de B que celui que je trouve par la formule ci-dessus.
Par exemple, si B est à (5000, 5000) et A = (4950, 4000), la formule me donne
en delta : x +4.993762 et y +99.875234, arrondis à (+4, +99), mon A se retrouve donc en
[INDENT]A = (4954, 4099)[/INDENT]
ce qui est une proche de 100 (distance euclidienne de 99), mais pas 100.
Mais avec simplement (+0, +100) A se retrouve en (4950, 4100), il a avancé de exactement 100 en distance euclidienne...
Ce point (4950, 4100) n'est pas exactement sur la droite A B mais est plus proche de B que par la formule, et est exactement 100 points plus loin en distance euclidienne.
Question : connaissant A et B, comment trouver le point suivant A' le plus proche de B de distance euclidienne 100 exactement?
(par une formule ou un algorithme...)
Merci
