PDA

View Full Version : correct cross-product method?



04-19-2002, 12:33 AM
I don't understand how this works... the equation for a cross product is:

A x B = A B sin()

so like (this is a mistake, right?)

A B C
x |3| |0| |0|
y |1| * |3| = |3|
z |4| |2| |8|

so now I've got vector C, but it won't be perpendicular to AB and multiplying C by the sine of the angle between A and B will just increase the magnitude of C.

This must look very obvious to most people here, how do you do it right? I haven't taken calculous yet. http://www.opengl.org/discussion_boards/ubb/frown.gif

Bob
04-19-2002, 12:40 AM
Honestly, I have no idea what that chunk of characters in the middle of your post is supposed to look like. Please, either edit your message and put code tags around the chunk (and reformat it!), or post a new message with the chunk inside code tags.

A code tag is [ code ] <you text goes here> [ /code ] (without spaces in the square brackets).

Bob
04-19-2002, 12:55 AM
Anyways, a crossproduct is calculated in the same way as a 3x3 matrix determinant, with the following matrix.



[ i j k ]
A cross B = det [ Ax Ay Az ]
[ Bx By Bz ]

A and B is the two vectors you want to cross, and (i j k) is the X, Y and Z axes.

You calculate it in the following way.



A cross B = i*Ay*Bz - i*Az*By + j*Az*Bx - j*Ax*Bz + k*Ax*By - k*Ay*Bx

A cross B = i * (Ay*Bz - Az*By) + j * (Az*Bx - Ax*Bz) + k * (Ax*By - Ay*Bx)


So, the resulting vector (X Y Z) is:



X = (Ay*Bz - Az*By)
Y = (Az*Bx - Ax*Bz)
Z = (Ax*By - Ay*Bx)


Now, if A and B are not unit vectors, you will have a resulting vector that is not unit length, and you must divide the resulting vector with the length of A and B.

And by the way, the formula you gave, A x B = A B sin(), is not correct, it should be more like |A x B| = A B sin().

[This message has been edited by Bob (edited 04-19-2002).]

Gavin
04-19-2002, 02:04 AM
There is some code at....
www.cs.cf.ac.uk/user/G.R.Powell (http://www.cs.cf.ac.uk/user/G.R.Powell)
-> C CODE

gumby
04-19-2002, 04:17 AM
You have confused the cross product and its magnitude.
What you wrote is the magnitude:
|AxB| = |A| |B| sin(theta)

What Bob wrote above is the vector AxB.

Bob
04-19-2002, 04:28 AM
Gonna correct myself...


Now, if A and B are not unit vectors, you will have a resulting vector that is not unit length, and you must divide the resulting vector with the length of A and B.

I'm a little bit wrong here. If A and B are unit vectors, the resulting vector may not be of unit length. It's length is equal to sin(theta), where theta is the angle between the two vectors. Sorry for that one.