# Vector3d.VectorAngle Method implementation

This might be an esoteric question, but I wanted to know what the exact implementation is for the Rhino.Geometry.Vector3d.VectorAngle(Vector3d, Vector3d) method. I know there are a number of ways of calculating the angle between 3d vectors (using arccos or atan2). In 3d space, my vectors are based on a series of 3 points along a curve (so the first vector is V01, and the second is V12).

Based on testing in Grasshopper, I see that the angle is restricted to the 0 to pi range. I’m implementing a similar method in C++ program to try and replicate some results from a grasshopper script, so I’d like to get an implementation as close to the grasshopper definition as possible.

Hi @MClare,

Here you go:

``````public static double VectorAngle(Vector3d a, Vector3d b)
{
if (!a.Unitize() || !b.Unitize())
return RhinoMath.UnsetValue;

// compute dot product
double dot = a.m_x * b.m_x + a.m_y * b.m_y + a.m_z * b.m_z;
// remove any "noise"
if (dot > 1.0) dot = 1.0;
if (dot < -1.0) dot = -1.0;