Bonjour à tous,
Je suis en train de créer un mini jeu de simulation automobile et je suis face à un problème d'ordre mathématique et plus précisément géométrique. Je souhaiterais construire la représentation d'un circuit automobile en partant d'un fichier qui est constitué de la manière suivante :
portions {
portion {
type
longueur
angle
rayon
sens
},
...
}
Chaque portion peut être de deux types différents : ligne droite ou virage. Dans le cas d'une ligne droite, seule la distance (en m) est renseignée. Dans le cas d'un virage, je renseigne son angle (en degrés), son rayon (en m), et son sens (gauche ou droite). Un circuit est donc constitué d'un ensemble de portions et me permet de calculer la vitesse et le comportement de mes voitures sur le circuit.
Le problème que je rencontre est pour construire une représentation graphique de mon circuit à partir de ce fichier. Pour cela, j'ai choisi le format SVG qui permet de construire des chemins, en position des points en se basant sur un repère unique. La stratégie que je pensais adopter est la suivante :
- partir du point (0,0)
- parcourir chaque portion
- pour une ligne droite positionner un point qui correspond au dernier point tracé + la longueur de la ligne droite, en prenant en compte l'angle courant
- pour un virage, positionner un point qui correspond au dernier point tracé + la longueur du virage + une rotation qui correspond à l'angle du virage
- mettre à jour l'angle courant en y ajoutant (ou en y soustraient, en fonction du sens du virage) l'angle du virage
J'ai trouvé plusieurs formules qui permettent de calculer les coordonnées d'un point en y appliquant une rotation, mais le problème vient du fait que cette rotation ne doit pas s'appliquer en fonction du repère du circuit, mais plutôt par rapport à la position du dernier point connue et de son angle. J'ai entendu parler de rotation qui prend en compte un changement de repère, mais mes recherches sont restées infructueuses.
Mon deuxième problème concerne les lignes droites et reprend le même thème : pour positionner le point qui correspond à la fin de ma ligne droite, je dois prendre en compte l'angle courant (donné par le dernier virage), il s'agit donc de continuer "en ligne droite", mais encore une fois, il ne s'agit pas simplement de faire une translation suivi d'une rotation en s'appuyant sur le repère du circuit, mais bien en faisant une rotation à partir du point précédent.
J'espère avoir décrit mon problème de façon la plus claire possible, n'hésitez pas à me demander des précisions que ce soit sur le fichier qui décrit le circuit, l'algorithmie où même mon besoin final.
Je remercie par avance tout ceux qui auront pris du temps pour lire cet article et éventuellement pour m'apporter votre connaissance sur le sujet.
Cordialement,
Scull
-----