找回密码
 快速注册
搜索
查看: 1484|回复: 3

那道小球在正n边形里碰碰的图怎么画好?

[复制链接]

730

主题

1万

回帖

9万

积分

积分
93613
QQ

显示全部楼层

kuing 发表于 2015-7-14 14:29 |阅读模式
前两天在 kuing.cjhb.site/forum.php?mod=redirect&goto=findpost&ptid=3572&pid=15141 里面的这个图:

如果用tikz的话,应该怎么画比较好?

我目前的代码比较笨重,如下:
  1. \begin{tikzpicture}%[scale=]
  2. \def\zdbl{0.3}
  3. \coordinate [label=-90:$P$] (P) at (0,0);
  4. \coordinate [label=-90:$A_1$] (A1) at (-1,0);
  5. \coordinate [label=-90:$A_2$] (A2) at (1,0);
  6. \coordinate [label=45:$A_3$] (A3) at ($(A2)+(72:2)$);
  7. \coordinate [label=90:$A_4$] (A4) at ($(A3)+(2*72:2)$);
  8. \coordinate [label=180:$A_5$] (A5) at ($(A4)+(3*72:2)$);
  9. \coordinate (X) at ($(A3)+(2,0)$);
  10. \coordinate (Y) at ($(X)+(72:2)$);
  11. \coordinate (Z) at ($(Y)+(2,0)$);
  12. \coordinate (W) at ($(Z)+(72:2)$);
  13. \coordinate (T) at ($(Z)!\zdbl!(W)$);
  14. \coordinate (B1) at (intersection of P--T and A2--A3);
  15. \coordinate (C2) at (intersection of P--T and A3--X);
  16. \coordinate (C3) at (intersection of P--T and X--Y);
  17. \coordinate (C4) at (intersection of P--T and Y--Z);
  18. \fill[gray!25] (P)--(W)--(Z)--cycle;
  19. \draw (A1)--(A2)--(A3)--(A4)--(A5)--cycle;
  20. \draw[dashed] (A2)
  21. \foreach \i in {1,2,3,4} {--++(-108+\i*72:2)}
  22. \foreach \i in {1,2,3,4} {--++(180-\i*72:2)}
  23. \foreach \i in {1,2,3,4} {--++(-108+\i*72:2)}
  24. \foreach \i in {1,2,3,4} {--++(180-\i*72:2)};
  25. \path let \p2 = ($(C2)-(A3)$),
  26. \n2 = {veclen(\x2,\y2)},
  27. \p3 = ($(C3)-(X)$),
  28. \n3 = {veclen(\x3,\y3)},
  29. \p4 = ($(C4)-(Y)$),
  30. \n4 = {veclen(\x4,\y4)}
  31. in
  32. coordinate (B2) at ($(A3)+(2*72:\n2)$)
  33. coordinate (B3) at ($(A4)+(3*72:\n3)$)
  34. coordinate (B4) at ($(A5)+(4*72:\n4)$);
  35. \coordinate (B5) at ($(A1)!\zdbl!(A2)$);
  36. \draw (P)--(B1)--(B2)--(B3)--(B4)--(B5);
  37. \draw[dashed] (T)--(B1);
  38. \end{tikzpicture}
复制代码
其中最开头的 \def\zdbl{0.3} 是最终点的比例,调整它,就可以产生不同的反射路线。

效果图:
QQ截图20150714144027.gif

大家看看能不能再优化一下。

413

主题

1558

回帖

1万

积分

积分
11498

显示全部楼层

abababa 发表于 2015-7-14 14:55
回复 1# kuing

我有个想法,我看geogebra软件里也是命令,像O=(0,0),A=(1,3),Circel(O,A)就能画圆了,能不能把这些命令都分别在tikz里定义一下,也可以定义出轴对称,正n边形之类的命令,然后用geogebra的命令来画,感觉可能会简单点,但我不懂tikz,不知道可不可行

730

主题

1万

回帖

9万

积分

积分
93613
QQ

显示全部楼层

 楼主| kuing 发表于 2015-7-14 15:08
回复 2# abababa

表示还没这能力

413

主题

1558

回帖

1万

积分

积分
11498

显示全部楼层

abababa 发表于 2016-2-29 14:17
有了tkz-euclide包以后,画这个图我觉得就很简单了。
只要用\tkzDefPointBy[rotation=center O angle -72](A)\tkzGetPoint{B},表示将A点绕O点顺时针旋转72度,得到B点。这样一来只要先定义一条线段,之后不断地旋转就出来了。可能也能用循环什么的,我还不会用,但感觉看上去意义明显多了。

手机版|悠闲数学娱乐论坛(第3版)

GMT+8, 2025-3-4 15:40

Powered by Discuz!

× 快速回复 返回顶部 返回列表