Global Plots

In Chapter 4, we discussed plotting in circular disks around the origin. In this chapter, we discuss plotting the entire curve, including infinite points. We will discuss several methods illustrating curves globally.

8.1 Plotting in Elliptical Regions

We will simply use an FLT to change from a circular disk to an elliptical region. If we want a new affine plotting region, we will use the function from Chapter 6 pqTranslation, possibly followed by a Homothety or klRotation in the affine case. We will illustrate this by examples.

f= newtonHyperbola[1050752,x,y]

cp= criticalPoints[f,x,y]

gaussPlot[f,35,cp]

gaussPlotA[f_,r_,as_]:=Module[{plta,pltb,pltc},plta:=RegionPlot[x^2+y^2<r^2,{x,-1.1 r,1.1 r},{y,-1.1 r,1.1 r},PlotStyle->LightOrange,BoundaryStyle->Orange];
pltb:=RegionPlot[{f>0&&x^2+y^2<r^2},{x,-r,r},{y,-r,r},BoundaryStyle->Blue];
pltc:=Graphics[{{PointSize[Large],Yellow,Point[Values[as]]},Table[Text[k,as[k]],{k,Keys[as]}]}];
Show[plta,pltb,pltc]];

A1=pqTranslation[{0,0},{-26,0}];
f1=FLT[f,Inverse[A1],x,y];
gp1=gPoints[f1,5,x,y];
gp1A=<| Table[20+i->gp1[[i]],{i,9}]|>;
A2=pqTranslation[{0,0},{0,-26}];
f2=FLT[f,Inverse[A2],x,y];
gp2=gPoints[f2,2,x,y];
gp2A=<| Table[30+i->gp2[[i]],{i,3}]|>;
gp3=gPoints[f,7,x,y];
gp3A=<| Table[40+i->gp3[[i]],{i,5}]|>;
{gaussPlotA[f1,5,gp1A],gaussPlotA[f2,2,gp2A],gaussPlotA[f,7,gp3A]}

L1=plotPath[f1,{1->2,2->3},{gp1A[22],gp1A[27],gp1A[23]},x,y, .4]
K1=flt[#,A1]&/@L1

L2=plotPath[f1,{1->2,2->3},{gp1A[24],gp1A[29],gp1A[21]},x,y,.4];
K2=flt[#,A1]&/@L2;
L3a=pathFinder[f1, gp1A[26],gp1A[28],.4,x,y];
L3b=pathFinder[f1,gp1A[28],gp1A[25],.2,x,y];
L3=Join[L3a,L3b];
K3=flt[#,A1]&/@L3;
L4=plotPath[f2,{1->2,2->3},{gp2A[32], gp2A[33], gp2A[31]},x,y,.3];
K4=flt[#,A2]&/@L4;
L5=plotPath[f, {1->2, 2->3}, {gp3A[41],gp3A[44], gp3A[42]},x,y,.6];
L6=plotPath[f, {1->2, 2->1},{gp3A[43],gp3A[45]}, x,y,.3];

cpA=<| Table[i->cp[[i]], {i,11}] |>;
gp1B=Map[flt[#,A1]&, gp1A];
gp2B=Map[flt[#,A2]&,gp2A];

allpoints=Join[cpA,gp1B,gp2B,gp3A]

For the left and center plot, we applied flt[#, A]&/@L to the list L obtained where A is A1 or A2.

S1={23,22,21,24,26,25, 31,32,41,42,43,45};

Show[ContourPlot[f==0,{x,-32,10},{y,-30,10}, ContourStyle->Gray], Graphics[{{Blue, Thick,Line[K1]},{Blue, Thick, Line[K2]}, {Blue, Thick, Line[K3]},{Red, Thick, Line[K4]}, {Green, Thick, Line[L5]},{Green, Thick, Line[L6]}, {Table[{PointSize[Large],Yellow,Point[allpoints[j]]},{j,S1}]},
{Table[Text[j,allpoints[j]],{j,S1}]}}]]

We note that the part of the blue curve starting at point 21 and continuing through 42, 41, 25, 26 to 32 is one continuous curve, so we can finish our decomposition in this region by tracing the relatively straight paths from 24 to 42, 41 to 25 and 26 to 31.

L7=pathFinder[f, allpoints[42], allpoints[24], .5, x,y] ;
L8=pathFinder[f, allpoints[25], allpoints[41], .5, x,y] ;
L9=pathFinder[f, allpoints[31], allpoints[26], 1.0, x,y] ;

Show[ContourPlot[f==0,{x,-32,10},{y,-30,10}, ContourStyle->Gray], Graphics[{{Blue, Thick,Line[K1]},{Red, Thick, Line[K2]}, {Red, Thick, Line[K3]},{Red, Thick, Line[K4]}, {Red, Thick, Line[L5]},{Green, Thick, Line[L6]},{Red, Thick, Line[L7]} ,{Red, Thick, Line[L8]},{Red, Thick, Line[L9]},{Table[{PointSize[Large],Yellow,Point[allpoints[j]]},{j,S1}]},
{Table[Text[j,allpoints[j]],{j,S1}]}}]]

Finally, we note that the green loop in the previous plots is another topological component. We will see in the next section that in the projective plane, the blue and red components above are actually in the same topological component.

KeySelect[allpoints, 1≤ #< 20&]

8.2 Handling Infinite Points

To continue with our main example, we must deal with the part of the curve that is far away from the origin {0,0}. This is best done by changing the origin to infinite points using the FLT transformation ip2z. The best approach is to start with a circle of a small radius around the origin and use the inverse transformation to get a hyperbolic region, which will transform back to the circle.

ipts=InfiniteRealPoints[f,x,y]

circ=x^2+y^2-.25;
A3=ip2z[ipts[[5]],x,y]
icirc3=FLT[circ,Inverse[A3],x,y]
pts1={x,y}/.NSolve[{f,icirc3},{x,y},Reals]
g3=FLT[f,A3,x,y]
fpts1=flt[#,A3]&/@pts1

{Show[gaussPlot[icirc3,100,pts1],ContourPlot[f==0,{x,-100,100},{y,-100,100}, ContourStyle->Brown]],
Show[gaussPlot[circ,1,fpts1],ContourPlot[{g3==0,y==0},{x,-1,1},{y,-1,1},ContourStyle->{Brown,Directive[Orange,Dashed]}]]}

The left-hand picture shows the intersection of the curve f=0 with the affine interior of icirc. The right-hand picture shows the transform of icirc to the unit disk, with the transform g=0 of f=0. A nice feature of the transformations ip2z is that the infinite line appears as the dashed x-axis. The component of the curve that goes through the infinite point ipts[[5]], which is the origin on the right, is the almost straight line in the right-hand plot.

circ2=x^2+y^2-.04;
p=(ipts[[1]]+ipts[[2]])/2
A4=ip2z[p,x,y]
icirc2=FLT[circ2,Inverse[A4],x,y]
pts2={x,y}/.NSolve[{f,icirc2},{x,y},Reals]
g1=FLT[f,A4,x,y]
fpts2=flt[#,A4]&/@pts2

{Show[gaussPlot[icirc2,50,pts2],ContourPlot[f==0,{x,-50,50},{y,-50,50}, ContourStyle->Brown]],
Show[gaussPlot[circ2,.2,fpts2], ContourPlot[{g1==0,y==0},{x,-.2,.2},{y,-.2,.2},ContourStyle->{Brown,Directive[Orange,Dashed]}]]}

At first glance, the right-hand plot looks like the curve is actually tangential to the infinite line at p, and perhaps the two different infinite points of the pair is a numerical artifact. This is very possible with rational function curves. However, the Newton hyperbolas (while technically exact) behave more like numerical curves, so an actual tangency at the infinite line is very unlikely.

Show[ContourPlot[{g1==0,y==0},{x,-.01,.01},{y,-.01,.005},ContourStyle->{Blue,Dashed}],ListPlot[{Labeled[c,"image cp[[1]]"]},PlotStyle->Red, PlotMarkers->◼]]

There are two close (but still distinct) infinite points here. The part of the curve above the dashed infinite line in this plot will appear in the part of the original plane where x>0. In fact, this explains the first critical point {3865.95,-14.9506}, which will be the closest point to the origin on this affine curve component.

Putting together what we have so far, we see that we have one large loop that goes through three infinite points. Why this happens will be explained at the end of this chapter.

circ3=x^2+y^2-.01;
A5=ip2z[{0,1,0},x,y];
icirc5=FLT[circ3,Inverse[A5],x,y];
g2=FLT[f,A5,x,y]
fpts3=flt[#,A5]&/@{cp[[2]],cp[[3]]}

{Show[gaussPlot[icirc5,300,{cp[[2]],cp[[3]]}],ContourPlot[f==0,{x,-300,300},{y,-300,300}, ContourStyle->Brown]],
Show[gaussPlot[circ3,.05,Append[ fpts3,{0,0}]],ContourPlot[{g2==0,y==0},{x,-.05,.05},{y,-.05,.05},ContourStyle->{Brown,Directive[Orange,Dashed]}]]}

These plots show a third topological component, which goes through critical points 2 and 3, labeled as 1 and 2 on both plots and loops around the infinite point {0,1,0}, labeled as 3 in the right-hand plot.

We will put all this together in the next section.

8.3 The Hemisphere

It is well known that the plane is topologically equivalent to the inside of an open (without boundaries) disk of any radius r>0 about the origin. Including the boundary, circle (x^2)+(y^2)=(r^2) compactifies the circle. We can consider these new points to be the infinite points, which creates a model of the plane with infinite points (which works well with the Gauss decomposition of Chapter 4).

ghsMap[p_,r_]:=If[Length[p]==2,N[6*r/Pi*ArcTan[Norm[p]/6/r*Pi]]*Normalize[p],3*r*N[Normalize[Take[p,2]]]];

This transformation will distort the disk of radius r a relatively small amount but points of norm larger than r increasingly. Infinite points will be on the circle of radius 3r, so the entire plane, including infinite points, will be transformed onto the closed disk of radius 3 r.

L={ghsMap[{2,3},10], ghsMap[{20,30},10],ghsMap[{200,345},10],ghsMap[{2,3,0},10],ghsMap[{-2,-3,0},10]}

Norm/@L

No matter how large the coordinates of a point are, the norm of the image and (in particular) the coordinates will be less than or equal to 30. As in Chapters 1 and 5, multiplying an infinite point (third coordinate 0) by a positive real number does not affect the result, but multiplying by a negative number multiplies the coordinates by -1.

CC=Table[ghsMap[r{Sin[t],Cos[t]},10],{r,{2,10,50,250,1250,6250}},{t,0,2Pi,.1}];
CO=Table[ghsMap[{20Sin[t]+10,20Cos[t]-22},10],{t,0,2Pi,.1}];
{Show[ContourPlot[x^2+y^2==910,{x,-31,31},{y,-31,31},ContourStyle->Red],ListLinePlot[CC,PlotStyle->Cyan]], Show[ContourPlot[x^2+y^2==910,{x,-31,31},{y,-31,31},ContourStyle->Red],ListLinePlot[CO,PlotStyle->Cyan]]}

Lines through the origin remain unchanged. However, lines that don’t go through the origin are arcs meeting the parallel line through the origin at the common infinite points by both ends of the line.

LC=Table[ghsMap[{x,3x+a},10],{a,{0,-20,20,-50,50,-100,100,-250,250}},{x,-250,250,.5}];
Show[ContourPlot[{x^2+y^2==900},{x,-30,30},{y,-30,30}, ContourStyle->Red],ListLinePlot[LC, PlotStyle->Cyan,PlotRange->All]]

In order to plot an algebraic curve in the hemisphere, we need to break down the curve into piecewise linear parameterized curves (as we did in Chapter 4 and earlier in this chapter). Then we can combine ghsMap with the parameterizations to draw parameterized curves. It’s suggested that you first find parameterizations on the closed disk of radius r (as in Chapter 4) then look at the regions around the infinite points and find the paths from the infinite points to the boundary points on the disk of radius r.

Each infinite point (in the sense of Chapter 3) gives two antipodal infinite points in the Gauss hemisphere. If there are no segments of the interior that connect to a given hemisphere infinite point, then that point is no longer considered an infinite point. An isolated infinite point would be a possible exception.

We will complete the main example of this section later. To begin, we will do some easier examples, starting with function curves. Recall the function gPoints from Chapter 4 or Appendix 2.

f=x^2-8-y;
gp=gPoints[f,10,x,y]
infiniteRealPoints[f,x,y]

Using gPoints, it is easy to find one list giving a path from gp[[1]] to gp[[2]]. The one infinite point is equivalent to {0,1,0}.

A =ip2z[{0,1,0},x,y]

g=FLT[f,A,x,y]

b1=flt[gp[[1]],A]

b2=flt[gp[[2]],A]

{gaussPlot[f, 10,gp],Show[gaussPlot[g,1,{b1,b2}],ListLinePlot[{{-1,0},{1,0}},PlotStyle->Dashed]]}

We see that the curve seems tangential to the (dashed) infinite line. Here we know that this does happen. We can trace this curve from b1, to {0,0}, to b2. In this example, we use a step size of .05.

L1a=pathFinder[g, b1, {0,0},.05,x,y]

L1b=pathFinder[g,{0,0},b2,.05,x,y]

H1a=Reverse[flti[#,Inverse[A]]&/@L1a]

H1b=Reverse[flti[#,Inverse[A]]&/@L1b]

H1a[[1]]={0,1,0};
H1b[[-1]]={0,1,0};

H2=plotPath[f, {1->4,4->3,3->5,5->2},gp, x,y,.5];
H2[[1]]

H2[[-1]]

H=Join[H1a,H2,H1b];

GH=ghsMap[#,10]&/@H;

We do the same to the other infinite path from {0,0} to b2. We also apply these maps to the finite path from b2 to b1, getting the (hidden) paths K and K6.

Show[ContourPlot[{x^2+y^2==900,x^2+y^2==100},{x,-30,30},{y,-30,30},ContourStyle->{Red,Pink}],ListLinePlot[GH,PlotStyle->Black]]

This picture was anticipated by Kepler, who was the first to think about infinite points on conics in 1604. From our perspective, he was wrong in characterizing a parabola as a conic with one infinite point in that this infinite point actually has multiplicity 2. In fact, Bézout’s theorem says that every conic has two (possibly complex) infinite points counting multiplicity, but Kepler was correct in noticing that “being a parabola” is a positional concept rather than a geometrical one.

In the Gauss hemisphere plots, we do the inner disk, showing approximately what we would get with finite plotting (as explained in Chapter 4). The outside shows the rest of the plot out to infinity.

For our next few examples, we will again suppress many calculations. Consider the cubic function curve y=.2 (x^3)-5 x. Again, the only infinite point is {0,1,0}.

f2=.2x^3-5x-y;
A=ip2z[{0,1,0}, x,y]
gp2=gPoints[f2,10,x,y]
g2=FLT[f2,A,x,y]

Row[{gaussPlot[f2,12,gp2], Show[gaussPlot[g2,2,flti[#,A]&/@gp2],ListPlot[{Labeled[{0,0},10], Labeled[{1.94,.45},7],Labeled[{1.94,-.45},8], Labeled[{-1.94,.45},8],Labeled[{-1.94,-.45},7],Labeled[{.77,1.84},9]}]ImageSize->Small], Show[RegionPlot[g2>0,{x,-1,1},{y,-.3,.3}], ListLinePlot[{{-1,0},{1,0}},PlotStyle->Directive[Dashed, Orange]], ListPlot[{Labeled[{0,0},10]}]]}]

The right-hand plot above gives a detail in the middle that has a singularity at {0,0}—the infinite point. A differentiable function curve has no affine singularities but (as noted in Chapter 5) has genus 0. Since nonsingular cubics have genus 1, g must (by Max Noether’s formula) have a singularity. This is true for all function curves of degree 3 or more: there must be an infinite singularity.

Plot[(x^4-10)/(x^3-2x^2),{x,-15,15}, Exclusions->{x==2}]

We plot g=-(x^4)+((x^3)-2 (x^2)) y+10 on the Gauss hemisphere. This shows that there are two (projective) infinite points: {0,1,0} and {1,1,0}. The latter is a regular point and, by now, handling it should be routine.

g=Expand[y(x^3-2x^2)-x^4+10]
A=ip2z[{0,1,0},x,y];
h=FLT[g,A,x,y]
bp={x,y}/.NSolve[{h,x^2+y^2-.25},{x,y},Reals]
gaussPlot[h,.5, Append[bp,{0,0}]]

L1=pathFinderT[h, bp[[1]],{0,0},.05,x,y]

J1=flti[#,Inverse[A]]&/@L1

K1=ghsMap[#,15]&/@J1

L2=pathFinderT[h, bp[[2]],{0,0},.05,x,y];
J2=flti[#,Inverse[A]]&/@L2;
K2=ghsMap[#,15]&/@J2;
L3=pathFinderT[-h, bp[[3]],{0,0},.05,x,y];
J3=flti[#,Inverse[A]]&/@L3;
K3=ghsMap[#,15]&/@J3;
L4=PathFinderT[-h, bp[[4]],{0,0},.05,x,y];
J4=flti[#,Inverse[A]]&/@L4;
K4=ghsMap[#,15]&/@J4;

K1[[-1]]={0,45}; K2[[-1]]={0,-45}; K3[[-1]]={0,45}; K4[[-1]]={0,45};

Show[ContourPlot[{x^2+y^2==2025,x^2+y^2==225},{x,-45,45},{y,-45,45},ContourStyle->{Red,Pink}],ListLinePlot[{K1,K2,K3,K4}]]

We now go back to our main example for this section.

In Sections 8.1 and 8.2, we looked around all the critical and infinite points and traced the curve inside the disk of radius 30. All that remains is to trace near the infinite points.

Then, as in the previous example, convert to affine coordinates then to hemisphere coordinates and put them all together. Our result is the following. In this plot, the affine topological components of the curve have different colors. However, the blue, orange, and tiny black components (the latter on the far right side) meet up at infinite points, as do the magenta and purple components.

There are actually three projective components, each a continuous loop. A detail plot shows that there is no singularity in the blue component.

A nice feature of the hemisphere model is, like the plain affine model, it supports positive and negative regions. The best way to see this is to note that our ghsMap transform has an inverse.

This inverse will return infinite points as affine points with a very large norm.

inverseGHSmap[q_,r_]:=Tan[Norm[q]/6/r*Pi]*6*r/Pi*Normalize[q];

inverseGHSmap[{3,4},10]

p=inverseGHSmap[ghsMap[{3,4,0},10],10]

5*Append[Normalize[p],0]

For low-degree curves, this can be used symbolically to directly produce the signed hemisphere representation of the curve from the equation. It is not, however, an algebraic curve anymore.

f=gaussCurve[z^3-3z^2,x,y,z]

h=f/.Thread[{x,y}->inverseGHSmap[{u,v},5]]

Show[RegionPlot[h>0 && u^2+v^2<225,{u,-15,15},{v,-15,15}],ContourPlot[{u^2+v^2==225,u^2+v^2==25},{u,-15,15},{v,-15,15},ContourStyle->{Red,Pink}]]

We note that the hemisphere plot is not greatly different for Gauss curves than a straight region plot on a small disk. Gauss probably realized this, but we cannot expect the same for complicated curves like our running example. One still can evaluate our transformed function h=f/.Thread[{x,y}->inverseGHSmap[{u,v},r]] at a noninfinite point of the hemisphere off the curve to determine if that point is positive or negative. This gives us a new Gauss Principle:

Let f(x,y)=0 be a square-free algebraic curve. The point set ghsMap[f](x,y)=0 in the hemisphere is the full boundary of the set ghsMap[f](x,y)>0. Moreover, each connected component of this noninfinite boundary is the image of a continuously parameterized curve, which either begins and ends at the same point or begins and ends on the infinite circle of the hemisphere.

8.4 Projective Graphs

As mentioned in Section 5.4, each real projective plane curve comes with a (possibly not connected) Eulerian graph, that is, a graph drawn in such a way that each vertex has even degree. This is probably the most efficient way of describing the topology of a projective plane curve. In Chapter 5, it was easy to see how the Gauss components of Gauss curves connected to the infinite points. The previous two sections of this chapter show how to make these connections in general.

You can see the three projective components of this nonsingular curve.

One of the main things we learned in Section 8.2 is that ultimately, infinite points are just like finite points. One can do Gauss decomposition with any infinite point, or any point near several infinite points, as the origin. This perspective gives a graph where each critical point (not just finite ones) give graphs with even vertices. This is exactly the main content of the Fundamental Theorem of Real Projective Curves:

The projective (directed) graph of any real algebraic curve is an Euler graph, that is, each vertex is even.

The directions are not necessarily natural in the projective case, but we use them so that the Wolfram Language can give the correct picture when there are two curve segments between the same two vertices, for example, vertices 9 and 11 in the previous graph.

We ended Chapter 1 by asking what would be wrong with the following picture from Abhyankar’s book (1990) if the image was intended to show a real algebraic curve.

One answer would be that it pictures odd vertices. It also violates the Gauss Principle described at the end of Section 8.3.

8.5 Möbius Band Model of the Real Projective Plane

This is a well-known, one-sided surface with boundaries, which can be physically modeled by taking a long skinny strip of paper, making a half twist, and gluing the ends together. The boundary is, topologically speaking, a circle. If we declare that every point on this boundary will represent the affine origin, then we see below that we get an abstract topological space that is topologically equivalent to the projective plane.

Some geometers prefer to consider the boundary of the Möbius strip a very small circle around the origin. Since it is our intention to plot curves on this surface, this interpretation will also work if we insist that curves in this subsection avoid the origin, that is, the equation of the curve f=0 has a nonzero constant term. A small translation may be necessary to make this happen. The advantage of this interpretation is that it makes the real projective plane minus a tiny disk around the affine origin a subspace of real 3-space.

Plotting a curve on the Möbius band model of the real projective plane can be accomplished by the methods discussed earlier in this chapter. However, there are some tricky issues caused by points with different coordinates having the same physical position or conversely, so we will discuss the practical details of this plotting in Section 8.7. Unless you plan to try some Möbius plots on your own, you can skip this material.

Here are some Möbius plots of lines. The first is a line through the origin—these go straight across the strip from {0,0} to {0,0}, which is evenly placed throughout the boundary. The second is a typical line not through the origin.

Any two lines through the origin would not meet in the plot, but they meet at the origin, which is the boundary. It is clear that any line that does not go through the origin will meet each line that does go through the origin elsewhere on the band. The Möbius plot below of two typical non-parallel lines not though the origin shows why any two such distinct lines will meet at a singular point. Parallel lines will meet at their common infinite point.

This property (that any two lines meet at exactly one point) is the standard property of the real projective plane. This is one way to see that our Möbius model of the real projective plane is correct, as each point in the standard model can be described as the intersection of two lines. This point will correspond to the intersection of those two lines in our Möbius model. It is not difficult to see that this is actually a topological equivalence.

Next are Möbius plots of a parabola and a hyperbola. We can see here that Kepler was correct when he decided a parabola was a circle missing one point while the hyperbola was missing two infinite points.

A circle looks different depending on whether it contains the origin inside or outside the circle.

c1={Cos[t], Sin[t]+3};
c2={Cos[t],Sin[t]};
c3={Cos[t]-3,Sin[t]};

ParametricPlot[{c1,c2,c3}, {t,0,2 Pi},PlotStyle->{Blue,Black,Purple}, PlotLegends->"Expressions"]

One more example is a simple rational function y=(4/(x((x^2)-4))), plotted with Plot on the Möbius band as an algebraic curve.

Note the ordinary singularity at {0,1,0} and none at the regular point at {1,0,0}.

Besides being able to visualize entire projective curves on the Möbius band, there is another important reason to look at curves on the band. Many have seen the demonstration of cutting a Möbius band along the center (infinite) line. Instead of having two disconnected pieces there is one long piece, the resulting topological space is still connected. Also, cutting across the Möbius band along the plot of a line through the origin leaves the resulting space connected. This happens for the plot of any line. On the other hand, cutting along the plot of a circle (with or without the origin) leaves two disconnected pieces. This leads to an important distinction between components of a nonsingular curve.

There are two cases, recalling that each connected component of a nonsingular curve is topologically a simple closed curve, with no self intersections. We will assume the curve does not contain the affine origin, so the Möbius plot does not touch the boundary of the Möbius band. We will use the definitions of components described in Bochnak’s book (1998):

Cutting along the curve gives two components. We call such a component an oval.

Cutting along the curve does not separate the Möbius band into disconnected sets. We call such a component a pseudo-line.

As we noted previously, any line is in the second category, motivating the notation. Different authors may use other notations.

In the first case, the two components are different. One is one-sided like the Möbius band and the other is two-sided like an ordinary piece of paper. The one-sided piece is called the exterior and the two-sided piece is called the interior.

There are two important properties about ovals and pseudo-lines that follow from the Gauss Principle.

Property 1: If Ω is an oval of curve f=0 and g=0 is another curve, then the sum of the real intersection multiplicities of g with Ω is even.

In other words, if a curve enters the interior of an oval from outside, it must come out again somewhere else. The following example shows that this property does not hold true for pseudo-lines.

The corresponding property for pseudo-lines is:

Property 2: If (Subscript[Λ, 1]) is a pseudo-line in a real algebraic curve and (Subscript[Λ, 2]) is a pseudo-line of a potentially different real curve, then they intersect in at least one real point.

f=gaussCurve[z^3+3,x,y,z]

infiniteRealPoints[f,x,y]

We see f=0, as a projective curve, consists of a single pseudo-line.

Our two properties above show that every nonsingular curve of odd degree must contain a pseudo-line. This is because in order to intersect a line with our curve, there must be (trivially from Bézout’s theorem) an odd number of intersection points of the line and curve counted by multiplicity. Only an even number of these can be in ovals, so at least one of these intersection points must be in a pseudo-line of the curve. A similar argument shows that an even-degree, nonsingular curve cannot contain a pseudo-line.

Conversely, a nonsingular curve can have only one pseudo-line because two pseudo-lines would intersect but nonsingular curves have no self-intersection points, which leads to a third property. Thus:

Property 3: A nonsingular curve of even degree has no pseudo-lines, but a nonsingular curve of odd degree has exactly one pseudo-line.

One consequence of these properties is that in order to identify whether a loop is an oval or a pseudo-line, it is necessary to only count infinite points. Ovals have an even number (possibly zero) of infinite points while pseudo-lines have an odd number.

Things are more complicated for singular curves, partly because the decomposition guaranteed by the Fundamental Theorem is not unique. Properties 1 and 2 will still hold, but 3 will not (because two pseudo-lines of the same singular curve can intersect). This will allow decompositions with several pseudo-lines or an even-degree curve with a decomposition containing pseudo-lines. An odd-degree singular curve will still have at least one pseudo-line in any decomposition into simple closed paths.

In identifying potential pseudo-lines, it is useful to note that since Property 1 still holds, (the definition of an oval is topological and not algebraic so singularities do not matter) when a simple closed path inside a curve intersects some line in an odd number of points, that path is a pseudo-line. In particular, if a simple closed path of a curve passes through an odd number of nonsingular infinite points, then it is a pseudo-line.

If we consider the algebraic decomposition on the left, we have a curve consisting of five pseudo-lines, but in the Gauss decompositions of f and -f in the middle and right images, we still have exactly one pseudo-line when we continue these affine decompositions into the projective plane. This happens uniquely because there are no singular infinite points. The number of ovals does vary between these two decompositions, as does the pseudo-line (which is the boundary of the shaded infinite regions). Note that the infinite line intersects this latter path in five points, so we know it is a pseudo-line.

One way to decompose a projective curve into simple closed paths is to work directly from the projective graph. Since the graph is an Euler graph, every vertex is even and the graph can be decomposed into edge-disjoint cycles. One way to do this is to use the built-in Mathematica procedure FindFundamentalCycles (which may not give a direct answer since different cycles returned may not be edge-disjoint).

The documentation on FindFundamentalCycles suggests doing a symmetric difference operation on a pair of cycles with common edges.

graphSD[G_,H_]:=With[{GH=GraphIntersection[G,H]},FindCycle[EdgeList[GraphUnion[GraphDifference[G,GH],GraphDifference[H,GH]]]]][[1]];

f=5x^3+x^5-15 x y^2-10x^3 y^2+ 5 x y^4;

FC=FindFundamentalCycles[PG]

SD=graphSD[FC[[2]],FC[[3]]]

C1 = {7\[UndirectedEdge]18,18\[UndirectedEdge]11,11\[UndirectedEdge]14,14\[UndirectedEdge]9,9\[UndirectedEdge]15,15\[UndirectedEdge]12,12\[UndirectedEdge]19,19\[UndirectedEdge]7};
C2= {16\[UndirectedEdge]13,13\[UndirectedEdge]17,17\[UndirectedEdge]5,5\[UndirectedEdge]16};
C3={11\[UndirectedEdge]13,13\[UndirectedEdge]12,12\[UndirectedEdge]3,3\[UndirectedEdge]11};
C4={20\[UndirectedEdge]1,1\[UndirectedEdge]21,21\[UndirectedEdge]13,13\[UndirectedEdge]20} ;

Row[{Graph[C1,VertexLabels->"Name"],Graph[C2,VertexLabels->"Name"],Graph[C3,VertexLabels->"Name"],Graph[C4,VertexLabels->"Name"]}]

This is the classical ordinary singularity decomposition. Surprisingly, the three 4-vertex graphs all corresponding to pseudo-lines; vertices 1, 3, 5, 7, and 9 are the infinite points (these graphs contain one each), and only the 8-vertex graph corresponds to an oval. It is impossible to decompose this curve into simple closed paths using only one pseudo-line.

8.6 A Paradigm for Analyzing Curves

In social sciences, a paradigm is somewhat like an algorithm but not as precise. Now that we have most of our methods and theory, I will give a paradigm for how to analyze an unfamiliar curve given by a bivariate polynomial. Be prepared to improvise.

Find a set of critical points containing at least singular points and infinite points and possibly boundary points on a large circle. You need enough points to accomplish step 3, but discard points that do not give new information.

While finding these points, you may discover the curve is not square-free. Find the square-free reduction. You may also discover your curve is reducible. If you start with integer coefficients, you can try to factor. In rare cases, the factors may be numerical or complex. Such factorization may be visible if there are too many singular points. If you have numerical coefficients, the curve is probably not reducible.

Visually or using path tracking with an indefinite critical terminal point, find the affine graph. Also inspect around infinite points to connect all branches to finite points. Then produce the projective graph. Break the curve into connected components or, if possible, do a decomposition into simple closed paths.

You may wish to plot your curve. Choose an appropriate local or global plot. Sometimes a contour plot is sufficient; in other cases, you may need to break the curve into pieces, do path tracking, and then reassemble your curve (as in the first part of this section).

8.7 Plotting Projective Curves on a Möbius Band

For the reader who is interested in Wolfram Language implementation, we give some more details on how to plot curve components on the Möbius band representation of the projective plane.

Going backwards, we take a Möbius band and consider the transversal line that represents the x-axis of the projective plane. We cut, starting at the inside edge (representing the origin) toward the point {-1,0,0} at infinity in the negative direction. We then cut along the midline of the band (that is, the infinite line) until we reach the infinite point {1,0,0} again.

What we have left is one long strip half the width of the original Möbius band. Both ends represent the ray along the negative x-axis from the origin to the infinite point. The whole bottom of the strip represents 0 while the top of the strip is the infinite line wrapped twice.

Reversing the above, we view the Möbius band as a strip with width, the first coordinate, from -π to π, and height, the second coordinate, from 0 to .5. This is glued together along the sides and top, first half to second half, with a twist to make the Möbius band.

moebiusB[t_,s_]:=Module[{a=N[Sqrt[2]-1],mb,MB,tt},
mb[tt_]:={Cos[2tt+Pi]/(1+a Cos[tt]), Sin[2tt+Pi]/(1+a Cos[tt]),1/(1+a Cos[tt+Pi/2])};
s*mb[t]+(1-s)*mb[t+Pi]];

moebiusPLMB:=Show[ParametricPlot3D[moebiusB[t,s], {t,-Pi,Pi},{s,0,.5}, Mesh->None,PlotStyle->Opacity[0.8]],ParametricPlot3D[moebiusB[t,.5],{t,0,Pi},PlotStyle->{Thick,Blue,Dashed}], Boxed->False, Axes->False];

Show[moebiusPLMB, ImageSize->Small]

To make the real projective plane, we now squish the entire lower side of our rectangle to one point, which will represent the origin. This must be done mentally since the real projective plane cannot be imbedded in real affine 3-space.

moebiusRMPP:=ListLinePlot[{{{-Pi,0},{Pi,0}},{{-Pi,.5},{Pi,.5}},{{Pi,0},{Pi,.5}},{{-Pi,0},{-Pi,.5}},{{0,0},{0,.5}}},PlotStyle->{Brown,Orange,Green,Green,Cyan}, AspectRatio->1/3.25];

Show[moebiusRMPP,ListPlot[{Labeled[{-1.5,.02},"zero"],Labeled[{1.5,.02},"zero"],Labeled[{-3,.2},"negative x-axis"],Labeled[{.2,.2},"positive x-axis"],Labeled[{3,.2},"negative x-axis"]},PlotStyle->White],
ListPlot[{Labeled[{1.8,.43},"infinite line"],Labeled[{-1.8,.43},"infinite line"]},PlotStyle->White],
ListPlot[{Labeled[{-2,.25},"lower half-plane"],Labeled[{2,.25},"upper half-plane"]},PlotStyle->White,LabelStyle->Directive[Red,Medium]]]

On the other hand, if we choose to not glue together the two copies of the infinite line, we have a hemisphere (which will be more convenient to use). The entire hemisphere plane (except for origin) lies between the orange lines. All points on the lower brown line represent zero, and the upper line is the infinite line (which once was the upper orange line). We can map the affine plane except for points {x,y} such that y=0 and x≤0 to this hemisphere rectangle. Note that points {x,0} with x<0 would map to {±ℼ,N[ArcTan[Norm[x]]]/ℼ}, where the user needs to choose the sign of the first coordinate to insure continuity. The case of {0,0} will be considered later.

The function from the projective plane minus the negative x-axis to rectangle hemisphere provides the model for the projective plane. It is assumed projective points will have a third coordinate 0 or 1. If any points are on the negative x-axis, including {1,0,0}, then the function will return an error message and {}. As usual, to apply to a list L of points, use M=moebiusPhi/@L. You can find the position of error points in M by Position[M,{}]. Then fix these points manually.

moebiusPhi[p_]:=
If[Length[p]==2&&(p[[1]]>0||p[[2]]≠0 ),Return[{ArcTan@@N[p],N[ArcTan[Norm[p]]/Pi]}],Echo[p,"ambiguous point "]; Return[{}]];

Since in the projective plane, a curve is a union of simple closed topological curves, it is important (for continuity) that the image of the curve in the hemisphere rectangle actually hits the boundary. It is necessary to plot the boundary points accurately. At least one coordinate of these points needs to be exact, so the exact or symbolic value should be given. We add these points manually after applying phi, making sure to get the correct hemisphere signs (since these would be ambiguous to the function phi).

Combining moebiusPhi with moebiusB—as in moebiusB@@moebiusPhi[p] places the point p on the Möbius band. Typically, to plot a curve on the Möbius band, a representation of the projective plane, we would do the two steps separately as in the examples below. Infinite points and points on the omitted ray will be handled separately.

We now show how to draw some of the Möbius plots in Sections 8.5 and 8.6.

Example A1—Parallel Lines

l1=2x-3y-4;
l2=2x-3y+4;

The infinite points on the Gauss hemisphere are {-3,-2,0} and {3,2,0}. l1 misses the negative x-axis but l2 does not—it intersects at {-2,0}.

L1=Table[{x,(2x-4)/3}, {x,-6,6,.2}];
PL1= Append[Prepend[moebiusPhi/@L1,{N[ArcTan[-3,-2]],.5}],{N[ArcTan[3,2]],.5}];
L2n= Table[{x,(2x+4)/3},{x,-6,-2.1,.1}];
PL2n=Append[Prepend[moebiusPhi/@L2n,{N[ArcTan[-3,-2]],.5}], N[{-Pi,ArcTan[2]/Pi}]];
L2p=Table[{x,(2x+4)/3},{x,-1.9,6,.1}];
PL2p=Append[Prepend[moebiusPhi/@L2p,N[{Pi,ArcTan[2]/Pi}]],{N[ArcTan[3,2]],.5}];

Show[moebiusRMPP,ListLinePlot[{PL1,PL2n,PL2p}, PlotStyle->{Cyan,Purple,Purple}],Axes->False,Frame->True,AspectRatio->1/5]

Now we can plot in our Möbius band model of the projective plane.

Show[moebiusPLMB,Graphics3D[{{Black,Thick,Line[moebiusB@@#&/@PL1]},
{Magenta,Thick,Line[moebiusB@@#&/@PL2n]},{Magenta,Thick,Line[moebiusB@@#&/@PL2p]}}]]

Example A2—Affine Parabola (g) and Hyperbola (h)

g= y- x^2-1;
h= x^2-y^2-4;

The parabola has only one infinite point {0,1,0}; the hyperbola has infinite points {1,1,0}, {1,-1,0}, {-1,1,0}, {-1,-1,0} in the Gauss hemisphere.

G=Table[{x,x^2+1},{x,-6,6,.2}];
PG=Append[Prepend[moebiusPhi/@G,{N[Pi/2],.5}],{N[Pi/2],.5}] ;

Show[moebiusRMPP,ListLinePlot[PG, PlotStyle->Blue]]

Hp=Table[{Sqrt[y^2+4],y},{y,-6,6,.2}];
PHp=Append[Prepend[moebiusPhi/@Hp,{N[ArcTan[1,-1]],.5}],{N[ArcTan[1,1]],.5}];
Hnp=Table[{-Sqrt[y^2+4],y},{y,.1,6,.2}];
PHnp=Append[Prepend[moebiusPhi/@Hnp,N[{Pi,ArcTan[2]/Pi}]],{N[ArcTan[-1,1]],.5}];
Hnn=Table[{-Sqrt[y^2+4],y},{y,-6,-.1,.2}];
PHnn=Append[Prepend[moebiusPhi/@Hnn,{N[ArcTan[-1,-1]],.5}],N[{-Pi,ArcTan[2]/Pi}]];
Show[moebiusRMPP,ListLinePlot[{PHnn,PHp,PHnp}, PlotStyle->Black]]

{Labeled[Show[moebiusPLMB,Graphics3D[{Black,Thick,Line[moebiusB@@#&/@PG]}],ViewPoint->{3.3791867902828234`,-0.13180435786152273`,0.11715053404397978`}], 
 "Example A1: Affine parabola"],Labeled[Show[moebiusPLMB,Graphics3D[{{Black,Thick,Line[moebiusB@@#&/@PHp]},
{Black,Thick,Line[moebiusB@@#&/@PHnp]},{Black,Thick,Line[moebiusB@@#&/@PHnn]}}]], "Example A2: Affine hyperbola"]}

Note that the big difference between plots is that the parabola is tangent to the infinite line while the infinite line meets the hyperbola in two distinct points.

Example A3—Circles

We look at three circles: one missing the negative x-axis completely, one centered at the origin hitting the negative x-axis once, and one hitting the negative x-axis twice. We compare their plots in the hemisphere rectangle and Möbius band.

c1={Cos[t], Sin[t]+3};
c2={Cos[t],Sin[t]};
c3={Cos[t]-3,Sin[t]};
ParametricPlot[{c1,c2,c3}, {t,0,2 Pi},PlotStyle->{Blue,Black,Purple}, PlotLegends->"Expressions"]

C1=Table[N[c1/.{t->s}],{s,0,2Pi,Pi/25}];
PC1=moebiusPhi/@C1;
C2=Table[N[c2/.{t->s}],{s,-Pi+.01,Pi-.01,(Pi-.02)/50}];
PC2=Append[Prepend[moebiusPhi/@C2,{-N[Pi],.25}],{N[Pi],.25}];
C3p=Table[N[c3/.{t->s}],{s,.01,Pi-.01,(Pi-.02)/25}];
PC3p=Append[Prepend[moebiusPhi/@C3p,N[{Pi,ArcTan[2]/Pi}]],N[{Pi,ArcTan[4]/Pi}]];
C3n=Table[N[c3/.{t->s}],{s,Pi+.01,2Pi-.01,(Pi-.02)/25}];
PC3n=Append[Prepend[moebiusPhi/@C3n,N[{-Pi,ArcTan[4]/Pi}]],N[{-Pi,ArcTan[2]/Pi}]];

Show[moebiusRMPP,ListLinePlot[{PC1,PC2,PC3p,PC3n}, PlotStyle->{Blue,Black,Magenta,Magenta}]]

Show[moebiusPLMB,Graphics3D[{Blue,Thick,Line[moebiusB@@#&/@PC1]}],
Graphics3D[{Black,Thick,Line[moebiusB@@#&/@PC2]}],
Graphics3D[{Magenta,Thick,Line[moebiusB@@#&/@PC3p]}],
Graphics3D[{Magenta,Thick,Line[moebiusB@@#&/@PC3n]}]]

Note that all three circles are ovals; this is evident already in the rectangular hemisphere.

Example A4

The rational function curve x y((x^2)- 4)-4=0 shows infinite singularity.

f=4/(x^3-4x);
Show[Plot[f,{x,-4,-2},PlotStyle->Blue,PlotRange->{{-4,-2},{-10,10}}],Plot[f,{x,-2,0},PlotStyle->Black],Plot[f,{x,0,2},PlotStyle->Purple],Plot[f,{x,2,4},PlotStyle->Magenta,PlotRange->{{-4,4},{-10,10}}],PlotRange->All]

F1=Table[N[{x,f}],{x,-6,-2.05,.025}];
PF1=Append[Prepend[moebiusPhi/@F1,{-N[Pi],.5}],{-N[Pi/2],.5}];
F2=Table[N[{x,f}],{x,-1.95,-.05,.05}];
PF2=Append[Prepend[moebiusPhi/@F2,{N[Pi/2],.5}],{N[Pi/2],.5}];
F3=Table[N[{x,f}],{x,.05,1.95,.05}];
PF3=Append[Prepend[moebiusPhi/@F3,{-N[Pi/2],.5}],{-N[Pi/2],.5}];
F4=Table[N[{x,f}],{x,2.05,6,.025}];
PF4=Append[Prepend[moebiusPhi/@F4,{N[Pi/2],.5}],{0,.5}];

Show[moebiusRMPP,ListLinePlot[{PF1,PF2,PF3,PF4}, PlotStyle->{Blue,Black,Purple,Magenta}]]

Show[moebiusPLMB,Graphics3D[{Blue,Thick,Line[moebiusB@@#&/@PF1]}],
Graphics3D[{Black,Thick,Line[moebiusB@@#&/@PF2]}],
Graphics3D[{Purple,Thick,Line[moebiusB@@#&/@PF3]}],
Graphics3D[{Purple,Thick,Line[moebiusB@@#&/@PF4]}],ViewPoint->{2.8861775939869543`,-0.9323063786376076`,1.5002612146953958`}]

For the previous examples, the parameterization of the given curves was immediate. In general, this is not the case. One needs the techniques from Chapter 4 to find a good piecewise linear approximation of a parameterization.

g = gaussCurve[z^3+3,x,y,z]

ContourPlot[g==0,{x,-4,4},{y,-4,4}]

We saw earlier that a Gauss hemisphere plot is about the same as a contour plot in a small region. We can trace and add in the infinite points at the end of each trace.

gp=gPoints[g,4,x,y]

irp=Normalize/@infiniteRealPoints[g,x,y]

gpF={{-3.4949386321816247`,1.9456114610282333`},{0.06252036494620586`,3.9995113706510463`},{3.432418267235486`,2.0538999096227735`},{3.432418267235423`,-2.0538999096228165`},{0.06252036494620673`,-3.9995113706510477`},{-3.4949386321816074`,-1.9456114610282425`},{0.7211247851537057`,1.2490247664834073`},{-1.442249570307409`,0.`},{0.7211247851537046`,-1.2490247664834087`}};
irpF={{-37.81781954265174`,21.83412829311467`,0},{-1.335064011242463`,-0.770799566276224`,0},{0.`,-1.5980130051246886`,0}};

Show[gaussPlot[g,4,gp], Graphics[{Magenta,Thick,Dashed,Line[{{-4,0},{0,0}}]}]]

Graph[{a->6,6->8,8->1,1->b,b->4, 4->9, 9->5, 5->c, c->2, 2->7, 7->a}, VertexLabels->"Name"]

There is one loop that crosses the infinite line three times, so this entire curve is a pseudo-line. Also note that our Gauss plot is symmetric about the horizontal axis, which means that our rectangular hemisphere will have vertical symmetry about the positive x-axis, cutting our work in half.

L1=pathFinder[g,gpF[[2]],gpF[[3]], .4,x,y];
L2=pathFinder[g,gpF[[8]],gpF[[1]],.2,x,y];

K1=moebiusPhi/@L1;
K2=moebiusPhi/@L2;

K2[[1]]=N[{Pi, ArcTan[Abs[gpF[[8,1]]]]/Pi}];

K1=Append[Prepend[K1,{ArcTan@@Take[-irpF[[3]],2],.5}],{ArcTan@@Take[-irpF[[2]],2],.5}];
AppendTo[K2,{ArcTan@@Take[irpF[[1]],2],.5}];

K3=Reverse[Table[{-p[[1]],p[[2]]},{p,K1}]];
K4=Reverse[Table[{-p[[1]],p[[2]]},{p,K2}]];

K=Join[K1,K4,K2,K3];

M=moebiusB@@#&/@K;
Show[moebiusPLMB,Graphics3D[{Black,Thick,Line[M]}],ViewPoint->{-1.282969954491907`,-2.4307640696896065`,1.9736702190024185`}, ImageSize->Large]

This shows a loop crossing the infinite line in three places, something that can’t happen in affine geometry, but it also confirms (although we knew it must happen in degree 3) that this loop is a pseudo-line.

Example A5—Curves Passing Through the Origin

Generally for the Möbius band plots, we avoid curves passing through the origin. It is easy to arrange this since a translation of the curve can easily produce an equivalent curve near the original. However, if we really want to do this, then the ambiguity of {0,0} in this model gives a discontinuity at the origin.

Consider the simple node at the origin f=-(x^3)-(x^2)+(y^2). By inspection, we can easily parameterize this with different parameterizations on pieces of the curve between critical points {{0,-1,0}, {-1,0}, {0,0}, and {0,1,0}}.

f=y^2-x^3-x^2;
N1=N[Table[{x,Sqrt[x^3+x^2]},{x,.05,6,.2}]];
PN1=Prepend[Append[moebiusPhi/@N1,N[{Pi/2,.5}]],N[{Pi/4,0}]];
N2=N[Table[{x,Sqrt[x^3+x^2]},{x,-.999,-.01,.01}]];
PN2=Append[Prepend[moebiusPhi/@N2,N[{Pi,.25}]],N[{3Pi/4,0}]];
N3=N[Table[{x,-Sqrt[x^3+x^2]},{x,.05,6,.2}]];
PN3=Append[Prepend[moebiusPhi/@N3,N[{-Pi/4,0}]],N[{-Pi/2,.5}]];
N4=N2=N[Table[{x,-Sqrt[x^3+x^2]},{x,-.999,-.01,.01}]];
PN4=Append[Prepend[moebiusPhi/@N4,N[{-Pi,.25}]],N[{-3Pi/4,0}]];

Show[moebiusRMPP,ListLinePlot[{PN1,PN2,PN3,PN4}, PlotStyle->Blue]]

{ContourPlot[f==0,{x,-2,2},{y,-2,2}],
Labeled[Show[moebiusPLMB,Graphics3D[{Black,Thick,Line[moebiusB@@#&/@PN1]}],
Graphics3D[{Black,Thick,Line[moebiusB@@#&/@PN2]}],
Graphics3D[{Black,Thick,Line[moebiusB@@#&/@PN3]}],
Graphics3D[{Black,Thick,Line[moebiusB@@#&/@PN4]}]],"Example A5: Standard node"]}

The curve hits the horizontal axis of the rectangular hemisphere at the angle the branches of the singular point make with the x-axis. In algebraic geometry lingo, we have blown up the singularity. This happens, in general, for singularities at the origin. Of course, since all points on the boundary of the Möbius strip are to be squashed together, in the actual projective plane, this looks fine.