Question déplacement math

Programmation avancée de jeux en PureBasic
_Slide_
Messages : 52
Inscription : sam. 17/mars/2007 18:04

Message par _Slide_ »

C'est des vieux souvenir ca. lol
Les produits scalaires... heuresment que tu m'as donné la doc du wiki sinon je serais encore entrain de chercher.

Dit moi si mon code est correct stp (pas moyen de savoir autrement...) :

Code : Tout sélectionner

Structure Vecteur2Df
    x.f
    y.f
EndStructure

Procedure Norme(*V.Vecteur2Df)
Define Norme.f
  Norme = Sqr(*V\x * *V\x + *V\y * *V\y)
  If Norme= 0
    *V\x = 0
    *V\y = 0
  Else
    *V\x / Norme
    *V\y / Norme
  EndIf
EndProcedure 

Procedure.f AngleTest(p0.Vecteur2Df,p1.Vecteur2Df,p3.Vecteur2Df)
Define.Vecteur2Df v1,v2
  v1\x = p1\x - p0\x
  v1\y = p1\y - p0\y
  v2\x = p2\x - p0\x
  v2\y = p2\y - p0\y
  Norme(v1)
  Norme(v2)  
ProcedureReturn ACos(v1\x*v2\x + v1\y*v2\y)
EndProcedure
_Slide_
Messages : 52
Inscription : sam. 17/mars/2007 18:04

Message par _Slide_ »

Ah je viens de voir que tu as envoyé un code avant moi, je vais regarder cela :)

Edit :
on dirait que mon code est correct, je viens de le comparé a celui que tu proposes.
Moi en math, ce qui menerve le plus, c'est quand on doit jouer avec COS SIN TAN. Je vais uniquement en avoir besoin pour les rotations de mes entités, ensuite je serais tranquille :), donc même si j'ai qq difficulté, apres cette etape, les choses seront de nouveau facile (du moins + que là).

Merci :)
_Slide_
Messages : 52
Inscription : sam. 17/mars/2007 18:04

Message par _Slide_ »

Dans ton tuto, tu calculais un angle avec cela :

Code : Tout sélectionner

Procedure.f atan2f(x.f,y.f)
    ;Vérifiez que dans les options du compilateur vous avez bien activé l'assembleur en ligne.  
    !FLD dword[p.v_x]  
    !FLD dword[p.v_y]
    !FPATAN
    ProcedureReturn  
EndProcedure
Je vais t'avouer que j'ai utilisé cette fonction abusivement sans trop savoir quoi en faire, mais il y aurait pas eu une solution simple en utilisant cette fonction puisqu'elle retourne un angle en fonction des coordonnées d'un vecteur ?

Merci
comtois
Messages : 5186
Inscription : mer. 21/janv./2004 17:48
Contact :

Message par comtois »

Je dois t'avouer que j'ai bricoler cette fonction Atan2() pour faire marcher mon exemple, honte à moi j'avais seulement mal tracé mon triangle, du coup j'avais triché sur le calcul de l'angle pour retomber sur mes pattes :oops:

Je viens de faire une recherche sur FTATAN
The FPATAN instruction returns the angle between the X axis and the line from the origin to the point (X,Y), where Y (the ordinate) is ST(1) and X (the abscissa) is ST(0). The angle depends on the sign of X and Y independently, not just on the sign of the ratio Y/X. This is because a point (-X,Y) is in the second quadrant, resulting in an angle between /2 and , while a point (X,-Y) is in the fourth quadrant, resulting in an angle between 0 and -/2. A point (-X,-Y) is in the third quadrant, giving an angle between -/2 and -.
Et je m'aperçois que j'ai tout inversé !!
Le tutoriel est corrigé , et la bonne fonction Atan2f() se présente ainsi :

Code : Tout sélectionner

Procedure.f atan2f(y.f, x.f)
  !fld dword[p.v_y]
  !fld dword[p.v_x]
  !fpatan
  ProcedureReturn
EndProcedure
Cette fonction retourne l'angle entre l'axe X et la droite qui passe par l'origine et ton point(x,y).
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.
_Slide_
Messages : 52
Inscription : sam. 17/mars/2007 18:04

Message par _Slide_ »

C'est super ca, c'est ce que j'ai besoin et donc pas besoin de calcul vectoriel et tout :).
Les coordonnées doivent être normés ?
_Slide_
Messages : 52
Inscription : sam. 17/mars/2007 18:04

Message par _Slide_ »

atan2f(y.f, x.f)
pourquoi n'avoir pas laissé les arguments x et y dans l'odre :
atan2f(x.f, y.f)
il y a une raison particulière ???
Merci
Edit : dsl pour le 2eme post
Répondre