Géométrie, trigonométrie, points du plan

Réponses à toutes vos questions de la 2nde à la Terminale toutes séries
Placard
Messages: 3
Enregistré le: 18 Nov 2019, 22:44

Géométrie, trigonométrie, points du plan

par Placard » 18 Nov 2019, 23:55

Bonjour à tous,

Je travaille actuellement sur un projet informatique pour lequel j'ai besoin de quelques notions mathématiques qui me font défaut.

Soit une "map" rectangulaire, que l'on pourrait représenter sous forme de grille, dont chaque case serait remplie soit par des 0 (espace vide), soit par des 1 (murs), et un joueur, caractérisé par une position (x, y) et une direction, toutes deux connues.

Exemple de map:
Image

Je veux obtenir la distance entre le joueur et le premier mur rencontré
Je vérifie donc à chaque intersection entre deux cases de la grille si je suis sur un mur ou pas, je peux obtenir les coordonnées du mur le plus proche.
Par soucis de simplicité, je traite séparément les intersections verticales et les intersections horizontales entre deux cases.

C'est à partir de là que je me perds, je pense avoir les mauvaises formules.

Je sais que je vais devoir trouver les coordonnées d'un premier point d'intersection, A(X1, Y1) puis calculer deux constantes Xa et Ya, que j'ajouterait à A pour obtenir le point suivant et faire le test de collision tant que je ne trouve pas de mur.

Considérons que les cases de ma grille sont de taille 1x1.

Pour les intersections sur l'axe vertical :

On calcule les coordonnées du premier point A(X1, Y1):
X1 = Partie entière de PosJoueur.x si la direction du joueur est comprise entre pi/2 et 3*pi/2, Partie entière de PosJoueur.x + 1 sinon.
Y1 = PosJoueur.y + (PosJoueur.x - X1) * tan(DirJoueur)

Maintenant que nous avons notre premier point, il faut trouver les valeurs Xa et Ya telles que B(X1 + Xa ; Y1 + Ya) soit le prochain point d'intersection entre deux cases de la grille sur l'axe vertical.

Si le joueur regarde vers la droite (pi/2 < DirJoueur < 3*pi/2) : Xa = 1, sinon Xa = -1.
Ya = tan(DirJoueur) <--- J'ai beaucoup plus de doutes sur cette "formule"

Une fois ces valeurs calculées je saurait récupérer les coordonnées de la collision avec le mur et en déduire la distance, c'est vraiment cette partie ci dessus qui me pose problème.

Même chose pour les intersections sur l'axe horizontal :

Calcul de A(X1;Y1) :

Y1 = Partie entière de PosJoueur.y s'il regarde vers le haut, partie entière de PosJoueur.y + 1 sinon.
X1 = PosJoueur.x + (PosJoueur.y - Y1) / tan(DirJoueur) <-- Gros doutes aussi

calcul des constantes Xa et Ya :

Ya = -1 si le joueur regarde vers le haut, 1 sinon
Xa = 1 / tan(DirJoueur) <-- Egalement soupconnée

Voilà, après avoir calculé les points d'impacts et les distances, je prends la plus courte des deux pour avoir la distance finale Joueur, mur.

J'espère que quelqu'un pourra m'aider, j'espère avoir été aussi clair que possible, n'hésitez pas à me poser des questions si quelque chose est mal expliqué ou quoi que ce soit d'autre, j'ai besoin de ces formules afin de modéliser une map 2D en 3D via un algorithme de Ray-casting, mais je n'ai pas les notions nécéssaires.

Plus d'explications sur le ray-Casting :
http://projet-moteur-3d.e-monsite.com/pages/raycasting/raycasting.html
Le site ou j'ai trouvé les formules, qui ne semblent pas fonctionner: (Mais c'est ce que j'ai trouvé de mieux)
http://zupi.free.fr/PTuto/index.php?ch=ptuto&p=ray#54

Merci beaucoup !



Avatar de l’utilisateur
fatal_error
Membre Légendaire
Messages: 6610
Enregistré le: 22 Nov 2007, 12:00

Re: Géométrie, trigonométrie, points du plan

par fatal_error » 19 Nov 2019, 10:36

hi,

comments sont orientés tes axes?
la vie est une fête :)

Placard
Messages: 3
Enregistré le: 18 Nov 2019, 22:44

Re: Géométrie, trigonométrie, points du plan

par Placard » 19 Nov 2019, 11:39

Hello,

L'origine de mon repère se trouve en haut à gauche de la map, pour ce qui est de la direction, l'angle 0 est dirigé vers le nord (haut), pi / 2 vers l'est, (droite), comme suit :

Image

Je viens d'y peser en faisant ce petit schéma, est ce que l'orientation de mon cercle trigonometrique peut poser problème ? Ne devrait-il pas valoir 0 et 2*pi à droite, pi à gauche ?

Avatar de l’utilisateur
fatal_error
Membre Légendaire
Messages: 6610
Enregistré le: 22 Nov 2007, 12:00

Re: Géométrie, trigonométrie, points du plan

par fatal_error » 19 Nov 2019, 15:15

Soit A, la position de ton joueur, et B le point où il regarde.
Le vecteur directeur est vAB, je note vAB[0] la composante sur x, et vAB[1] sur y

vAB = [AB_x, AB_y]

Tu peux réécrire ton vecteur

vAB_x = vAB = [1, AB_y / AB_x]

ce qui signifie qu'à chaque fois que tu augmente x de exactement 1, y augmente d'autant que AB_y / AB_x

et de même

vAB_y = vAB = [AB_x / AB_y, 1]

Maintenant ton but, c'est de trouver la première intersection sur l'axe des x
ensuite tu ajoutes à ce point vAB_x (qui te donne le x suivant) et ainsi de suite

exemple pour x:
considère
A(2.5,6.5)
B(8.1,3.5)
vAB = B-A = (5.6,-3)
vAB_x = (1, \frac{ -3}{5.6}) = (1, -0.53571)

Calcul de la première intersection I sur x.

si sign(vAB[0]) == -1
x = floor(A[0])
sinon
x = ceil(A[0])

Ensuite le delta entre A et l'intersection I (sur les x) c'est
x - A[0]
et la valeur parcourue sur y c'est (x-A[0])*AB_x[1]
le point résultant c'est donc I = A + (x-A[0])*vAB_x == [x, (x-A[0])*vAB_x[1]]

Ensuite tu déduis les I_i suivants (i=1,...)
I_1 = I + v_{AB}_x
I_2 = I_1 + v_{AB}_x ...

Pour y même raisonnement

edit: j'avais inversé les boutons nextx et nexty ...
https://jsfiddle.net/xjkur8Lc/
la vie est une fête :)

Placard
Messages: 3
Enregistré le: 18 Nov 2019, 22:44

Re: Géométrie, trigonométrie, points du plan

par Placard » 19 Nov 2019, 22:33

Merci beaucoup pour ta réponse rapide !
Cependant, je ne connais pas le point B vers lequel le joueur regarde. Je ne connais que le point A (position du joueur et l'angle alpha au début de la recherche. Le but étant justement d'obtenir les coordonnées de B.

L'idée est la même, mais j'aimerai trouver des formules me permettant de trouver le premier point d'intersection / trouver les constantes de déplacement en utilisant l'angle et la position du joueur uniquement, sans passer par un vecteur.

Avatar de l’utilisateur
fatal_error
Membre Légendaire
Messages: 6610
Enregistré le: 22 Nov 2007, 12:00

Re: Géométrie, trigonométrie, points du plan

par fatal_error » 19 Nov 2019, 23:00

Ben on connait pas specialement B je lui ai donné une valeur arbitraire juste pour avoir une direction....

Si ton kiff c'est alpha, ben ta ligne de vue c'est (cos(alpha), sin(alpha)) et guess what ton point B cest A+(cos(alpha), sin(alpha))

Tu peux bidouiller pour simplifier mais tes "constantes" je crois que c'est la meme chose que vAB_x et vAB_y...
la vie est une fête :)

 

Retourner vers ✎✎ Lycée

Qui est en ligne

Utilisateurs parcourant ce forum : Aucun utilisateur enregistré et 45 invités

Tu pars déja ?



Fais toi aider gratuitement sur Maths-forum !

Créé un compte en 1 minute et pose ta question dans le forum ;-)
Inscription gratuite

Identification

Pas encore inscrit ?

Ou identifiez-vous :

Inscription gratuite