PDA

View Full Version : Maybe a stupid question



KurtCob
12-20-2000, 02:21 AM
Hello people,

I want to calculate the angle between two lines, I found some code in the net that can calculate the angle between two vectors, now how can I procede, witch is the diference between a line and a vector ? does someone know a way to calculate the angle between two lines ?
Thank you for the moment
Best regards
Kurt

Bob
12-20-2000, 02:48 AM
A line is actually a vector, or at least you describe the direction of a line with a vector, so use the same code for lines as for vectors.

Boubou
12-20-2000, 03:01 AM
hello,

I sorry i don't speak very well english!

A line is define with 2 points... For make a vector with a line make that:

A (xa,ya,za)
B (xb,yb,zb) //2 points

vector1 (xv,yv,zv)

vector1.x = -xa +xb;
vector1.y = -ya +yb;
vector1.z = -za +zb;

vector2.x = ...

//and for calculate the angle
//make the scalaire multiplication
//between two vectors

phi = acos ((vector1*vector2)/(|vector1| |vector2|)); //* is the scalaire multiplication


I hope is correct and perhaps it's help you

Best regards

Jérôme

KurtCob
12-20-2000, 03:04 AM
Thank you !
I will try something in this way.
Best regards
Kurt

KurtCob
12-20-2000, 03:12 AM
Hello

phi = acos ((vector1*vector2)/(|vector1| |vector2|)); //* is the scalaire multiplication

ok you have vector1*vector2 / by what ? |vector1| * or / by |vector2|

Thank you for the moment
Best regards
Kurt

Boubou
12-20-2000, 03:30 AM
Hi,



ok you have vector1*vector2 / by what ? |vector1| * or / by |vector2|



In analytical geometry, there are a scalaire multiplication... I'm sorry... I don't really know how to say it in english.

* is the scalaire multiplication you make that:

vector1 * vector2 = xa*xb + ya*yb + za*zb;

|vector1| = sqrt(vector1.x*vector1.x + vector1.y*vector1.y +vector1.z*vector1.z); //is the module of the vector

and then you make |vector1|.|vector2|; //it's a simple multiplication for two number!

You understant?

If you have any question... e-mail me!

I hope you understand and it's help you!

Best regards
Jérôme

softland_gh
12-20-2000, 03:32 AM
Hey,

phi= acos(v1.v2/(|v1|*|v2|))

where v1.v2=v1x*v2x+v1y*v2y+v1z*v2z

Maybe it's clearer now, however, be aware that the function acos() returns an angle between zero and pi=3.14159... and if the actual angle is, say, 5*pi/4, acos() will return 3*pi/4 because they both have the same cosine and acos() couldn't tell which one you want. So, you will need to know the sine of the angle as well, which is obtained by deviding the length of the cross product of the two vectors by the product of the lengths of the two vectors. If you want to know how this is done drop me a line.

dmy
12-20-2000, 05:44 AM
it's called dot product.
DMY

Boubou
12-20-2000, 06:56 AM
Originally posted by dmy:

it's called dot product.
DMY

Thank you DMY,

I learn every days...

Best regards
Jérôme

Boubou
12-21-2000, 12:56 AM
Hi,

DMY, how do you say in english the another product.

1) dot product

2) vectoriel product (it's correct?)

Thank you for your help!

Have a good day!

Best regards
Jérôme

dmy
12-21-2000, 06:34 AM
the most common name i found in graphics textbooks is cross product.

so recap, the most common operations with vectors in graphics are two: the dot product and the cross product.

dot/inner/scalar product is the componet-wise product:

a dot b = s (scalar) =
a.x * b.x + a.y * b.y + ... =
|a| * |b| * cos(phi)

cross/vector/outer product, gives the plane-bundle where the two vectors are built, or the normal to that plane, wich is basically the same.

a cross b = n (vector) =

(for the 3-space case)

n.x = a.y*b.z - a.z*b.y
n.y = a.z*b.x - a.x*b.z
n.z = a.x*b.y - a.y*b.x

|n| = |a| * |b| * sin(phi)
(^^^ correct me boys if i'm wrong about this ^^^)


DMY



[This message has been edited by dmy (edited 12-21-2000).]

KurtCob
12-22-2000, 12:16 AM
Ok guys,

WE got it working, thank you for everybody that replies, especial thanks for Boubou and softland_gh.
http://www.opengl.org/discussion_boards/ubb/smile.gif
Best regards
Merry Christmas and have a nice 2001.
Kurt

KurtCob
12-22-2000, 01:07 AM
Ok,

Everything with the angle is working, in order to try I have drawn two lines in AutoCAD system, in AutoCAD I have the following lines |_, (with 90 degrees) but then when I use the coordinates that is the AutoCAD system I have the following lines in my system (also with 90 degrees but in a wrong way:
_
|

The code for the projection is :
glOrtho(500.0, -500.0, 500.0, -500.0, -1.0, 100.0)

Can someone explain me a bit ?
Thank youfor the moment
Best regards
Kurt

PS.: if someone want a picture of a screen shot of both systems (my application and AutoCAD) I can send it by email, just ask me.

Dodger
12-22-2000, 07:14 AM
The OpenGL coordinate system is set up in a different way. By default the Y axis goes up, not down. Flipping all your Y coordinates should take care of it http://www.opengl.org/discussion_boards/ubb/wink.gif

softland_gh
12-22-2000, 07:28 AM
I think what Dodger said is right. Maybe it's matter of right-handed coordinate systems and left-handed coordinate systems. You have to flip one axis.