Inscription / Connexion Nouveau Sujet
Niveau algorithmique
Partager :

Orientation d'un vecteur 3D

Posté par
KubbyDev
23-08-17 à 22:22

Bonjour,

Mon problème est assez inhabituel, je sais, mais je n'ai rien trouvé sur internet donc j'ai besoin de votre aide.

J'ai un vecteur 3D défini donc sur 3 variables, et je voudrais obtenir l'orientation correspondant a ce vecteur (Sur 2 axes, horizontal et vertical). D'apres les cours d'un ami,
θ=arccos(z/pi)
ϕ=arctan(y/x)  

θ étant l'orientation verticale et ϕ l'horizontale.
Mais c'est la que ça se complique. Je veux faire ça sur ordinateur, je ne peux donc pas simplement écrire arccos() et arctan(), il me faut des approximations. De plus, je dispose de peu de puissance de calcul, donc il faut une approximation qui demande peu d'opérations.

L'autre problème que j'ai remarqué, c'est que les approximations que j'ai trouvé pendant mes recherches fonctionnent pour la plupart pour -1<=x<=1 (je me suis concentré sur arctan() pour l'instant). Mais pour calculer ϕ je dois diviser une coordonnée par l'autre, mais si x vaut 0.1 et y 0.8, j'obtiens 8....
Donc je ne peux pas utiliser les approximations qui fonctionnent dans cette intervalle ou bien j'ai simplement raté quelque chose ?

Pour récapituler:
Il me faut des approximations pour arccos() et arctan() qui demandent moins d'une trentaine d'opérations simples (+x-/) chacune et qui ont une précision d'environ 1 degré minimum, et il faut que je puisse les utiliser pour obtenir l'orientation de mon vecteur.

Merci d'avance pour vos réponses !

Posté par
LeiRoF
re : Orientation d'un vecteur 3D 23-08-17 à 23:09

Je me permet de réexpliquer pour être plus clair (je ne trouve pas ça très compréhensible alors que je suis avec toi sur ce problème :p )

Concrètement, le problème se situe sur un jeu (Minecraft) permettant de faire des calculs basiques (addition, soustraction, multiplication et divisions) et de stocker des nombres naturels uniquement.

Nous avons déjà fait un système permettant de créer un vecteur V(x,y,z) à partir de l'orientation du joueur (Phi et Theta)
(sur un espace tridimensionnel, Y étant l'axe verticale car les développeurs du jeu l'ont décidé ainsi)  
Ce système à utilisé les approximations de Bhaskara* afin de résoudre le système suivant:
x=rsin⁡(θ)cos⁡(ϕ)
y=rsin⁡(θ)sin⁡(ϕ)
z=z*cos⁡(θ)


Désormais, le challenge est de recréer une orientation à partir d'un vecteur V(x,y,z). Cette orientation est normalement obtenu grâce au système:
θ=Arccos(z/Π)
ϕ=Arctan(y/x)


Le but est donc de trouver un a algorithme permettant de réaliser la fonction arctan() et arcos(). Pour cela, il nous faut une sorte d'approximation de ces fonctions. La série de Taylor de ces fonctions est une bonne solution mais trop gourmande en ressource si l'on veut être précis.

*Approximations de Bhaskara:
sin(p) ~= (4 * p * (180 - p)) / (40500 - p * (180 - p))
cos(p) ~= (32400 - 4 * p^2) / (32400 + p^2)

Posté par
Ryan07896
re : Orientation d'un vecteur 3D 26-08-17 à 15:22

Bonjour,

Je suppose que tu utilises Java : http://docs.oracle.com/javase/7/docs/api/java/lang/Math.html



Vous devez être membre accéder à ce service...

Pas encore inscrit ?

1 compte par personne, multi-compte interdit !

Ou identifiez-vous :


Rester sur la page

Désolé, votre version d'Internet Explorer est plus que périmée ! Merci de le mettre à jour ou de télécharger Firefox ou Google Chrome pour utiliser le site. Votre ordinateur vous remerciera !