How determine the torsion of a curve at a parameter using RhinoScript?
The torsion of a curve measures how sharply it is twisting. It is analogous to curvature in two dimensions. The following example function calculates the torsion of a curve at a parameters:
'''
''' Description
''' Evaluate the torsion of a curve.
''' Parameters
''' crv - a string that identifies the curve to evaluate
''' t - a parameter of the curve within its domain
''' Returns
''' The torsion if successful.
''' Null if the torsion is undefined at the parameter.
'''
Function EvaluateTorsion(crv, t)
' Local variables
Dim data, d1xd2, numer, denom
' Default return value
EvaluateTorsion = Null
' Calculate the torsion
data = Rhino.CurveEvaluate(crv, t, 3)
If IsArray(data) And UBound(data) = 3 Then
d1xd2 = Rhino.VectorCrossProduct(data(1), data(2))
numer = Rhino.VectorDotProduct(d1xd2, data(3))
denom = Rhino.VectorDotProduct(d1xd2, d1xd2)
If denom > 0 Then
EvaluateTorsion = numer / denom
End If
End If
End Function
The following example script demonstates how you might use the above function:
Sub TestTorsionOnCurve()
' Local variables
Dim crv, pt, t, tor
' Select curve to evaluate
crv = Rhino.GetObject("Select curve to evaluate", 4, True)
If IsNull(crv) Then Exit Sub
' Get point on curve to evalaute
pt = Rhino.GetPointOnCurve(crv, "Point to evaluate")
If Not IsArray(pt) Then Exit Sub
' Get parameter of the point on a curve that is closest to pt
t = Rhino.CurveClosestPoint(crv, pt)
If IsNull(t) Then Exit Sub
' Evaluate the torsion of the curve at t.
tor = EvaluateTorsion(crv, t)
If IsNull(tor) Then
Rhino.Print "Torsion at curve parameter " & CStr(t) & " is undefined"
Else
Rhino.Print "Torsion at curve parameter " & CStr(t) & " is " & CStr(tor)
End If
End Sub