答案1
还有一个版本元帖子,依靠小圆上的切点必须与point
外接圆上的切点相同这一事实,并使用一些颜色很漂亮。
prologues := 3;
outputtemplate := "%j%c.eps";
input colorbrewer-cmyk
beginfig(1);
path base, edge, propeller, circumcircle, square;
base = halfcircle shifted 1/2 right;
edge = (base & reverse base rotated 180) shifted up scaled 89;
propeller = for i=0 upto 3: edge rotated 90i .. endfor cycle;
circumcircle = fullcircle scaled 2 abs(point 1/45 angle
1/2[point 0 of edge, point 4 of edge] of edge);
square = for i=0 upto 3: point 9i of propeller -- endfor cycle;
picture P[];
P1 = image(
fill circumcircle withcolor Blues 8 5;
fill propeller withcolor Blues 8 4;
draw propeller;
);
P2 = image(
fill square withcolor Blues 8 5;
fill propeller withcolor Blues 8 4;
clip currentpicture to square;
);
P3 = image(
fill propeller withcolor Blues 8 2;
draw P2;
draw propeller;
);
draw P1;
draw P3 shifted 300 right;
endfig;
end.
答案2
答案3
你不需要知道大圆的半径
\documentclass{standalone}
\usepackage[dvipsnames,svgnames]{xcolor}
\usepackage{tkz-euclide}
\begin{document}
\begin{tikzpicture}
\tkzDefPoints{0/0/A,4/0/B,2/2/O,3/4/X,4/1/Y,1/0/Z,
0/3/W,3/0/R,4/3/S,1/4/T,0/1/U}
\tkzDefSquare(A,B)\tkzGetPoints{C}{D}
\tkzInterLC(O,X)(X,C) \tkzGetSecondPoint{F}
% or \tkzDefPointWith[colinear normed=at X,K=1](O,X) \tkzGetPoint{F}
\begin{scope}
\tkzFillCircle[fill=MidnightBlue](O,F)
\tkzFillPolygon[purple!40](A,...,D)
\tkzClipPolygon(A,...,D)
\foreach \c/\t in {S/C,R/B,U/A,T/D}
{\tkzFillCircle[MidnightBlue](\c,\t)}
\end{scope}
\foreach \c/\t in {X/C,Y/B,Z/A,W/D}
{\tkzFillCircle[purple!40](\c,\t)}
\foreach \c/\t in {S/C,R/B,U/A,T/D}
{\tkzFillCircle[MidnightBlue](\c,\t)}
\end{tikzpicture}
\end{document}