Geometric details: OPQR is a unit square. The arc centred on O through Q is drawn, as is the perpendicular bisector of OP. The en:Neusis construction involves finding unit interval AB through P with A on the perpendicular bisector and B on the arc. Angle PAO is the interior angle of a heptagon. The remainder of the construction can be carried out with ruler and compass. (Two of the vertices lie on the lines OR and PQ.)
摘要
The en:MetaPost source below is a bit of a cheat.
许可协议
Metapost source
The Metapost source for this file. All done via command line on MacOSX:
- Metapost (mpost command from teTeX)
- \convertMPtoPDF TeX command from supp-pdf.tex, processed via pdfTeX
- ghostscript to a png at 1200x1200.
I hereby make this source available under the GPL version 2 or later.
u=2cm;
path unitcircle; unitcircle=fullcircle scaled 2u;
thick=1mm;
thin=0.25mm;
transform heptT;
def drawruler(expr p,q) =
path ruler[];
ruler0:=unitsquare xscaled abs(p-q) yscaled .1u rotated angle(q-p) shifted p;
ruler1:=unitsquare yscaled 0.5 shifted 0.25up
xscaled abs(p-q) yscaled .1u rotated angle(q-p) shifted p;
fill ruler0 withcolor (1,1,.5);
fill ruler1 withcolor (.9,.9,.3);
draw ruler0 withpen pencircle scaled 0.25;
enddef;
beginfig(77)
pickup pencircle scaled thin;
z0=(0,0); z0d=(0,.4u);
z1=(-0.5u,0); z1l=(.5u-u*sqrt(2),0);
z2=(0.5u,0);
z3=(.5u,-u); z3u=(.5u,-u*sqrt(2));
z4=(-.5u,-u);
z5=(0,-u);
z6=(0,whatever)=z1+whatever*dir(180/7);
z7=z6-u*dir(180/7);
drawruler(z6,z7);
drawruler(z3,z4);
for i = 0 upto 7:
z[i]vtx=dir(360i/7);
endfor;
xxpart heptT= yypart heptT;
xypart heptT=-yxpart heptT;
for i = 6,7: z[i] = z[i]vtx transformed heptT; endfor
draw (for i = 0 upto 6: z[i]vtx -- endfor cycle) transformed heptT dashed evenly withcolor blue;
draw z1--z2--z3--z4--cycle;
draw z1l--z1;
draw z0d--z5;
draw z2--z4 dashed evenly;
draw z6--z7;
label.urt("O",z2);
label.ulft("A",z6);
label.ulft("P",z1);
label.llft("Q",z4);
label.rt("R",z3);
label.lft("B",z7);
draw subpath (4,5) of unitcircle scaled (sqrt(2)) shifted z2;
for i = 1,2,6,7,3,4:
if known(x[i]):
drawdot z[i] withpen pencircle scaled thick;
fi
endfor
endfig;
bye
See also