#### Archived

This topic is now archived and is closed to further replies.

# My angle computation code doesnt work...What does -1.#J mean?

This topic is 5287 days old which is more than the 365 day threshold we allow for new replies. Please post a new topic.

## Recommended Posts

Hi, my tank is driving across a terrain and this code computes the angles to align it with the polygon beneath:
// tank normal
D3DXVECTOR3 tank_normal = D3DXVECTOR3(0.0f, 1.0f, 0.0f);

// Polygon normal
D3DXVECTOR3 poly_normal = D3DXVECTOR3(
terrain.PolygonNormals[array_x][array_y][which_side].x,
terrain.PolygonNormals[array_x][array_y][which_side].y,
terrain.PolygonNormals[array_x][array_y][which_side].z);

// temp vector for first angle
D3DXVECTOR3 vectorX = D3DXVECTOR3(tank_normal.x, poly_normal.y, poly_normal.z);

// angle between tank normal and temp vector
float scalarproductX = scalar(tank_normal, vectorX);
float lengthX = (float)sqrt(sq(tank_normal.x) + sq(tank_normal.y) + sq(tank_normal.z)) * (float)sqrt(sq(vectorX.x) + sq(vectorX.y) + sq(vectorX.z));
tank[j].mesh.angle.x = (float)(acos(scalarproductX / lengthX) * 180.0f / D3DX_PI);

// now second angle from temp vector to Polygon normal
float scalarproductZ = scalar(vectorX, poly_normal);
float lengthZ = (float)sqrt(sq(vectorX.x) + sq(vectorX.y) + sq(vectorX.z)) * (float)sqrt(sq(poly_normal.x) + sq(poly_normal.y) + sq(poly_normal.z));
tank[j].mesh.angle.z = (float)(acos(scalarproductZ / lengthZ) * 180.0f / D3DX_PI);

unfortunately it doesnt work... Sometimes i get this value: -1.#J for tank[j].mesh.angle.z. What's that? Is it like -infinite or sth.? Something wrong with the code? thanks for help. Christian [edited by - Christian Schlager on April 4, 2004 1:00:29 PM] [edited by - Christian Schlager on April 4, 2004 1:02:06 PM]

##### Share on other sites
if you do acos(x), x has to be in range [-1, 1]. If not, then you get a math exception, and the result is garbage.

not sure what you try to do with LengthX and LengthZ, if it''s for the length of a vector, and you are using directX, you might as well use

D3DXVec3Dot() for a dot product (scalar product)
D3DXVec3Cross() for cross product
D3DXVec3Length() for length of vectors

1. 1
2. 2
3. 3
Rutin
16
4. 4
JoeJ
13
5. 5

• 9
• 14
• 10
• 25
• 9
• ### Forum Statistics

• Total Topics
632645
• Total Posts
3007632
• ### Who's Online (See full list)

There are no registered users currently online

×