Site Tools


Differences

This shows you the differences between two versions of the page.

Link to this comparison view

developer:scriptsamples:vectorperpendicularto [2015/09/14] (current)
Line 1: Line 1:
 +====== Calculating a Perpendicular Vector ======
 +> **Developer:​** //​[[developer:​rhinoscript|RhinoScript]]//​
 +> **Summary:​** //​Demonstrates how to calculate a perpendicular vector using RhinoScript.//​
 +
 +=====Question=====
 +Does RhinoScript have a method to return a vector that is perpendicular to a given vector?
 +
 +=====Answer=====
 +No. But it is possible to write your own function. The following sample RhinoScript demonstrates how to calculate a perpendicular vector.
 +
 +<code vb>
 + ​Option Explicit
 +
 + '​ Description
 + ' ​  Set a vector to be perpendicular to another vector.
 + '​ Parameters
 + ' ​  v [in/out] - a unitized vector to set.
 + '​ Returns
 + ' ​  True or False indicating success or failure. ​
 + ​Function VectorPerpendicularTo( ByRef v )
 +
 +   Dim i, j, k, 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
 +
 +   v(i) = b
 +   v(j) = a
 +   v(k) = 0.0
 +
 +   If a <> 0.0 Then
 +     ​VectorPerpendicularTo = True
 +   Else
 +     ​VectorPerpendicularTo = False
 +   End If
 +
 + End Function
 +</​code>​
 +
 +You can test the above function as follows:
 +
 +<code vb>
 + Sub Test
 +   Dim v, b
 +   v = Rhino.VectorUnitize( Array(1,​1,​0) )
 +   b = VectorPerpendicularTo(v)
 +   ​MsgBox Rhino.Pt2Str( v )
 + End Sub
 +</​code>​
 +
 +\\
 +
 +
 +{{tag>​Developer RhinoScript}}
  
developer/scriptsamples/vectorperpendicularto.txt ยท Last modified: 2015/09/14 (external edit)