Professional Documents
Culture Documents
Definition [Principal unit normal vector] At a point where κ ≠ 0, the principal unit
1 dT
normal vector for a curve in the plane is N= .
κ ds
2
aN = a 2 − aT .
Note that the derivatives -- the tangent vectors -- for R1 and for R2 are different. they have the
same directions, but different lengths.
> simplify(%);
2
2 1 + cos( t~2 ) t~
The graph below shows the curves and the tangent vectors (velocity vectors), R1'(t) and R2'(t).
The longer tangent vector is the tangent for R2.
> with(plots):with(plottools):
Warning, the name changecoords has been redefined
> s1 :=
plot({[t,sin(t),t=0..16*Pi],[t^2,sin(t^2),t=0..(16*Pi)^(1/2)]
}):
A:=plots[display](seq(PLOT(arrow(R2(s/20),subs(t=s/20,evalm(R
2p(t))), .1, .3, .1, color=green)), s=0..200),
insequence=true):
> B:=plots[display](seq(PLOT(arrow(R1(s/20),subs(t=s/20,evalm(R
1p(t))), .1, .3, .1, color=pink)), s=0..200),
insequence=true):
display({A,B,s1},axes=normal,view=[0..50,-10..10]);
The Unit Tangent Vector T
We identity |R '(t)| as speed and T(t) = R'(t)/ | R '(t) | as the unit tangent vector.
∂
R( t )
∂ ∂t
Definition: Speed(t) = R( t ) and T(t) = .
∂t speed( t )
2 2 2
∂ ∂ ∂
speed(t) = x( t ) + y( t ) + z( t ) .
∂t ∂t ∂t
and
T(t) = [x '(t), y '(t), z '(t)] / speed(t).
Example:
> x:=t->cos(t); y:=t->sin(t); z:=t->t;
R3:=t->vector([x(t),y(t),z(t)]);
assume(t,real);
x := cos
y := sin
z := t → t
R3 := t → [ x( t ), y( t ), z( t ) ]
> R3p:=t->map(diff,R3(t),t);
R3p(t);
speed:=sqrt(dotprod(R3p(t),R3p(t)));
T:=t->R3p(t)/speed;
simplify(evalm(T(t)));
R3p := t → map( diff, R3( t ), t )
[ −sin( t~ ), cos( t~ ), 1 ]
speed := 1 + sin( t~ )2 + cos( t~ )2
R3p( t )
T := t →
speed
1 1 1
− 2 sin( t~ ), 2 cos( t~ ), 2
2 2 2
> evalm(%);
1 1 1
− 2 sin( t~ ), 2 cos( t~ ), 2
2 2 2
Of course, this velocity vector R '(t) points in the direction of the tangent vector, T(t). R ' is a
multiple of T:
In thinking about how to define the unit normal vector, we ask what properties it should
have? Here are three:
(1) The normal vector should be perpendicular to the tangent vector.
(2) The unit normal vector should have length one.
(3) The normal vector should lie in the plane of R ' and R ' '.
Toward getting such a vector, consider T '. This vector is perpendicular to the unit tangent for
< T , T > = 1,
and
< T ', T > + < T , T ' > = 0.
(Prove this.)
Thus, T ' meets Condition 1. However T ' does not meet condition (2). Thus, we define the unit
normal
This N meets Conditions (1) and (2). What about Condition (3)? Recall (*). Take the derivative
of both sides:
κ = |T '(t)|/ speed(t).
Thus, the unit normal as defined above meets the Conditions (1), (2), and (3).
Computational summary:
speed = | R '(t) |.
∂
R( t )
∂t
Unit Tangent = T(t) = .
speed( t )
∂
T( t )
∂t
Unit Normal = .
∂
T( t )
∂t
∂
T( t )
∂t
curvature = κ = = | R ' x R ' '| / speed3.
speed( t )
Illustrations
Find the unit tangent, the unit normal, and curvature for each of the following.
> restart:
> with(linalg):assume(t,real);
Warning, the protected names norm and trace have been redefined and
unprotected
Define
> x:=t->3*cos(t); y:=t->3*sin(t); z:=t->0;
R:=t->vector([x(t),y(t),z(t)]);
x := t → 3 cos( t )
y := t → 3 sin( t )
z := 0
R := t → [ x( t ), y( t ), z( t ) ]
> Rp:=t->map(diff,R(t),t);
Rp(t);
Rp := t → map( diff, R( t ), t )
[ −3 sin( t~ ), 3 cos( t~ ), 0 ]
> sqrt(dotprod(Rp(t),Rp(t)));
simplify(%);
>
3 sin( t~ )2 + cos( t~ )2
3
> speed:=unapply(%,t);
speed := 3
The Unit Tangent
> unitT:=t->evalm(Rp(t)/speed(t));
unitT(t);
Rp( t )
unitT := t → evalm
speed( t )
[ −sin( t~ ), cos( t~ ), 0 ]
> Tp:=t->map(diff,unitT(t),t);
map(simplify,Tp(t));
Tp := t → map( diff, unitT( t ), t )
[ −cos( t~ ), −sin( t~ ), 0 ]
The Unit Normal
> N:=t->evalm(Tp(t)/sqrt(dotprod(Tp(t),Tp(t))));
map(simplify,N(t));
Tp( t )
N := t → evalm
dotprod( Tp( t ), Tp( t ) )
[ −cos( t~ ), −sin( t~ ), 0 ]
> Rpp:=t->map(diff,Rp(t),t);
Rpp(t);
Rpp := t → map( diff, Rp( t ), t )
[ −3 cos( t~ ), −3 sin( t~ ), 0 ]
Curvature
> topK:=crossprod(Rp(t),Rpp(t));
kappa:=simplify(sqrt(dotprod(topK,topK))/speed(t)^3);
topK := [ 0, 0, 9 sin( t~ )2 + 9 cos( t~ )2 ]
1
κ :=
3
>
t2
Example 2. R(t) = t, , 0 .
2
> restart:
> with(linalg):assume(t,real);
Warning, the protected names norm and trace have been redefined and
unprotected
x := t → et cos( t )
y := t → et sin( t )
z := exp
> x:=t->cos(t); y:=t->sin(t); z:=t->1/2*t;
x := cos
y := sin
1
z := t → t
2
> R:=t->vector([x(t),y(t),z(t)]);
R := t → [ x( t ), y( t ), z( t ) ]
> Rp:=t->map(diff,R(t),t);
map(simplify,Rp(t));
Rp := t → map( diff, R( t ), t )
[ et~ ( cos( t~ ) − sin( t~ ) ), et~ ( sin( t~ ) + cos( t~ ) ), et~ ]
> sqrt(dotprod(Rp(t),Rp(t)));
simplify(%);
2 2 2
( et~ cos( t~ ) − et~ sin( t~ ) ) + ( et~ sin( t~ ) + et~ cos( t~ ) ) + ( et~ )
3 et~
> speed:=unapply(%,t);
speed := t~ → 3 et~
The Unit Tangent
> unitT:=t->evalm(Rp(t)/speed(t));
unitT(t);
Rp( t )
unitT := t → evalm
speed( t )
1 3 ( et~ cos( t~ ) − et~ sin( t~ ) ) 1 3 ( et~ sin( t~ ) + et~ cos( t~ ) ) 1
3
3 , ,
et~ 3 et~ 3
> Tp:=t->map(diff,unitT(t),t);
map(simplify,Tp(t));
Tp := t → map( diff, unitT( t ), t )
1 1
− 3 ( sin( t~ ) + cos( t~ ) ), − 3 ( −cos( t~ ) + sin( t~ ) ), 0
3 3
The Unit Normal
> N:=t->evalm(Tp(t)/sqrt(dotprod(Tp(t),Tp(t))));
map(simplify,N(t));
Tp( t )
N := t → evalm
dotprod( Tp( t ), Tp( t ) )
1 1
− 2 ( sin( t~ ) + cos( t~ ) ), − 2 ( −cos( t~ ) + sin( t~ ) ), 0
2 2
> Rpp:=t->map(diff,Rp(t),t);
Rpp(t);
Rpp := t → map( diff, Rp( t ), t )
[ −2 et~ sin( t~ ), 2 et~ cos( t~ ), et~ ]
The Binormal vector
> B:=t->evalm(crossprod(unitT(t),N(t)));
map(simplify,B(t));
B := t → evalm( crossprod( unitT( t ), N( t ) ) )
1 1 1
6 ( −cos( t~ ) + sin( t~ ) ), − 6 ( sin( t~ ) + cos( t~ ) ), 6
6 6 3
Curvature
> topK:=crossprod(Rp(t),Rpp(t));
kappa:=simplify(dotprod(topK,topK)/speed(t)^3);
2
topK := [ ( et~ sin( t~ ) + et~ cos( t~ ) ) et~ − 2 ( et~ ) cos( t~ ),
2
−2 ( et~ ) sin( t~ ) − ( et~ cos( t~ ) − et~ sin( t~ ) ) et~,
2 ( et~ cos( t~ ) − et~ sin( t~ ) ) et~ cos( t~ ) + 2 ( et~ sin( t~ ) + et~ cos( t~ ) ) et~ sin( t~ ) ]
2
κ := 3 et~
3
>
Here, we draw the curve, the unit tangent, and the unit normal
> base:=convert(map(evalf,subs(t=Pi/4,R(t))),list);
directionT:=convert(map(evalf,subs(t=Pi/4,unitT(t))),list);
directionN:=convert(map(evalf,subs(t=Pi/4,N(t))),list);
directionB:=convert(map(evalf,subs(t=Pi/4,B(t))),list);
base := [ 1.5508831969180257476, 1.5508831969180257476, 2.1932800507380154566 ]
directionT := [ 0., .81649658092772603269, .57735026918962576449 ]
directionN := [ -1.0000000000000000000, .61237243569579452454 10-19, 0. ]
directionB :=
[ -.35355339059327376220 10-19, -.57735026918962576451, .81649658092772603272 ]
> sqrt(dotprod(directionT,directionB));Digits:=20;
0.
Digits := 20
> K:=spacecurve([x(t),y(t),z(t)],t=0..Pi/2,axes=NORMAL,color=GR
EEN):
J:=arrow(base, directionT, [1/4, 1/4, 1/4],
.2,.4,1/10,axes=NORMAL,color=red):
L:=arrow(base, directionN, [1/4, 1/4, 1/4],
.2,.4,1/10,axes=NORMAL,color=BLACK):
M:=arrow(base, directionB, [1/4, 1/4, 1/4],
.2,.4,1/10,axes=NORMAL,color=blue):
> display({J,K,L,M},axes=NORMAL,orientation=[-10,80],scaling=co
nstrained,color=BLACK);
> n:=20:lastpt:=Pi/2:Jj:=array(1..n):Ll:=array(1..n):Mm:=array(
1..n):base:=array(1..n):pic:=array(1..n):
K:=spacecurve([x(t),y(t),z(t)],t=0..lastpt,scaling=constraine
d,axes=NORMAL,color=GREEN):
for i from 1 to n do
base[i]:=convert(map(evalf,subs(t=lastpt*i/n,R(t))),list):
Jj[i]:=arrow(base[i],
convert(map(evalf,subs(t=lastpt*i/n,unitT(t))),list), [1/4,
1/4, 1/4],
.2,.4,1/10,axes=NORMAL,color=red):
Ll[i]:=arrow(base[i],
convert(map(evalf,subs(t=lastpt*i/n,N(t))),list), [1/4, 1/4,
1/4],
.2,.4,1/10,axes=NORMAL,color=BLACK):
Mm[i]:=arrow(base[i],
convert(map(evalf,subs(t=lastpt*i/n,B(t))),list), [1/4, 1/4,
1/4],
.2,.4,1/10,axes=NORMAL,color=blue):
pic[i]:=display({K,Jj[i],Ll[i],Mm[i]},axes=NORMAL,orientation
=[-10,80],scaling=constrained,color=BLACK):
od:
> display(seq(pic[i], i=1..n),
scaling=constrained,insequence=true);
>
>