Note

This Mathematica notebook is from the WWW project A Visual Dictionary of Special Plane Curves. Copyright © 1995-2000 by Xah Lee. (http://xahlee.org/)

Packages and Initializations

Needs["ParaPlot`"]
(*MathSource Item:0207-986*)

Needs["PlaneCurveFormulas`"](*0208-482*)

Needs["PlaneCurveGenerator`"](*0208-314*)

Needs["Graphics`ImplicitPlot`"]
(*MathSource Item:0200-529*)

$HistoryLength = 10;

Equiangular Spiral

Description

Equiangular spiral (aka Logarithmic spiral, Bernoulli spiral, and logistique) describe a family of spirals such that the angle of any radial vector at a point P on the curve form a constant angle with its tangent.

Explaination:
(1) Let there be a spiral.
(2) From any point P on the spiral, draw a line toward the center of the spiral. (this line is called the radial vector)
(3) The radial vector and the tangent at P will form an angle (angles).
(4) If the angle so formed is a constant for any point P on the spiral, it is an Equiangular spiral.

A special case of Equiangular spiral is the circle, where the constant angle is 90 Degrees.

Let alpha be the constant angle.
Parametric formula: {E^(t Cot[alpha]) Cos[t], E^(t Cot[alpha]) Sin[t]}
Polar Equation: r == E^(theta Cot[alpha])

Equiangular spiral is the cross section of the shell of Nautilus.

ParaPlot[
	EquiangularSpiral[84 Degree][t],
	{t, 0, 10 Pi, 5}, PlotParameterValue->True,
	AspectRatio->Automatic
];

six equiangular spirals of different degree

Clear[myList];
myList = {40, 50, 60, 70, 80, 85};

Do[
	ParaPlot[
		EquiangularSpiral[myList[[i]] Degree][t],
		{t, 0,  3 2 Pi},
		AspectRatio->Automatic,
		Ticks->None,
		PlotRange->{{-1,1},{-1,1}} *
			N@ First@EquiangularSpiral[ myList[[i]] Degree][6 Pi] ,
		CurveColorFunction->{Hue[.7]&}
	],
	{i,1, Length@ myList}
]

An animation that demonstrats the equi-angular property of equiangular spiral.

Clear[ tList, pList];

tList = Range[0, 2 Pi, 2 Pi/30];
pList = EquiangularSpiral[75 Degree][#]& /@ tList;

Do[

ParaPlot[
	EquiangularSpiral[75 Degree][t], {t,0, 2 Pi}, Take[tList,i],
	PlotCurve->False,
	TangentLineLength->2,
	ConchoidSetting->{{0,0},{-1,1}},
	PlotRange->{{-3.5,6.3},{-5,2.5}},
	AspectRatio->Automatic,
	Epilog->{ Hue[0], Line[{{0,0}, pList[[i]]}] }
],{i, 1, Length@ tList}

];
Clear[tList, pList];

Catacaustic

Catacaustic of an Equiangular spiral is an equal spiral.

ParaPlot[
	EquiangularSpiral[80 Degree][t],
	{t, 0, 2.5 Pi}, Range[0,4 Pi, 4 Pi/50],
	CausticLineLength->20, CausticOrigin->{0,0},
	CurveStyle->{Thickness[.007]},
	PlotDot->False,
	CausticLineStyle->{Hue[0]}, AspectRatio->Automatic,
	Axes->False,
	PlotRange->{{-2,3.2},{-3,2}}
];

Note: Mathematica Graphics bug

Note: A bug in Mathematica version 2.1 will cause plotting of large circle with small PlotRange to generate a PostScript error. To see whether this bug is on your version, try:

Show[Graphics[Circle[{0,0},30], PlotRange->{{29,31},{-1,1}}]]

If everything runs fine, you should see an arc of a circle of radius 30, otherwise you will hear a beep and see either an incomplete arc or an error placeholder for the graphics.
To get around this bug, either increase PlotRange to include all parts of the circle or execute the following code:

Unprotect[Circle];
Circle[{x_,y_},r_] :=
      Table[Circle[{x,y},r,{th,th+Pi/4}],{th,0,2Pi-Pi/4,Pi/4}];
Protect[Circle];

Evolute & Involute

The Evolute and Involute of an Equiangular spiral is an equal spiral.

ParaPlot[
	EquiangularSpiral[80 Degree][t],
	{t, 0, 7 Pi, 4 Pi/50},
	PlotDot->False,
	PlotCurve->False,
	PlotEvolute->True,
	PlotOsculatingCircle->True,
	CurveColorFunction->{Hue[.75]&},
	DotStyle->{{Hue[0,0,1],PointSize[.015]}},
	AspectRatio->Automatic,
	Axes->False,
	PlotRange->{{-6.7, 4.1},{-6.3, 5.1}},
	Background->Hue[0,0,0]
];

ParaPlot[
	EquiangularSpiral[70 Degree][t],
	{t, 0, 3 Pi},
	ArcLengthPartition[EquiangularSpiral[80 Degree][t],
		{t, 0, 3 Pi}, 60],
	PlotDot->False,
	PlotInvolute->True,
	CurveColorFunction->{Hue[.5,.7,1]&},
	CurveStyle->{Thickness[.008]},
	DotStyle->Table[{Hue[i],PointSize[.02]},{i,.5,1,.5/60}],
	PlotRange->All,
	AspectRatio->Automatic,
	Background->Hue[0,0,0]
];

Inverse

The Inverse of an Equiangular spiral with respect to its center is an equal spiral.

ParaPlot[
	EquiangularSpiral[78 Degree][t],
	{t, 0, 4 Pi, 4 Pi/120},
	InversionCircle->{{0,0}, 3.802 },
	PlotDot->False,
	DotStyle->{{Hue[0,1,.8],PointSize[.02]},{Hue[0,0,.8],PointSize[.02]}},
	CurveColorFunction->{Hue[.65,#,.8]&},
	CurveStyle->{Thickness[.008]},
	AspectRatio->Automatic
];

Radial

The Radial of Equiangular spiral is an equal spiral.

ParaPlot[
	Rotate[EquiangularSpiral[70 Degree][t], Pi/2],
	{t, 0, 2 Pi, 2 Pi/40},
	PlotRadial->True,
	CurveColorFunction->{Hue[.75,.7,1]&},
	CurveStyle->{Thickness[.007]},
	DotStyle->Table[{Hue[i],PointSize[.02]},{i,0,.5,.5/40}],
	AspectRatio->Automatic,
	Background->Hue[0,0,0]
];

Pedal

The Pedal of an Equiangular spiral with respect to its center is an equal spiral.

Clear[gp]

gp = ParaPlot[
	EquiangularSpiral[60 Degree][t],
	{t, 0, 2 Pi, 2 Pi/80},
	PedalPoint->{0,0},
	PlotDot->False,
	PlotCurve->True,
	LineStyle->{Hue[.7]},
	PlotRange->All,
	Axes->False,
	AspectRatio->Automatic
];

Show[
	Graphics[
		gp /. Line[{x_,y_,z_}]->Line[{x,y}]
	],
	AspectRatio->Automatic,
	Axes->False
];

ParaPlot[
	EquiangularSpiral[60 Degree][t],
	{t, 0, 2 Pi, .2},
	ArcLengthPartition[ EquiangularSpiral[60 Degree][t],
		{t, 0, 2 Pi}, 30
	],
	PedalPoint->{0,0},
	PlotDot->False,
	PlotRange->All,
	AspectRatio->Automatic
];

Geometric Sequence

If any part of the curve is scale up or down, it becomes congruent to other parts of the curve. Lengths of
segments (red lines) cut by equally spaced radii (green lines) is a geometric sequence. Segments of any
radius vector cut by the curve is also a geometric sequence, with a multiplier of E^(2 Pi Cot[alpha]). In the
figure, the dots are points on a 85 degree equiangular spiral.

Clear[pList]

pList = EquiangularSpiral[85 Degree] /@ Range[0, 9 Pi , 2 Pi/(4 4)]//N;

Show[
	Graphics[{
		{Hue[.32,1,1],
			Line /@ (100 {{0,0},{Cos@#, Sin@#}}& /@ Range[0, 2 Pi, 2 Pi/(4 4)])
		},
		{Hue[0,1,1], Line@ pList},
		PointSize[.022],
		Transpose[{
			Drop[ Table[ Hue[.75,i,.9], {i,0,1,1/Length@ pList}],-1],
			Point/@ pList
		}]
	}],
	PlotRange->{{-7.24, 9.41},{-8.20, 6.31}},
	AspectRatio->Automatic,
	Background->GrayLevel[0]
];

ParaPlot[
	EquiangularSpiral[85 Degree][t],
	{t, 0, 4 2 Pi , 2 Pi/(4 4)},
	PlotCurve->False,
	DotStyle->Table[{PointSize[.02], Hue[0,i,.8]}, {i,0,1,1/(4 4 4)}],
	CurveColorFunction->{Hue[.75]&},
	AspectRatio->Automatic,
	PlotRange->All,
	Axes->True,
	Ticks->None,
	Prolog->{
		Line /@
		(10 {{0,0},{Cos@#, Sin@#}}& /@
			Range[2 Pi-2 Pi/4, 2 Pi, 2 Pi/4/4])
	}
];

Persuit Curves

Clear[n, tRange, pList, tmin, tmax, tstep]

n = 4;    (*sides of polygon, that determines angle *)
tmin = 0;
tmax =  Pi;
tstep = (tmax-tmin)/30;

tRange = N@ Range[tmin, tmax, tstep];

pList = N@ E^(# Cot[(Pi-2 Pi/n) 1/2]) {-Sin@#, -Cos@#}& /@ tRange;

pList = N@ Table[ Rotate[#,i+Pi/4]& /@ pList,
	{i, 0, (2 Pi) - (2 Pi/n), 2 Pi/n}
];

Show@ Graphics[
	{PointSize[.015],
	Transpose[{
		Table[ Hue[0, 1-i, .8], {i,0,1,1/30}],
		#
	}]& /@ Map[ Point, pList, {-2}],
	Line[ Last@ Transpose[pList] /. {x_, y___} ->{x,y,x} ]
	},
	Axes->False,
	AspectRatio->Automatic,
	PlotRange->All
];

Clear[n, tRange, pList, tmin, tmax, tstep]

n = 6;    (*sides of polygon, that determines angle *)
tmin = 0;
tmax =  1.4 Pi;
tstep = (tmax-tmin)/40;

tRange = N@ Range[tmin, tmax, tstep];

pList = N@ E^(# Cot[-(Pi-2 Pi/n) 1/2]) {Cos@#, Sin@#}& /@ tRange;

pList = N@ Table[ Rotate[#,i]& /@ pList,
	{i, 0, (2 Pi) - (2 Pi/n), 2 Pi/n}
];

Show@ Graphics[
	Map[Line, Append[#, First@#]& /@ Transpose[pList]],
	AspectRatio->Automatic
];

Graphics Gallery

ParaPlot[
	EquiangularSpiral[80 Degree][t],
	{t, 0, 6 Pi+2.7, 6 Pi/70},
	PlotDot->False,
	SecantConnection->{9,1},
	SecantLineStyle->(({Thickness[.006], Hue[(.87)/70 #]})& /@ Range[1,75]),
	CurveStyle->{Thickness[.009]},
	CurveColorFunction->{Hue[0,#,1]&},
	AspectRatio->Automatic, PlotRange->{{-18,29},{-22,13}},
	Background->Hue[0,0,0],
	Axes->False
];

ParaPlot[
	EquiangularSpiral[80 Degree][t],
	{t, 0, 7 Pi, 4 Pi/50},
	PlotDot->False,
	PlotCurve->False,
	PlotEvolute->True,
	PlotOsculatingCircle->True,
	CurveColorFunction->{Hue[.75]&},
	DotStyle->{{Hue[0,0,1],PointSize[.015]}},
	AspectRatio->Automatic,
	Axes->False,
	PlotRange->{{-6.7, 4.1},{-6.3, 5.1}},
	Background->Hue[0,0,0]
];

ParaPlot[
	EquiangularSpiral[80 Degree][t],
	{t, 0, 7 Pi, 4 Pi/50},
	NormalLineLength->300,
	PlotDot->True,
	PlotCurve->False,
	PlotEvolute->False,
	CurveColorFunction->{Hue[.75]&},
	DotStyle->{{Hue[0,1,1],PointSize[.015]}},
	AspectRatio->Automatic,
	Axes->False,
	PlotRange->{{-6.7, 4.1},{-6.3, 5.1}}
];

Spiral forever

A animation based on equiangular spiral.
This animation shows an infinitly shrinking spiral

"Spiral Forever":Trace of osculating circles of an equiangular spiral

Clear[myList];
myList = Range[0, 5 Pi, 5 Pi/50];

Do[
	ParaPlot[
		EquiangularSpiral[80 Degree][t],
		{t, 0, 1 }, Take[myList, i],
		PlotOsculatingCircle->True, PlotEvolute->True,
		PlotDot->False, PlotCurve->False,
		CurveColorFunction->{Hue[0]&},
		LineStyle->{{Hue[.63,1,.8]}},
		DotStyle->{{PointSize[.01], Hue[0]}},
		AspectRatio->Automatic, Axes->False,
		PlotRange->All
	];,
	{i,1, Length@myList}
];
Clear[myList];

ParaPlot[
	EquiangularSpiral[80 Degree][t],
	{t, 0, 4 Pi, 4 Pi/40},
	PlotOsculatingCircle->True, PlotRadial->True,
	LineStyle->{{Hue[.63,1,.8]}},
	DotStyle->{{PointSize[.01], Hue[0]}},
	PlotCurve->False, PlotDot->False,
	AspectRatio->Automatic
];