Note

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

Packages and Initializations

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

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

Trisectrix

Description

Trisectrix is a general name for curves that are used to trisect an angle. They include a special case of Limacon of Pascal known as Trisectrix, Trisectrix of Maclaurin, Conchoid of Nicomedes, and others.

?Trisectrix

ParaPlot[Trisectrix[][t], {t, 0, 2 π}, 
      AspectRatio -> Automatic];

Trisecting an Angle Animation

Let P be any point on the outer loop of the curve.
The angle formed by {0,0}, P, {1,0} is 1/3 of the angle P, {1,0}, {3,0}.

Clear[p, angle]; 
angle[v1_, v2_] := 
        N[ArcCos[v1  .  v2/(Sqrt[v1  .  v1]*Sqrt[v2  .  v2])]/
            Degree];
Do[ParametricPlot[Evaluate[Trisectrix[][t]], {t, 0, 2 π}, 
        AspectRatio -> Automatic, PlotStyle -> {Hue[ .65]}, 
        Ticks -> {Range[0, 5], Range[-2, 5]}, 
        PlotRange -> {{- .5, 3.5}, {-2.1, 2.1}}, 
        Epilog -> {p = Trisectrix[][theta]; Thickness[ .007], 
            Hue[0], Line[{{0, 0}, p, {1, 0}, {3, 0}}], Hue[ .65], 
            PointSize[ .02], Point[{1, 0}], Point[p], PointSize[ .01], 
            Point[{0, 0}], Point[{3, 0}], 
            Text[StringForm["P,``", 
                PaddedForm[angle[-p, {1, 0} - p], {2, 0}]], 
              p, {-1, -1}], 
            Text[PaddedForm[angle[p - {1, 0}, {1, 0}], {3, 0}], {1, 
                0}, {-1, 1}]}], {theta, 0.2, 1.4, 0.2}]
Clear[p, angle]

Graphics Gallery

Parallels

ParaPlot[
	Parallel[ Rotate[Trisectrix[][t], Pi/2], 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[ Rotate[Trisectrix[][t], Pi/2], t, Range[-3,0,.2]];
ParaPlot[
	curves,
	{t,0, 2 Pi},
	AspectRatio->Automatic,
	PlotStyle->Table[ GrayLevel[i], {i,0,1,1/Length@ curves}],
	Background->GrayLevel[0],
	Axes->False
];

Evolutes

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

ParaPlot[
      Rotate[Trisectrix[][t], (π/2)], {t, 0, 
        2 π, ((2 π)/60)}, NormalLineLength -> 10, 
      PlotOsculatingCircle -> False, PlotCurve -> False, 
      PlotDot -> False, CurveColorFunction -> {GrayLevel[1] &}, 
      AspectRatio -> Automatic, Axes -> False, 
      Background -> GrayLevel[0], 
      PlotRange -> {{-1, 1} 2, {- .5, 3.2}}];

ParaPlot[Trisectrix[][t], {t, 0, 2 π, ((2 π)/100)}, 
      PlotEvolute -> True, AspectRatio -> Automatic, 
      PlotStyle -> Table[Hue[i], {i, 0, 1, (1/20)}], 
      Background -> GrayLevel[0]];

Evolute of a Trisectrix is NOT a nephroid. This can be seen by ploting both
evolute of trisectrix and nephoid together.

ParaPlot[
	{(Evolute[Trisectrix[][t],t] -{14/15,0}) 15/4,
		Rotate[Nephroid[][t],Pi/2]},
	{t,0, 2 Pi},
	AspectRatio->Automatic,
	PlotStyle->{Hue[.75], Hue[0],Hue[.35,1,.7]}
];

Conchoids

ParaPlot[
	Rotate[ Trisectrix[][t], Pi/2],
	{t,0, 2 Pi, 2 Pi/60},
	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->{{-1,1}2,{-.5, 3.2}}1.6
];

ParaPlot[
	Rotate[ Trisectrix[][t], Pi/2],
	{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

numberOfFrames = 3;
Do[ParaPlot[
        Rotate[Trisectrix[][t], (π/2)], {t, 0, 
          2 π, ((2 π)/60)}, 
        ConchoidSetting -> {{0, i}, 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], {i, 
        0.0001, 3.22, 3.22/numberOfFrames}]

Clear[curves]
curves = 
      Conchoid[Rotate[Trisectrix[][t], (π/2)], {0, 1.05}, 
        Range[-2, 0, (2/8)]]; 
ParaPlot[curves, {t, 0, 2 π}, AspectRatio -> Automatic, 
      Axes -> False, 
      PlotStyle -> 
        Table[Hue[i], {i,  .2,  .6, (( .6 -  .2)/Length)[curves]}], 
      Background -> GrayLevel[0]];

Clear[curves]
curves = 
      Conchoid[Rotate[Trisectrix[][t], (π/2)], {0, 3.05}, 
        Range[-2, 0, (2/8)]]; 
ParaPlot[curves, {t, 0, 2 π}, PlotPoints -> 50, 
      AspectRatio -> Automatic, Axes -> False, 
      PlotStyle -> 
        Table[Hue[i], {i,  .6, 1, ((1 -  .6)/Length)[curves]}], 
      Background -> GrayLevel[0]];

an artistic animation based on moving the point of a conchoid to the curve.

numberOfFrames = 3; 
Do[ParaPlot[
        Conchoid[Rotate[Trisectrix[][t], (π/2)], {0, i}, 
          Range[-2, 2, (4/5)]], {t, 0, 2 π}, 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)/numberOfFrames)}]

Secant animation

an artistic animation based on moving secants on the curve

numberOfFrames = 3; 
Do[ParaPlot[
        Rotate[Trisectrix[][t], (π/2)], {t, 0, 
          2 π, ((2 π)/60)}, SecantConnection -> {i, 1}, 
        PlotOsculatingCircle -> False, PlotCurve -> False, 
        PlotDot -> False, CurveColorFunction -> {GrayLevel[1] &}, 
        AspectRatio -> Automatic, Axes -> False, 
        Background -> GrayLevel[0], 
        PlotRange -> {{-1, 1} 2, {- .5, 3.2}}], {i, 2, 
        numberOfFrames + 1}]