Perpendicular Vectors
Windows only

Demonstrates how to calculate a vector that is perpendicular to another vector using RhinoScript.

' 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