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