Note

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

Packages and Initializations

Needs["ParaPlot`"]
Needs["PlaneCurveFormulas`"]
Needs["PlaneCurveGenerator`"]

$HistoryLength = 5;

Needs["Graphics`ImplicitPlot`"]

Clear[RandomRGBColorFunctionGenerator]

RandomRGBColorFunctionGenerator::usage= "
RandomRGBColorFunctionGenerator[] returns a pure function of the form
RGBColor[a,b,c]&, where any of a,b,c could be a Slot[] or a number
between 0 to 1, and at least one of them is a Slot[].";

RandomRGBColorFunctionGenerator[] :=
Module[{f,a=Random[],b=Random[]},
	f[
		RotateRight[
			RGBColor[
				If[a>.5,#, Random[]],
				If[b>.5,#, Random[]],
				If[(a+b)<1.,#, Random[]]
			], Random[Integer,{1,3}]
		]
	] /. f->Function
];

Archimedean Spiral

Graphic gallery

Red and blue archimedes' spiral together.

(* Archimedes' Spiral *)
Clear[gp1, gp2]

gp1 = First@ ParaPlot[
	Evaluate@ ArchimedeanSpiral[1][t],
	{t,0, 10 *2 Pi},
	AspectRatio->Automatic,
	PlotDot->False,
	CurveStyle->{Thickness[.02]},
	PlotRange->{{-1,1},{-1,1}}52,
	Background->RandomRGBColorFunctionGenerator[][.5],
	CurveColorFunction->{Hue[0,1-#,.8]&},
	Epilog->{Hue[0,1,.8],PointSize[.05], Point[{0,0}]},
	Axes->False
];


gp2 = First@ ParaPlot[
	Evaluate@ (t+Pi) {Cos[t], Sin[t]},
	{t,0, 10 *2 Pi},
	AspectRatio->Automatic,
	PlotDot->False,
	CurveStyle->{Thickness[.02]},
	CurveColorFunction->{Hue[.65,#,.8]&},
	PlotRange->{{-1,1},{-1,1}}52,
	Background->RandomRGBColorFunctionGenerator[][.5],
	Epilog->{Hue[0],PointSize[.03], Point[{0,0}]},
	Axes->False
];


Show[
	Graphics[{gp1, gp2}
	],
	AspectRatio->Automatic,
	Background->Hue[0,.7,.8],
	PlotRange->{{-1,1},{-1,1}}52
];

Multiple Archimedean spirals, flashy and fiery.

(* multiple Archimedean spirals *)
ParametricPlot[
	Evaluate@
		Table[
			ArchimedeanSpiral[i][t], {i,0,4,4/20}
		],
	{t, 0, 10 Pi},
	PlotRange->{{-1,1},{-1,1}} 10,
	Axes->False,
	AspectRatio->1,
	Background->GrayLevel[0],
	PlotStyle->Table[
		{Thickness[.009],Hue[i]},
		{i,0,1,1/20}]
];

parallel curves rendered as rainbow

(* parallels of r==theta^2, forming a rainbow *)

Parallel[ {t^2*Cos[t], -t^2*Sin[t]}, t, Range[0, 15 Pi, 15 Pi/20] ];
ParametricPlot[
	Evaluate@ %,
	{t, Pi, 2 * 2 Pi},
	Axes->False,
	AspectRatio->Automatic,
	Background->Hue[.6, .1, 1],
	PlotStyle->Table[
		{Thickness[.009],Hue[i]},
		{i,0,1,1/20}]
];

A fun animation showing a parallel curve of an Archimedes' spiral, with the distance increasing.

parallels curve animation

this animation shows parallel curves of Archimedes's spiral, with the parallel offset increasing.

Do[
	ParaPlot[ ArchimedeanSpiral[1][t],
		{t, 0, 2 2 Pi,2 2 Pi/80},
		ParallelCurveOffset->{i},
		PlotDot->False, AspectRatio->Automatic,
		PlotRange-> {{-12., 13.12}, {-11.51, 8.4}}
	];,
	{i,0.01, 4 Pi, 4 Pi/60}
];

Graphics Gallery Template

multiple Archimedean Spirals in one plot

ParametricPlot[
	Evaluate@
		Table[
			ArchimedeanSpiral[i][t], {i,0,4,4/20}
		],
	{t, 0, 10 Pi},
	PlotRange->{{-1,1},{-1,1}} 10,
	Axes->True,
	AspectRatio->1,
	Background->GrayLevel[0],
	PlotStyle->Table[
		{Thickness[.009],Hue[i]},
		{i,0,1,1/20}]
];

Secants lines of Archimedes's spiral

ParaPlot[ ArchimedeanSpiral[1][t], {t, 0, 10 Pi, 10 Pi/120},
	PlotDot->False,
	SecantConnection->{10,1}, 
	SecantLineStyle->Table[
		{Thickness[.009],RandomRGBColorFunctionGenerator[]@ Random[]},
		{120}],
	CurveColorFunction->(GrayLevel[1]&),
	PlotRange->{{-22.3,22},{-22,22.3}},
	Axes->False,
	AspectRatio->1,
	Background->GrayLevel[0]
];

Conchoid Curves

Clear[curves]

curves =
	Conchoid[ ArchimedeanSpiral[1][t],
		{10,0},
		Range[-6, 6, 12/6] ];

ParaPlot[
	curves,
	{t,0, 2 Pi},
	AspectRatio->Automatic,
	Axes->True,
	PlotStyle->Table[ Hue[i], {i,.2,.6,(.6-.2)/Length@ curves}],
	Background->GrayLevel[0],
	PlotRange->All
];

Clear[curves]

curves =
	Conchoid[ ArchimedeanSpiral[1][t], {0,Pi}, Range[-2,2,2/8]];

ParaPlot[
	curves,
	{t,0, 2 Pi},
	PlotPoints->25,
	AspectRatio->Automatic,
	Axes->False,
	PlotStyle->Table[Hue[i], {i,.6,1,(1-.6)/Length@ curves}],
	Background->GrayLevel[0]
];

Clear[curves]

curves =
	Conchoid[ ArchimedeanSpiral[1][t], {0,-1}, Range[-2,2,4/1]];

ParaPlot[
	curves,
	{t, -3 2 Pi, 3 2 Pi},
	AspectRatio->Automatic,
	Axes->False,
	PlotStyle->Table[Hue[i], {i,.6,1,(1-.6)/(Length@ curves/2)}],
	Background->GrayLevel[0],
	PlotRange->All
];

(* needs adjustment *)
Do[
ParaPlot[
	Conchoid[ ArchimedeanSpiral[1][t], {0,i}, Range[-2,2,4/5]],
	{t,0, 2 Pi},
	PlotPoints->87,
	AspectRatio->Automatic,
	PlotStyle->Table[ Hue[j], {j,.6,1,(1-.6)/6}],
	Background->GrayLevel[1],
	PlotRange->{{-1,1}4, {-2.5,5.2}},
	Axes->False
],
{i,.01,4, (4-.001)/5}
]

Conchoids Curves by Dots

ParaPlot[
	ArchimedeanSpiral[1][t],
	{t, -2 Pi, 2 Pi, 2 Pi/40},
	ConchoidSetting->{{0,0},Range[0,3,.2]},
	PlotCurve->False,
	PlotDot->False,
	CurveColorFunction->{GrayLevel[1]&},
	DotStyle->Table[{PointSize[.015], Hue[i]}, {i,.5,1,1/60}],
	AspectRatio->Automatic,
	Axes->False,
	Background->GrayLevel[0],
	PlotRange->All
];

ParaPlot[
	ArchimedeanSpiral[1][t],
	{t,0, 2 Pi, 2 Pi/60},
	ConchoidSetting->{{0,1.1},Range[0,3,.2]},
	PlotCurve->False,
	PlotDot->False,
	CurveColorFunction->{GrayLevel[1]&},
	DotStyle->Table[{PointSize[.015], Hue[i]}, {i,0,.5,1/60}],
	AspectRatio->Automatic,
	Axes->False,
	Background->GrayLevel[0],
	PlotRange->{{-1,1}2,{-.5, 3.2}}1.6
];

(* fancy conchoid movie *)
(* needs to be adjusted *)
Do[
ParaPlot[
	ArchimedeanSpiral[1][t],
	{t,0, 2 Pi, 2 Pi/60},
	ConchoidSetting->{{i,0},Range[0, Pi, Pi/20]},
	PlotCurve->False,
	PlotDot->False,
	CurveColorFunction->{GrayLevel[1]&},
	DotStyle->Table[{PointSize[.015], Hue[i]}, {i,0,.5,1/60}],
	AspectRatio->Automatic,
	Axes->False,
	Background->GrayLevel[0],
	PlotRange->{{-1,1},{-1,1}} 2 *2 Pi 
],
{i,0, 2 Pi, 2 Pi/3}
]

ParaPlot[
	ArchimedeanSpiral[1][t],
	{t, -2 Pi, 2 Pi, 2 Pi/35},
	ConchoidSetting->{{0,0},Range[-2, 2,4/30]},
	PlotCurve->False,
	PlotDot->False,
	CurveColorFunction->{GrayLevel[1]&},
	DotStyle->Table[{PointSize[.015], Hue[i]}, {i,.5,1,1/60}],
	AspectRatio->Automatic,
	Axes->False,
	Background->GrayLevel[0],
	PlotRange->{{-1,1},{-1,1}} 2 Pi+.1
];

ParaPlot[
	ArchimedeanSpiral[1][t],
	{t, 3 Pi, 4 Pi},
	ArcLengthPartition[ArchimedeanSpiral[1][t], {t,-1.42,1.4}, 50],
	ConchoidSetting->{{1.3,10},Range[-6,6,.2]},
	PlotCurve->False,
	PlotDot->False,
	CurveColorFunction->{GrayLevel[1]&},
	DotStyle->Table[{PointSize[.015], Hue[i]}, {i,0,.5,1/60}],
	AspectRatio->Automatic,
	Axes->False,
	Background->GrayLevel[0],
	PlotRange->{{-1,1} 3.3,{-1,1} 2.3}
];

Parallels

ParaPlot[Parallel[#, t, Range[0, 5, 5/10]] &@ArchimedeanSpiral[
            1][t], {t, 0, 2*2*Pi}, 
      AspectRatio -> Automatic]

(* parallel of Archimedes spiral, forming a rainbow *)

Parallel[ {t^2*Cos[t], -t^2*Sin[t]}, t, Range[0, 15 Pi, 15 Pi/20] ];
ParametricPlot[
	Evaluate@ %,
	{t, Pi, 2 * 2 Pi},
	Axes->False,
	AspectRatio->Automatic,
	Background->Hue[.6, .1, 1],
	PlotStyle->Table[
		{Thickness[.009],Hue[i]},
		{i,0,1,1/20}]
];

ParaPlot[
	Parallel[ ArchimedeanSpiral[1][t], t, Range[0,2.2,.2]],
	{t,0, 2 Pi},
	AspectRatio->Automatic,
	PlotStyle->Table[Hue[i], {i,0,1,1/20}],
	Background->GrayLevel[0],
	Axes->False
];

Clear[curves]

curves = Parallel[ ArchimedeanSpiral[1][t], t, Range[-3,0, 3/30]];
ParaPlot[
	curves,
	{t,0, 2 Pi},
	AspectRatio->Automatic,
	PlotStyle->
		Table[ {Thickness[.009],GrayLevel[i]}, {i,0,1,1/Length@ curves}],
	Background->GrayLevel[0],
	Axes->True
];

Clear[curves]

curves = Parallel[ ArchimedeanSpiral[1][t], t, Range[-3,2, 5/20]];
ParaPlot[
	curves,
	{t, -3.5, 3.5},
	PlotStyle->Table[ Hue[0,1-i,.8], {i,0,1,1/Length@ curves}],
	AspectRatio->Automatic,
	PlotRange->All,
	Background->GrayLevel[0],
	Axes->False
];

Evolutes

ParaPlot[
	Evolute[ ArchimedeanSpiral[1][t], t],
	{t,0, 6 * 2 Pi},
	AspectRatio->Automatic,
	PlotStyle->{Hue[.75], Hue[0],Hue[.35,1,.7]},
	Background->GrayLevel[0],
	Axes->True
];

ParametricPlot[
	Evaluate@ 
	{ ArchimedeanSpiral[1][t],
		Evolute[ ArchimedeanSpiral[1][t], t]},
	{t,0, 3 * 2 Pi},
	PlotRange->{{-1,1}, {-1,1}} 6 Pi,
	AspectRatio->Automatic,
	PlotStyle->{Hue[.75], Hue[0],Hue[.35,1,.7]},
	Background->GrayLevel[0],
	Axes->True
];

ParaPlot[
	ArchimedeanSpiral[1][t],
	{t,0, 3 * 2 Pi, 2 Pi/20},
	PlotOsculatingCircle->True,
	PlotCurve->False,
	PlotDot->False,
	PlotRange->{{-1,1}, {-1,1}} 4 Pi,
	AspectRatio->Automatic,
	PlotStyle->Table[Hue[i], {i,0,1,1/20}],
	Background->GrayLevel[0],
	Axes->False
];

ParaPlot[
	ArchimedeanSpiral[1][t],
	{t,0, 2 2 Pi, 4 Pi/60},
	NormalLineLength->1000,
	PlotOsculatingCircle->False,
	PlotCurve->True,
	PlotDot->False,
	CurveColorFunction->{GrayLevel[1]&},
	AspectRatio->Automatic,
	Axes->False,
	Background->GrayLevel[0],
	PlotRange->{{-1,1}, {-1,1}} 2 Pi
];

ParaPlot[
	ArchimedeanSpiral[1][t],
	{t,0, 2 2 Pi, 4 Pi/60},
	PlotEvolute->True,
	AspectRatio->Automatic,
	PlotStyle->Table[Hue[i], {i,0,1,1/20}],
	Background->GrayLevel[0],
	PlotRange->{{-1,1}, {-1,1}} 3 Pi
];

Evolutes, more

ParaPlot[
	ArchimedeanSpiral[1][t],
	{t, -Pi/2, Pi/2, Pi/70},
	ArcLengthPartition[ArchimedeanSpiral[1][t], {t,-1.3,1.3}, 37],
	PlotOsculatingCircle->True,
	PlotCurve->True,
	PlotDot->False,
	CurveColorFunction->{Hue[0]&},
	CurveStyle->{Thickness[.007]},
	AspectRatio->Automatic,
	PlotStyle->Table[Hue[i], {i,0,1,1/20}],
	Background->GrayLevel[0],
	Axes->False
];

ParaPlot[
	ArchimedeanSpiral[1][t],
	{t, -Pi/2, Pi/2, Pi/70},
	NormalLineLength->100,
	PlotOsculatingCircle->False,
	PlotCurve->True,
	PlotDot->False,
	CurveColorFunction->{Hue[0]&},
	CurveStyle->{Thickness[.004]},
	AspectRatio->Automatic,
	Axes->False,
	Background->GrayLevel[0],
	PlotRange->{{-1,1},{-1,1}} 2
];

ParaPlot[
	ArchimedeanSpiral[1][t],
	{t, -Pi/2, Pi/2, Pi/70},
	PlotEvolute->True,
	PlotCurve->True,
	PlotDot->False,
	CurveColorFunction->{Hue[0]&},
	CurveStyle->{Thickness[.004]},
	AspectRatio->Automatic,
	Axes->False,
	Background->GrayLevel[0]
];

Radial

ParaPlot[
		{ Radial[ ArchimedeanSpiral[1][t], t, {0,0}],
			ArchimedeanSpiral[1][t]
		},
		{t, 0, 3 * 2 Pi},
		PlotRadial->True,
		PlotStyle->{Hue[.75], Hue[0],Hue[.35,1,.7]},
		AspectRatio->Automatic,
		Axes->True
];

ParaPlot[
		ArchimedeanSpiral[1][t],
		{t, 0, 3 2 Pi, 3 2 Pi/100},
		PlotRadial->True,	
		AspectRatio->Automatic,
		Background->GrayLevel[0],
		Axes->False
];

Involute

Secant movie

Do[
ParaPlot[
	ArchimedeanSpiral[1][t],
	{t,0, 2 2 Pi, 2 2 Pi/100},
	SecantConnection->{i,1},
	PlotOsculatingCircle->False,
	PlotCurve->False,
	PlotDot->False,
	CurveColorFunction->{GrayLevel[1]&},
	AspectRatio->Automatic,
	Axes->False,
	Background->GrayLevel[0],
	PlotRange->All
],
{i,2,60, 10}
]

Caustic

Clear[curves]

Do[
	ParaPlot[
		ArchimedeanSpiral[1][t],
		{t, 0, 2 Pi, 2 Pi/30},
		CausticLineLength->50,
		CausticOrigin->{0,i},
		AspectRatio->Automatic,
		PlotRange->{{-1,1},{-1,1}} 2 Pi,
		Background->GrayLevel[0],
		Axes->False
	],
	{i,1.1,-2,-1}
]

Inversion

ParaPlot[
	ArchimedeanSpiral[1][t],
	{t, 0, 2 Pi, 2 Pi/60},
	InversionCircle->{{0,.5},1},
	AspectRatio->Automatic,
	PlotRange->All,
	Axes->True
];

Clear[curves]

curves = Table[ Inversion[ArchimedeanSpiral[1][t], {{0,i},1}], {i,-1,1.6,.2}];

ParametricPlot[
	Evaluate@ curves,
	{t, -1.5, 1.5},
	AspectRatio->Automatic,
	PlotRange->{{-1,1},{-1,1}}3,
	PlotStyle->
		Table[ {Thickness[.008],Hue[.6,i,.8]}, {i,0,1,1/Length@ curves}],
	Background->GrayLevel[0],
	Frame->True,
	FrameTicks->{Range[-4,4],Range[-4,4]},
	Axes->False
];

Pedal

ParaPlot[
	ArchimedeanSpiral[1][t],
	{t, -Pi/2, Pi/2, .1},
	PedalPoint->{1,-1},
	AspectRatio->Automatic,
	PlotRange->{{-1,1},{-1,1}}3,
	Axes->True
];

Clear[curves]

curves = Table[ Pedal[ ArchimedeanSpiral[1][t], t, {0,i}], {i,-1,1.6,.2}];

ParametricPlot[
	Evaluate@ curves,
	{t, -1.5, 1.5},
	AspectRatio->Automatic,
	PlotRange->{{-1,1},{0 -.1,1.4}},
	PlotStyle->
		Table[ {Thickness[.007],Hue[.9,i,.8]}, {i,0,1,1/Length@ curves}],
	Frame->True,
	FrameTicks->{Range[-1,1,.5], Range[-1,1,.5]},
	Axes->False,
	Background->GrayLevel[0]
];