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`"](*0200-529 *)

$HistoryLength = 5;

Graphics Gallery

Caustic Movie

We want to make an animation of caustic of cardioid with respect to a point that moves along a certain curve.
Let the curve be the ellipse { 1.3 Cos@t, Sin@t} + {.9,.7}.

ParametricPlot[
	Evaluate[{
		Cardioid[][t],
		{ 1.3 Cos@t, Sin@t} + {.9,.7}
	}],
	{t,0, 2 Pi},
	AspectRatio->Automatic,
	PlotRange->All,
	PlotStyle->{Hue[.75], Hue[0],Hue[.35,1,.7]}
];

ParaPlot[
	{ 1.3 Cos@t, Sin@t} + {.9,.7},
	{t,0, 2 Pi, 2 Pi/40},
	AspectRatio->Automatic,
	PlotRange->All,
	PlotStyle->{Hue[.75], Hue[0],Hue[.35,1,.7]}
];

Clear[cardioidPoints, pathCurvePoints]

cardioidPoints = ArcLengthPartition[Cardioid[][t],{t, 0, 2 Pi},40];

pathCurvePoints = 
	Drop[N@ Table[{ 1.3 Cos@t, Sin@t} + {.9,.7}, {t,0, 2 Pi, 2 Pi/40}],-1];

Do[
	ParaPlot[
		Cardioid[][t],
		{t, 0, 2 Pi},
		cardioidPoints,
		CausticLineLength->50,
		PlotDot->False,
		CausticOrigin->pathCurvePoints[[i]],
		CurveColorFunction->{Hue[.18]&},
		CurveStyle->{Thickness[.008]},
		AspectRatio->Automatic,
		PlotRange->{{-1.7,3.1},{-1,1}2.8},
		Background->GrayLevel[0],
		Axes->False
	],
	{i,1, Length@ pathCurvePoints,1}
]

Parallels

Clear[curves,c]

curves = Parallel[ Rotate[Cardioid[][t],Pi/2], t, Range[0,3,.25]];
c=Random[];
ParametricPlot[
	Evaluate@ curves,
	{t, 0, Pi, 2 Pi},
	PlotStyle->Table[ Hue[c,1-i,.8], {i,0,1,1/Length@ curves}],
	AspectRatio->Automatic,
	PlotRange->All,
	Background->GrayLevel[0],
	Axes->False
];

Evolutes

Radial

ParaPlot[
		Cardioid[][t],
		{t, 0, 2 Pi, 2 Pi/40},
		PlotRadial->True,	
		AspectRatio->Automatic
];

Radial[ Cardioid[][t], t]

ParametricPlot[
		Evaluate[{
			Cardioid[][t],
			Radial[ Cardioid[][t], t]
		}],
		{t,0,2 Pi},
		AspectRatio->Automatic,
		PlotStyle->{Hue[.75], Hue[0],Hue[.35,1,.7]}
];

Conchoids

ParaPlot[
	Cardioid[][t],
	{t,0, 2 Pi, 2 Pi/40},
	ConchoidSetting->{{0,0},Range[0,4,.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[
	Cardioid[][t],
	{t,0, 2 Pi, 2 Pi/40},
	ArcLengthPartition[Cardioid[][t], {t,0, 2 Pi}, 40],
	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]
];

Clear[curves]

curves =
	Conchoid[ Cardioid[][t], {1.3,10}, Range[-2,2,4/6]];

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

Involute

Inversion

ParaPlot[
	Rotate[Cardioid[][t],Pi/2],
	{t,0, 2 Pi,2 Pi/40},
	InversionCircle->{{1,1},2},
	AspectRatio->Automatic,
	PlotRange->All,
	Axes->True
];

Clear[curves,curveStyles]

curves = Table[
	Inversion[
		Rotate[ Cardioid[][t], Pi/2], {{i,0}, 2}],
	{i, -1.5, 1.5, .25}];

curves = Prepend[ curves, Rotate[ Cardioid[][t], Pi/2]];

curveStyles =
	Prepend[
		Table[ {Thickness[.008],Hue[.6,i,.8]}, {i,0,1,1/(Length@ curves-2)}],
	{Thickness[.008],Hue[0]}];

ParametricPlot[
	Evaluate@ curves,
	{t, 0, 2 Pi},
	AspectRatio->Automatic,
	PlotRange->All,
	PlotStyle->curveStyles,
	Background->GrayLevel[0],
	Frame->True,
	FrameTicks->{Range[-10,10],Range[-10,10]},
	Axes->False
];

Clear[curves,curveStyles]

curves = Table[
	Inversion[
		Rotate[ Cardioid[][t], Pi/2], {{i,1}, 2}],
	{i, -1.5, 1.5, .25}];

curves = Prepend[ curves, Rotate[ Cardioid[][t], Pi/2]];

curveStyles =
	Prepend[
		Table[ {Thickness[.008],Hue[.6,i,.8]}, {i,0,1,1/(Length@ curves-2)}],
	{Thickness[.008],Hue[0]}];

ParametricPlot[
	Evaluate@ curves,
	{t, 0, 2 Pi},
	AspectRatio->Automatic,
	PlotRange->All,
	PlotStyle->curveStyles,
	Background->GrayLevel[0],
	Frame->True,
	FrameTicks->{Range[-10,10],Range[-10,10]},
	Axes->False
];

Clear[curves,curveStyles]

curves = Table[
	Inversion[
		Rotate[ Cardioid[][t], Pi/2], {{i,2}, 2}],
	{i, -1.5, 1.5, .25}];

curves = Prepend[ curves, Rotate[ Cardioid[][t], Pi/2]];

curveStyles =
	Prepend[
		Table[ {Thickness[.008],Hue[.6,i,.8]}, {i,0,1,1/(Length@ curves-2)}],
	{Thickness[.008],Hue[0]}];

ParametricPlot[
	Evaluate@ curves,
	{t, 0, 2 Pi},
	AspectRatio->Automatic,
	PlotRange->All,
	PlotStyle->curveStyles,
	Background->GrayLevel[0],
	Frame->True,
	FrameTicks->{Range[-10,10,2],Range[-10,10,2]},
	Axes->False
];

Clear[curves,curveStyles]

curves = Table[
	Inversion[
		Rotate[ Cardioid[][t], Pi/2], {{i,4}, 2}],
	{i, -1.5, 1.5, .25}];

curves = Prepend[ curves, Rotate[ Cardioid[][t], Pi/2]];

curveStyles =
	Prepend[
		Table[ {Thickness[.008],Hue[.6,i,.8]}, {i,0,1,1/(Length@ curves-2)}],
	{Thickness[.008],Hue[0]}];

ParametricPlot[
	Evaluate@ curves,
	{t, 0, 2 Pi},
	AspectRatio->Automatic,
	PlotRange->All,
	PlotStyle->curveStyles,
	Background->GrayLevel[0],
	Frame->True,
	FrameTicks->{Range[-10,10],Range[-10,10]},
	Axes->False
];

Clear[curves,curveStyles]

curves = Table[
	Inversion[
		Rotate[ Cardioid[][t], Pi/2], {{0,i}, 1.5}],
	{i, -1.5, 1.5, .25}];

curves = Prepend[ curves, Rotate[ Cardioid[][t], Pi/2]];

curveStyles =
	Prepend[
		Table[ {Thickness[.008],Hue[.6,i,.8]}, {i,0,1,1/(Length@ curves-2)}],
	{Thickness[.008],Hue[0]}];

ParametricPlot[
	Evaluate@ curves,
	{t, 0, 2 Pi},
	AspectRatio->Automatic,
	PlotRange->{{-1,1},{-1,1}}10,
	PlotStyle->curveStyles,
	Background->GrayLevel[0],
	Frame->True,
	FrameTicks->{Range[-20,20,2],Range[-20,20,2]},
	Axes->False
];

Pedal

ParaPlot[
	Cardioid[][t],
	{t, 0, 2 Pi, 2 Pi/60},
	PedalPoint->{-2,0},
	AspectRatio->Automatic,
	PlotRange->All,
	Axes->True
];

ParametricPlot[
	Evaluate[{
		Cardioid[][t],
		Pedal[ Cardioid[][t], t, {1,-1}]
	}],
	{t, 0, 2 Pi},
	AspectRatio->Automatic,
	PlotRange->{{-1,1},{-1,1}}3,
	PlotStyle->{Hue[.75], Hue[0],Hue[.35,1,.7]},
	Axes->True
];

Clear[curves,curveStyles]

curves = Table[
	Pedal[
		Rotate[ Cardioid[][t], Pi/2], t,{0,i}],
	{i, -3,3, 1}];

curves = Prepend[ curves, Rotate[ Cardioid[][t], Pi/2]];

curveStyles =
	Prepend[
		Table[ {Thickness[.008],Hue[.4,i,.8]}, {i,0,1,1/(Length@ curves-2)}],
	{Thickness[.008],Hue[0]}];

ParametricPlot[
	Evaluate@ curves,
	{t, 0, 2 Pi},
	AspectRatio->Automatic,
	PlotStyle->curveStyles,
	Background->GrayLevel[0],
	Frame->True,
	FrameTicks->{Range[-10,10],Range[-10,10]},
	Axes->False
];

Tangent

ParaPlot[Cardioid[][t], {t, 0, 2 Pi, 2 Pi/50},
	TangentLineLength->20,
	PlotCurve->False,
	PlotDot->False,
	AspectRatio->Automatic,
	PlotRange->{{-2,3.5},{-3,3}},
	Axes->False
];