bonjour à tous
voilà, étant donné que j'étais du genre à être assis au fond de la classe, à l'école, à dormir pendant les cours de math,..... j'ai un petit souci de trigonomètrie...
quelqu'un à t-il un code pour calculer l'angle entre deux points en degré de préférence...
cela fait plusieurs heures que je me prends la tête la dessus, et je commence à avoir une migraine....
merci à tous
calcul de l'angle en degré entre deux points
-
- Messages : 2194
- Inscription : jeu. 27/janv./2005 19:07
Pythagore n'est pas ton ami? alors bator l'est !
@++

Code : Tout sélectionner
#Deg = #PI/180
Procedure Distance(x1,y1,z1,x2,y2,z2)
Protected Result.f
Result = Sqr( Pow(x1-x2,2) + Pow(y1-y2,2) + Pow(z1-z2,2) )
ProcedureReturn Result
EndProcedure
Procedure ReturnAngle(x1,y1,x2,y2)
Protected Distance.l,Xa.l,Ya.l
Distance = Distance(x1,y1,0,x2,y2,0)
For A = 0 To 360
Xa = x1 + Distance * Cos(A*#Deg)
Ya = y1 + Distance * Sin(A*#Deg)
If Xa > x2 -5 And Xa < x2 + 5
If Ya > y2 -5 And Ya < y2 + 5
ProcedureReturn A
EndIf
EndIf
Next A
EndProcedure
principe du code
- 1 - Tu calcules le vecteur directeur entre les deux points
- 2 - Tu normes le vecteur directeur, c'est à dire que sa norme vaut 1
- 3 - Pour mémoire le cercle trigo a un rayon de 1, comme notre vecteur directeur, autrement dit
Cos(Angle) = VecteurDirecteur\x
Sin(Angle) = VecteurDirecteur\y
Si tu as besoin de l'angle tu as juste un Acos(VecteurDirecteur\x) à faire.
Bon j'ai pas testé, mais normalement ça devrait fonctionner
- 1 - Tu calcules le vecteur directeur entre les deux points
- 2 - Tu normes le vecteur directeur, c'est à dire que sa norme vaut 1
- 3 - Pour mémoire le cercle trigo a un rayon de 1, comme notre vecteur directeur, autrement dit
Cos(Angle) = VecteurDirecteur\x
Sin(Angle) = VecteurDirecteur\y
Si tu as besoin de l'angle tu as juste un Acos(VecteurDirecteur\x) à faire.
Bon j'ai pas testé, mais normalement ça devrait fonctionner

Code : Tout sélectionner
Structure Vecteur2D
x.f
y.f
EndStructure
Define.Vecteur2D P1, P2, D
Declare Norme(*V.Vecteur2D)
Declare Direction(*d.Vecteur2D, *p1.Vecteur2D, *p2.Vecteur2D)
;Position du premier point
P1\x = 200
P1\y = 200
;Position du deuxième point
P2\x = 400
P2\y = 400
Direction(@D, @P1, @P2)
Norme(@D)
Debug D\x
Debug D\y
Procedure Norme(*V.Vecteur2D)
Define.f Norme
Norme = Sqr(*V\x * *V\x + *V\y * *V\y)
If Norme
*V\x / Norme
*V\y / Norme
EndIf
EndProcedure
Procedure Direction(*d.Vecteur2D, *p1.Vecteur2D, *p2.Vecteur2D)
*d\x = *p2\x - *p1\x
*d\y = *p2\y - *p1\y
ProcedureReturn *d
EndProcedure
http://purebasic.developpez.com/
Je ne réponds à aucune question technique en PV, utilisez le forum, il est fait pour ça, et la réponse peut profiter à tous.
Je ne réponds à aucune question technique en PV, utilisez le forum, il est fait pour ça, et la réponse peut profiter à tous.
sinon y'a des fonctions de maths qui peuvent peut être t'aider ici
http://purebasic.hmt-forum.com/viewtopi ... 3568#32971
Dri
http://purebasic.hmt-forum.com/viewtopi ... 3568#32971
Dri