calcul de l'angle en degré entre deux points

Programmation avancée de jeux en PureBasic
aneekee
Messages : 13
Inscription : lun. 04/sept./2006 14:13

calcul de l'angle en degré entre deux points

Message par aneekee »

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
Frenchy Pilou
Messages : 2194
Inscription : jeu. 27/janv./2005 19:07

Message par Frenchy Pilou »

Est beau ce qui plaît sans concept :)
Speedy Galerie
Anonyme

Message par Anonyme »

Pythagore n'est pas ton ami? alors bator l'est ! :D

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
@++
comtois
Messages : 5186
Inscription : mer. 21/janv./2004 17:48
Contact :

Message par comtois »

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 :)

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.
Dr. Dri
Messages : 2527
Inscription : ven. 23/janv./2004 18:10

Message par Dr. Dri »

sinon y'a des fonctions de maths qui peuvent peut être t'aider ici
http://purebasic.hmt-forum.com/viewtopi ... 3568#32971

Dri
aneekee
Messages : 13
Inscription : lun. 04/sept./2006 14:13

Message par aneekee »

merci beaucoup pour toutes vos réponses
Répondre