Page 4 sur 4

Publié : sam. 05/mai/2007 22:16
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

Publié : sam. 05/mai/2007 22:17
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 :)

Publié : sam. 05/mai/2007 23:29
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

Publié : dim. 06/mai/2007 7:10
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).

Publié : dim. 06/mai/2007 13:46
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 ?

Publié : dim. 06/mai/2007 18:36
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