| |

The Frenet-Serret frame of orthonormal vectors along a curve are immediately obtained with the VectorCalculus command TNBFrame. For example, consider the calculations in Table 16.1.
| • |
Tools_Load Package: VectorCalculus
|
| • |
Set display format for vectors
|
|
Loading VectorCalculus

|
|
|

|
| • |
Apply the TNBFrame command.
|
|


|
|
Table 16.1 Frenet-Serret frame for simple helix
|
|
| |
Note that the TNBFrame command returns unit tangent, principal normal, and binormal vectors. The TangentVector, PrincipalNormal and Binormal commands in this same package return unit vectors only with the addition of the normalized option. Table 16.2 illustrates this for an expanding helix.
| • |
Define expanding helix.
|
|

|
| • |
Apply TangentVector, PrincipalNormal, and Binormal commands, the latter two requiring simplification with assumption on t.
|
|
![T := TangentVector(R, t, normalized); N := `assuming`([simplify(PrincipalNormal(R, t, normalized))], [real]); B := `assuming`([simplify(Binormal(R, t, normalized))], [real])](/view.aspx?sf=129405/428227/a47c0d9e4c037081947f80a95474f872.gif)
|
|
=  
|
|
Table 16.2 TangentVector, PrincipalNormal, and Binormal commands applied to expanding helix
|
|
| |

In an effort to verify orthogonality, compute the dot product of T with N.



What has happened? Associated with each vector in the Frenet frame is its point of contact (root point) on the curve. To see this, apply the GetRootPoint command, but first, modify the interface to show the tilde associated with assumed variables. (The showassumed parameter can have the value 0, 1, or 2, depending on whether no annotation, the tilde, or a proviso is displayed.) See Table 16.3.

Ordinarily, when the assume command is used to make a (permanent) assumption on a variable, a following tilde is displayed to indicate that this variable is no longer the same as the variable before the assumption was made. However, when the assuming functionality is used to make a (temporary) assumption on a variable in the course of a calculation, the assumption is removed before the result is returned. (For this reason, I always use "assuming" and never use the assume command.)
When a VectorCalculus Vector is created under the shadow of an "assuming" clause, that vector has an associated module that encodes the properties of the ambient vector space. When assuming exists, assumptions on terms inside this module cannot be "cleaned up" prior to output. Hence, both N and B have assumptions attached to t in their root points, but T does not, and the dot product fails because the root points are seen as different.
Consequently, for N or B, separate the calculation from the simplification, as shown in Table 16.4.
| • |
Obtain unsimplified, but unit N and B vectors.
|
| • |
Simplify with assumption that t is real in separate step.
|
|
![tempN := PrincipalNormal(R, t, normalized); tempB := Binormal(R, t, normalized); N := `assuming`([simplify(tempN)], [real]); B := `assuming`([simplify(tempB)], [real])](/view.aspx?sf=129405/428227/2e978cb5a70213bd509f0bae2aee9153.gif)
|
|
=  
|
= 
|
|
Table 16.4 Obtaining unit Frenet vectors free of entangling assumptions
|
|
| |

The principal normal now has a root point free of the entangling assumption, so the calculation = succeeds.

|