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