PDA

View Full Version : [c++] calcolo angoli vettori


okay
02-04-2007, 11:30
ho 3 punti nello spazio 3d, vettori

{ 0.0f, 0.0f, 0.0f) //xyz
{ 0.0f, 0.5f, 0.0f) //xyz
{ 0.5f, 0.0f, 0.0f) //xyz

ottengo a video questi punti nello spazio:
(a)°

(b)° (p)°
essi formano un triangolo.

ora faccio i calcoli:

D3DXVECTOR3 vLatoA = D3DXVECTOR3(a.x, a.y, a.z);
D3DXVECTOR3 vLatoP = D3DXVECTOR3(p.x, p.y, p.z);
D3DXVECTOR3 vLatoB = D3DXVECTOR3(b.x, b.y, b.z);

vLungA = vLatoP-vLatoA; //-
vLungP = vLatoP-vLatoB; ///
vLungB = vLatoB-vLatoA; //|

Lunghezze in float dei lati
p1 = D3DXVec3Length(&vLungA);//cateto
p2 = D3DXVec3Length(&vLungP);//ipotenusa
p3 = D3DXVec3Length(&vLungB);//cateto

RISULTATI che non mi quadrano:
angolo=atan2(p1,p2)*(180.0f/D3DX_PI);//35.264389
angolo=atan2(p2,p1)*(180.0f/D3DX_PI);//54.735607
angolo=atan2(p2,p3)*(180.0f/D3DX_PI);//35.264389
angolo=atan2(p3,p2)*(180.0f/D3DX_PI);//54.735607
angolo=atan2(p1,p3)*(180.0f/D3DX_PI);//45°*2=90°
angolo=atan2(p3,p1)*(180.0f/D3DX_PI);//45°*2=90°

45° è ok sarebbe, dati i lati |_ 45°*2=90° OK!

mentre i risultati di 35.264389° e 54.735607° sono gli altri 2 angoli che sommati insieme danno giustamente 90°... il problema è però che io mi aspettavo come risultati di questi 2 angoli:
45° e 45° visto che se metto un'altro punto di vettore come figura avrei un quadrato perfetto! tipo:
(a)° (c)°

(b)° (p)°

perchè invece mi dà:
35.264389° e 54.735607° mentre dovrebbe essere 45° e 45°??

mi sembra proprio strano!!

quale è il problema!


Edit:
ho fatto dei test:
dunque:
p1 vale 0.5 ovvero D3DXVec3Length(&vLungA); la lung lato A
p2 vale 0.70710677 ovvero D3DXVec3Length(&vLungP); la lung ipotenusa P
p3 vale 0.5 ovvero D3DXVec3Length(&vLungB); la lung lato B

ed è giusto ma
mettendo p2=0.5f in questo caso ho tutti e 3 gli angoli giusti di 45° l'uno.

non ci sto capendo + nulla... azz!