Table of Contents
Calculate the angle between two vectors
C++, .NET
The following example code demonstrates how to calculate the angle between two 3-D vectors.
C++
// Description: Calculates the angle between two 3-D vectors. // Parameters: // v0 - [in] The first angle. // v1 - [in] The second angle. // reflex_angle - [out] The reflex angle. // Returns: The angle in radians. static double ON_3dVectorAngle( ON_3dVector v0, ON_3dVector v1, double* reflex_angle = 0 ) { // Unitize the input vectors v0.Unitize(); v1.Unitize(); double dot = ON_DotProduct( v0, v1 ); // Force the dot product of the two input vectors to // fall within the domain for inverse cosine, which // is -1 <= x <= 1. This will prevent runtime // "domain error" math exceptions. dot = ( dot < -1.0 ? -1.0 : ( dot > 1.0 ? 1.0 : dot ) ); double angle = acos( dot ); if( reflex_angle ) *reflex_angle = (ON_PI * 2) - angle; return angle; }
C#
public static double ON_3dVectorAngle(On3dVector v0, On3dVector v1) { // Unitize the input vectors v0.Unitize(); v1.Unitize(); double dot = OnUtil.ON_DotProduct(v0, v1); // Force the dot product of the two input vectors to // fall within the domain for inverse cosine, which // is -1 <= x <= 1. This will prevent runtime // "domain error" math exceptions. dot = (dot < -1.0 ? -1.0 : (dot > 1.0 ? 1.0 : dot)); return System.Math.Acos(dot); }
VB.NET
Public Shared Function ON_3dVectorAngle(ByVal v0 As On3dVector, ByVal v1 As On3dVector) _ As Double ' Unitize the input vectors v0.Unitize() v1.Unitize() Dim dot As Double = OnUtil.ON_DotProduct(v0, v1) ' Force the dot product of the two input vectors to ' fall within the domain for inverse cosine, which ' is -1 <= x <= 1. This will prevent runtime ' "domain error" math exceptions. If (dot < -1.0) Then dot = -1.0 If (dot > 1.0) Then dot = 1.0 Return System.Math.Acos(dot) End Function