Developer: RhinoScript
Summary: Demonstrates how to calculate a 3-D vector that is perpendicular to another 3-D vector using RhinoScript.
How can I find a 3-D vector that is perpendicular to another 3-D vector using RhinoScript?
The Rhino SDK's ON_3dVector::PerpendicularTo function that will do this. But since you are using RhinoScript, you will need to come up with your own method.
The following sample function is the RhinoScript equivalent to the ON_3dVector::PerpendicularTo SDK function.
' Description: ' Returns a 3-D vector that is perpendicular to another 3-D vector. ' Parameters: ' v - the 3-D vector to evaluate. ' Returns: ' A perpendicular 3-D vector if successful, Null otherwise. ' Remarks: ' The result is not a unitized 3-D vector. ' Function GetPerpendicularVector( v ) GetPerpendicularVector = Null If Not IsArray(v) Or UBound(v) <> 2 Then Exit Function If Rhino.IsVectorZero(v) Then Exit Function Dim i, j, k Dim a, b k = 2 If Abs(v(1)) > Abs(v(0)) Then If Abs(v(2)) > Abs(v(1)) Then ' |v(2)| > |v(1)| > |v(0)| i = 2 j = 1 k = 0 a = v(2) b = -v(1) ElseIf Abs(v(2)) >= Abs(v(0)) Then ' |v(1)| >= |v(2)| >= |v(0)| i = 1 j = 2 k = 0 a = v(1) b = -v(2) Else ' |v(1)| > |v(0)| > |v(2)| i = 1 j = 0 k = 2 a = v(1) b = -v(0) End If ElseIf Abs(v(2)) > Abs(v(0)) Then ' |v(2)| > |v(0)| >= |v(1)| i = 2 j = 0 k = 1 a = v(2) b = -v(0) ElseIf Abs(v(2)) > Abs(v(1)) Then ' |v(0)| >= |v(2)| > |v(1)| i = 0 j = 2 k = 1 a = v(0) b = -v(2) Else ' |v(0)| >= |v(1)| >= |v(2)| i = 0 j = 1 k = 2 a = v(0) b = -v(1) End If Dim rc(2) rc(i) = b rc(j) = a rc(k) = 0.0 GetPerpendicularVector = rc End Function