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

(* Minimum packages you need available on MathSource *)

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

Needs["PlaneCurveFormulas`"]


Needs["PlaneCurveGenerator`"]

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

Caustics

Definitions

Caustic is a method of deriving a new curve based on a given curve and a point. A curve derived this way may also be called caustic. Given a curve C and a fixed point S (the light source),
catacaustic is the envelope of light rays coming from S and reflected from the curve C.
Diacaustic is the envelope of refracted rays. Light rays may also be parallel, as when the light source is at infinity.

(* an example of catacaustic *)
ParaPlot[ {x, (x/2-3)(x/2-2)(x/2-1)}, {x,0, 10, .1 (*{4,6.5,7}*)},
	CausticLineLength->100,	CausticOrigin->{4,2},
	CurveColorFunction->{Hue[.65,1,.6]&},
	PlotRange->{{-0,8},{-4,4}},
	AspectRatio->Automatic,
	Background->GrayLevel[.5]
];

Properties (not done)

Caustics do not always generate a curve. For instance, the Catacaustic of a Parabola with light source at its focus.

ParaPlot[ Rotate[ Conics[1][t], -5/6 Pi],
	{t, .00001, 2 Pi, Pi/20},
	CausticLineLength->10,
	CausticOrigin->{0,0},
	PlotDot->False,
	CurveColorFunction->{Hue[.6]&},
	CausticLineStyle->{Hue[.18]},
	AspectRatio->Automatic,Axes->True,
	PlotRange->{{-1,3},{-1,2}},
	Background->Hue[0,0,0]
];

ParaPlot[ Rotate[Astroid[][t], Pi/4],
	{t, 0, 1 2 Pi, 2 Pi/(4 20)},
	CausticLineLength->10,
	CausticOrigin->{0,0},
	PlotDot->False,
	CurveColorFunction->{GrayLevel[1]&},
	CausticLineStyle->{Hue[Random[]]},
	AspectRatio->Automatic,Axes->False,
	PlotRange->{{-1,1},{-1,1}} 1.5,
	Background->Hue[0,0,0]
];

Catacaustic of a curve with parallel rays from one direction is the same as the Diacaustic of a curve with parallel rays from the opposite direction.

ParaPlot[ {t, Sin@t},
	{t, 0, 2 Pi, 2 Pi/50},
	CausticLineLength->-21000, CausticOrigin->{Pi,20000},
	PlotDot->False,
	CurveColorFunction->{Hue[.67,.8,1]&},
	CurveStyle->{Thickness[.007]},
	CausticLineStyle->{Hue[0.281, 0.6531, 1]},
	PlotRange->{{0, 2 Pi},{-2.8, 2.8}},
	Axes->False,
	AspectRatio->Automatic,
	Background->GrayLevel[0]
];

ParaPlot[ {t, Sin@t},
	{t, 0, 2 Pi, 2 Pi/50},
	CausticLineLength->21000, CausticOrigin->{Pi,-20000},
	PlotDot->False,
	CurveColorFunction->{Hue[.67,.8,1]&},
	CurveStyle->{Thickness[.007]},
	CausticLineStyle->{Hue[0.281, 0.6531, 1]},
	PlotRange->{{0, 2 Pi},{-2.8, 2.8}},
	Axes->False,
	AspectRatio->Automatic,
	Background->GrayLevel[0]
];

Caustics of an ellipse

Here are some graphics of caustics of an ellipse from different angles.

ParaPlot[ 2 Rotate[ Ellipse[.8][t], Pi/2] , {t, 0, 2 Pi, 2 Pi/40},
	CausticLineLength->2100000, CausticOrigin->{2000000, 0},
	PlotDot->False, CurveColorFunction->{Hue[0]&},PlotCurve->False,
	CausticLineStyle->Table[Hue@i,{i,0,1,1/50}],
	AspectRatio->Automatic, PlotRange->{{-2,2}2,2{-2,2}},
	Axes->False,
	Background->Hue[0,0,0]
];

ParaPlot[ 2 Rotate[ Ellipse[.8][t], Pi/2], {t, 0, 2 Pi, 2 Pi/40},
	CausticLineLength->-2100000, CausticOrigin->{2000000, 0},
	PlotDot->False, CurveColorFunction->{Hue[0]&},PlotCurve->False,
	CausticLineStyle->Table[Hue@i,{i,0,1,1/50}],
	AspectRatio->Automatic, PlotRange->{{-2,2}2,2{-2,2}},
	Axes->False,
	Background->Hue[0,0,0]
];

ParaPlot[ 2 Rotate[ Ellipse[.8][t], Pi/2], 
	{t, 0 , 2 Pi, 2 Pi/40},
	CausticLineLength->210000, CausticOrigin->{20000, 10000},
	PlotDot->False, CurveColorFunction->{Hue[0]&},PlotCurve->False,
	CausticLineStyle->Table[Hue@i,{i,0,1,1/50}],
	AspectRatio->Automatic, PlotRange->{{-2,2}2,2{-2,2}},
	Axes->False,
	Background->Hue[0,0,0]
];

ParaPlot[ 2 Rotate[ Ellipse[.8][t], Pi/2], 
	{t, 0 , 2 Pi, 2 Pi/40},
	CausticLineLength->-210000, CausticOrigin->{20000, 10000},
	PlotDot->False, CurveColorFunction->{Hue[0]&},PlotCurve->False,
	CausticLineStyle->Table[Hue@i,{i,0,1,1/50}],
	AspectRatio->Automatic, PlotRange->{{-2,2}2,2{-2,2}},
	Axes->False,
	Background->Hue[0,0,0]
];

Animations

It is fun to watch the light rays of a moving light source bouncing off from a curve, or a fixed light source with a changing curve. The example below is an animation generating template you can experiment with.

The catacaustic of a circle with light source on the circle is a cardioid, with the light source at infinity is a nephroid.

(* "fishnet": Catacaustic of a circle with light source moving to infinity *)

Do[
	ParaPlot[ {Cos[t],Sin[t]},
		{t, 0, 2 Pi,2 Pi/(4 12)},
		CausticOrigin->{ E^(i/3),0},
		CausticLineLength->E^(i/3)+20, PlotDot->False,
		CurveColorFunction->{Hue[0,0,0]&},
		CausticLineStyle->{Hue[.8]},
		AspectRatio->Automatic, Axes->False,
		PlotRange->{{-2, 3.3}, {-1.5,1.5}}
	],
	{i,-6, 13, 2}
];

Interconnection of Special Plane Curves by Caustics

base curve	         light source           Its Catacaustics
Circle                  on circumference           Cardioid
                        not on circumference       Limacon of Pascal
                        Infinity                   Nephroid
Parabola                Rays perpendicular to axis Tschirnhausen's cubic (xxxxxx what the fuck?)
Tschirnhausen's Cubic   focus                      semicubical parabola
Cissoid of Diocles      focus                      Cardioid
Cardioid                cusp                       Nephroid
Quadrifolium            center                     Astroid
Deltoid                 Infinity                   Astroid
Equiangular Spiral      pole                       an equal spiral
Cycloid arch            rays perpendicular to axis   Two cycloid arches
y= Log[x]               rays parallel to y-axes    Catenary

(xxxx needs to check each entry)

Graphics Gallery

(*snow flake*)
ParaPlot[ Epitrochoid[1, 1/6, 1][t],
	{t, 0,  2 Pi, 2 Pi/(6 11)},
	CausticLineLength->8,
	Axes->False,PlotDot->False, PlotCurve->False,
	CausticLineStyle->{{Hue[Random[],1,.9]} },
	PlotRange->All, AspectRatio->Automatic,
	Background->Hue[0,0,0]
];

(* "Apple Core" *)
ParaPlot[ Rotate[Cardioid[][t], Pi/2],
	{t, 0, 2 Pi,2 Pi/60},
	CausticLineLength->50,
	CausticOrigin->{0,1},
	PlotDot->False,
	CurveColorFunction->{Hue[.7]&},
	AspectRatio->Automatic,
	PlotRange->{{-3,3},{-2.8,3.2}},
	Background->Hue[0,0,0]
];

(* "Apple Core" *)
ParaPlot[ Nephroid[][t], {t, 0, 2 Pi,2 Pi/80},
	CausticLineLength->50, CausticOrigin->{0,1},
	PlotDot->False, CurveColorFunction->{Hue[.7]&},
	AspectRatio->Automatic,
	PlotRange->{{-1,1}2.5,{-1,1}2},
	Background->Hue[0,0,0]
];

ParaPlot[ WitchOfAgnesi[][t], {t, -2, 2 ,4/40},
	CausticLineLength->50, CausticOrigin->{0,-1},
	PlotDot->False, CurveColorFunction->{Hue[.7]&},
	AspectRatio->Automatic,
	PlotRange->{{-2.2,2.2},{-2,1.5}},
	Background->Hue[0,0,0]
];

ParaPlot[ Epitrochoid[1, 1/4, .5][t],
	{t, 0, 1 2 Pi, 2 Pi/(4 30)},
	CausticLineLength->10,
	CausticOrigin->{0,0},
	Axes->False, PlotDot->False,
	CausticLineStyle->{Hue[Random[]]},
	AspectRatio->Automatic,
	Background->Hue[0,0,0]
];