Chapter 12. Curvature and Torsion of Curves
Rovenski Vladimir, Haifa
> restart:
12.2 Curvature and Osculating Circle of a Plane Curve
Example 1 . The moving osculating circle of a plane curve (ellipse, logarithmic spiral, etc).
F.1 denotes the unit tangent vector; F.3 - the osculating circle; F.2 - its radius as a line segment.
> with(plots): with(linalg): m:=12:
Warning, existing definition for changecoords has been overwritten
Warning, protected name norm has been changed and unprotected
Warning, protected name trace has been changed and unprotected
> a:=2: r:=[a*cos(t),sin(t)]: t1:=0: t2:=2*Pi: # ellipse
> rt:=diff(r, t): rt2:=diff(rt, t): rt3:=diff(rt2, t):
> tau:=evalm(rt/norm(rt, 2)): n:=[-tau[2],tau[1]]:
> k:=simplify((rt[1]*rt2[2]-rt[2]*rt2[1])/norm(rt,2)^3):
> F||1:=evalm(r+s*tau): F||2:=evalm(r+s*n/k): F||3:=evalm(r+n/k+(n*cos(2*Pi*s)+tau*sin(2*Pi*s))/k):
> T:=i -> t1+i*(t2-t1)/m: for j from 1 to 3 do p||j:=i->plot([subs(t=T(i), F||j[1]), subs(t=T(i), F||j[2]), s=0..1]): A||j:=display([seq(p||j(i), i=0..m)], insequence=true) od:
> A||4:=plot([r[1], r[2], t=t1..t2], thickness=2):
> display([seq(A||i, i=1..4)], scaling=constrained);
Example 3 . Coefficient of engagement of a curve with the point.
IC of an ellipse is equal to 2 ; for the Pascal's limacon (it has one loop), IC= 4 holds.
> restart: with(plots):
Warning, existing definition for changecoords has been overwritten
> a:=1: b:=.2: r:=[(a*cos(t)-b)*cos(t), (a*cos(t)-b)*sin(t)]: t1:=0: t2:=2*Pi: # derive curvature of the limacon using the previous program
> rt:=diff(r, t): rt2:=diff(rt, t): rt3:=diff(rt2, t):
> k:=simplify((rt[1]*rt2[2]-rt[2]*rt2[1])/sqrt(rt[1]^2+rt[2]^2)^3);
> evalf(int(k, t=0..2*Pi)/(2*Pi));
> plot([k, diff(k,t)], t=0..2*Pi);
>
Example 4 . The coefficient of engagement of a plane curve
In the program the curve _R under increasing R will intersect the origin n= 5 times.
> n:=5: f:=randpoly(z, terms=4, degree=n)+10000;
> f1:=simplify(subs(z=R*(cos(t)+I*sin(t)), f)): f2:=collect(subs(I=y,f1), y): fy:=coeff(f2, y, 1); fx:=coeff(f2, y, 0);
> plots[animate]([fx, fy, t=0..2*Pi], R=0..3, numpoints=200,scaling=constrained);
>
12.3 Curvature and Torsion of a Space Curve
The program for deriving of characteristics of the space curve at the given point.
> restart: with(linalg): Digits:=2; # Data.
Warning, protected name norm has been changed and unprotected
Warning, protected name trace has been changed and unprotected
> x:=t -> R*cos(t): y:=t -> R*sin(t): z:=t-> a*t: t0:=1: x0:=evalf(limit(x(t),t=t0));z0:=limit(z(t),t=t0); # Calculations by formulas at the point t.
> assume(R>0, a>0,t>0,t<Pi/2): r:=[x(t), y(t), z(t)]; rt:=diff(r, t); rt2:=diff(rt, t); rt3:=diff(rt2, t); tm:=[(x1-x(t))/rt[1],(y1-y(t))/rt[2],(z1-z(t))/rt[3]]; p1:=simplify(det([[x1-x(t),y1-y(t),z1-z(t)], rt, rt2]))=0; tau:=evalm(rt/norm(rt, 2)); b1:=crossprod(rt, rt2); b:=evalm(b1/norm(b1,2)); n:=crossprod(b, tau); p2:=simplify(dotprod(tau, [x1-x(t),y1-y(t),z1-z(t)], 'orthogonal'))=0; p3:=simplify(dotprod(n, [x1-x(t), y1-y(t), z1-z(t)], 'orthogonal'))=0; k:=simplify(norm(b1,2)/norm(rt, 2)^3); kappa:=simplify(det([rt,rt2,rt3])/norm(b1, 2)^2);
Calculations at the given point t_0.
> t:=t0; tm0:=simplify(tm); p10:=simplify(p1);tau0:=evalm(tau); b0:=evalm(b); n0:=evalm(n);p20:=simplify(p2); p30:=simplify(p3); k0:=simplify(k); kappa0:=simplify(kappa);
>
Example 1 . Plotting the moving Frenet frame and osculating circles of a space curve,
with the test example of the curve of Viviani.
F.1 denotes the tangent vector; F.2 denotes the main normal vector; F.3 denotes the binormal vector;
F.5 denotes the osculating circle; F.4 denotes the segment of its position vector.
> restart: with(plots): with(linalg): R:=2: m:=32: t1:=0: t2:=2*Pi:
Warning, existing definition for changecoords has been overwritten
Warning, protected name norm has been changed and unprotected
Warning, protected name trace has been changed and unprotected
> r:=[R*cos(t)^2, R*cos(t)*sin(t), R*sin(t)]:
> rt:=diff(r, t): rt2:=diff(rt, t): rt3:=diff(rt2, t): tau:=evalm(rt/norm(rt, 2)): b1:=crossprod(rt, rt2): b:=evalm(b1/norm(b1, 2)): n:=crossprod(b, tau):
> k:=simplify(norm(b1,2)/norm(rt,2)^3): F||1:=evalm(r+s*tau): F||2:=evalm(r+s*n): F||3:=evalm(r+s*b): F||4:=evalm(r+s*n/k): F||5:=evalm(r+n/k+(n*cos(2*Pi*s)+tau*sin(2*Pi*s))/k):
> T:=i->t1+i*(t2-t1)/m: for j from 1 to 5 do p||j:=i -> spacecurve(subs(t=T(i), evalm(F||j)), s=0..1): A||j:=display([seq(p||j(i), i=0..m)], insequence=true) od:
> B:=spacecurve(r, t=t1..t2, thickness=2):
> display([A||1, A||2, A||3, B], scaling=constrained, orientation=[40, 80], axes=framed);
> display([A||4, A||5, B], scaling=constrained, orientation=[40,80], axes=boxed);
>
12.4 Natural Equations of a Curve
By Theorem 12.4.1 the curve r(t) is not regular.
> f:=t^2*sin(2*Pi/t^2); ft:=diff(f, t);
> plot(f, t=0.2..2.5); plot(ft, t=0.45..2.5);
>
Example 2 . The curve r(t) in of the class that does not belong to the plane and whose curvature
k(t) vanishes at only one point, but with torsion (t)= 0.
> reaflib(piecewise):
> X:=t:Y:=piecewise(t<0,0,t^4):Z:=piecewise(t<0,t^4,0):
> plots[tubeplot]([X,Y,Z,radius=.1],t=-1.3..1.3, style=patchnogrid,scaling=constrained,axes=normal);
>