Joe - 1 year ago 135
Vb.net Question

# Determine angle of a straight line in 3D space

I have a straight line in space with an start and end point (x,y,z) and I am attempting to get the angle between this vector and the plane defined by

`z=0`
. I am using VB.NET

Here is a picture of the line in my 3d environment (the line I'm intersted in is circled in red) :

It is set to an angle of 70 degrees right now.

You need 2 rays to define an angle.

If you want the angle between a vector and a plane, it is defined for any vector in that plane. However, there is only one minimal value for that, which is the angle between a vector and its projection onto said plane.

Therefore, that minimal value is the one we take when we speak of the angle between a vector and a plane.

This value is also π/2 - the angle between your vector and the the vector that is normal to the plane.You can read more about it all on this site.

With `v` your vector (thus `v.x = end.x - start.x` and idem for `y` and `z`), `n` the normal to the plane and `a` the angle you are looking for, we know from the definition of a scalar product that:

``````<v,n> = ||v|| * ||n|| * cos(π/2 - a)
``````

We know `cos(π/2 - a) = sin(a)`, and the normal to the `z=0` plane is simply the vector `n = (0, 0, 1)`. Thus both the scalar product, `v.x * n.x + v.y * n.y + v.z * n.z`, and the norm of n, `||n|| = 1`, can be simplified a lot. We get the following expression:

``````sin(a) = v.z / ||v||
``````

Thus finally, the formula by taking the reciprocical of the sine and expliciting the norm of `v`:

``````a = Asin(v.z / sqrt( v.x*v.x + v.y*v.y + v.z*v.z ))
``````

According to this documentation the `Asin` function exists in your System.Math class. It does, however, return the value in radians:

Return Value Type: System.Double An angle, θ, measured in radians, such that -π/2 ≤ θ ≤ π/2 -or- NaN if d < -1 or d > 1 or d equals NaN.

Luckily the same System.Math class contains the value of π so that you can do the conversion:

``````a *= 180 / Math.PI
``````
Recommended from our users: Dynamic Network Monitoring from WhatsUp Gold from IPSwitch. Free Download