TikZ绘图示例——尺规作图: 圆内接任意正边形的近似画法(以正七边形为例)

21 篇文章 3 订阅
11 篇文章 0 订阅

做法

  1. A B AB AB为圆的直径;
  2. 把直径 A B AB AB等分成所求的多边形边数(例如图中分成七边形);
  3. 分别以 A ,   B A,\,B A,B为圆心, A B AB AB长为半径作圆弧交于 E E E点;
  4. 连接 E 2 E2 E2, 并延长交圆周于 F F F点(作任意正多边形都要通过 2 2 2点);
  5. A F AF AF即为所求正多边形的边长.

图形

1

代码

\documentclass[tikz,border=3pt]{standalone}
\usetikzlibrary{calc}
\usetikzlibrary{intersections,through}

\begin{document}
    \begin{tikzpicture}[]
        % 标记点A,B,C,D,O
        \coordinate [label=above left:$A$] (A) at (0,0);
        \coordinate [label=above right:$B$] (B) at (4,0);
        \coordinate [] (O) at (2,0);
        % 圆o
        \draw [name path=o] (O) circle (2);
        % AB为圆的直径
        \draw [densely dashed,-latex,name path=AB] ($(A)!-.1!(B)$) -- ($(A)!1.1!(B)$);

        % 等分直径AB
        \coordinate [label=below right:$2$] (2) at ($(A)!2/7!(B)$);
        \foreach \i in {1,3,4,5,6}
            \coordinate [label=below:$\i$] (\i) at ($(A)!\i/7!(B)$);
        \coordinate [label=below right:$7$] (7) at ($(A)!7/7!(B)$);
        \foreach \j in {1,2,...,7}
            \fill (\j) ellipse [x radius=.5pt,y radius=1pt];
        % 分别以A,B为圆心, AB长度为半径作圆弧交于E点
        \path [name path=oAE]
        let 
            \p1=($(B)-(A)$),
            \n1={veclen(\x1,\y1)}
        in 
            (B) circle (\n1);

        \path [name path=oBE]
        let 
            \p1=($(B)-(A)$),
            \n1={veclen(\x1,\y1)}
        in 
            (A) circle (\n1);
        % 标记两圆弧的交点E
        \path [name intersections={of=oAE and oBE}]
            coordinate [label=above right:$E$] (E) at (intersection-1);
        % 绘制弧段
        \draw [red]
        let 
            \p1=($(B)-(A)$),
            \n1={veclen(\x1,\y1)}
        in 
            (A) arc (180:117:\n1)
            (B) arc (0:65:\n1);

        % 连接E2
        \path [name path=E2] (E) -- ($(E)!1.5!(2)$);
        \path [name intersections={of=E2 and o}]
            coordinate [label=below left:$F$] (F) at (intersection-2);
        \draw (E) -- (F);

        % 找到其他点
        \path [name path=o2]
        let
            \p2=($ (A) - (F) $),
            \n2={veclen(\x2,\y2)}
        in 
            (F) circle (\n2);
        \path [name intersections={of=o2 and o}]
            coordinate [] (F1) at (intersection-2);

        \path [name path=o3]
        let
            \p2=($ (A) - (F) $),
            \n2={veclen(\x2,\y2)}
        in 
            (F1) circle (\n2);
        \path [name intersections={of=o3 and o}]
            coordinate [] (F2) at (intersection-1);

        \path [name path=o4]
        let
            \p2=($ (A) - (F) $),
            \n2={veclen(\x2,\y2)}
        in 
            (F2) circle (\n2);
        \path [name intersections={of=o4 and o}]
            coordinate [] (F3) at (intersection-1);

        \path [name path=o5]
        let
            \p2=($ (A) - (F) $),
            \n2={veclen(\x2,\y2)}
        in 
            (F3) circle (\n2);
        \path [name intersections={of=o5 and o}]
            coordinate [] (F4) at (intersection-1);

        \path [name path=o6]
        let
            \p2=($ (A) - (F) $),
            \n2={veclen(\x2,\y2)}
        in 
            (F4) circle (\n2);
        \path [name intersections={of=o6 and o}]
            coordinate [] (F5) at (intersection-1);
        % 绘制正七边形
        \draw [thick] (F) -- (F1) -- (F2) -- (F3) -- (F4) -- (F5) -- (A) -- cycle;
    \end{tikzpicture}
\end{document}
  • 2
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

zorchp

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值