Mathematica画图系列 做了该用geogebra做的事情。。

本文介绍如何使用Mathematica编程,从简单的几何形状开始,逐步构建并动态展示复杂的几何图案,包括调整参数实现个性化设计。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

群里看到这样一张图,就顺手画了
在这里插入图片描述
代码如下:

Manipulate[
 Block[{r1 = 5, o},
  Graphics[{
    Circle[{0, 0}, 5],
    Circle[(r1 - r2) {Cos[t], Sin[t]}, r2],
    Gray, l = Table[
      o = (r1 - r2) {Cos[i], Sin[i]};
      Line@{o, o + k r2 {Cos[i*r1/r2], Sin[-i*r1/r2]}}
      , {i, 0, t, Pi/96.}],
    Black, Thick, Line@l[[;; , 1, 2]]}]]
 , {t, 0, 2 Pi}, {r2, 0.1, 5}, {k, 1, 2}]

在这里插入图片描述
需要思路和过程的话继续往下看~


首先,仿照原图那样,画两个圆,至于半径完全是看心情的

Block[{r1 = 5, r2 = 2, t = 0},
 Graphics[{
   Circle[{0, 0}, 5],
   Circle[{(r1 - r2) Cos[t], (r1 - r2) Sin[t]}, r2]}]]

然后,套一层Manipulate让他们动起来

Manipulate[
 Block[{r1 = 5, r2 = 2},
  Graphics[{
    Circle[{0, 0}, 5],
    Circle[{(r1 - r2) Cos[t], (r1 - r2) Sin[t]}, r2]}]], {t, 0, 2 Pi}]

下一步就开始画线了,这一步发现小圆的圆心坐标多次用到,于是设个变量,减小代码量也可以提高运行效率

Manipulate[
 Block[{r1 = 5, r2 = 2, o},
  o = (r1 - r2) {Cos[t], Sin[t]};
  Graphics[{
    Circle[{0, 0}, 5],
    Circle[o, r2],
    Line@{o, o + 1.2 r2 {Cos[t*r1/r2], Sin[-t*r1/r2]}}}]]
 , {t, 0, 2 Pi}]

下一步,把线段扫过的区域画出来,用Table生成即可

Manipulate[
 Block[{r1 = 5, r2 = 2, o},
  o = (r1 - r2) {Cos[t], Sin[t]};
  Graphics[{
    Circle[{0, 0}, 5],
    Circle[o, r2],
    Table[
     o = (r1 - r2) {Cos[i], Sin[i]};
     Line@{o, o + 1.2 r2 {Cos[i*r1/r2], Sin[-i*r1/r2]}}
     , {i, 0, t, Pi/96.}]}]]
 , {t, 0, 2 Pi}]

然后,再加上其他可以调节的参数

Manipulate[
 Block[{r1 = 5, o},
  Graphics[{
    Circle[{0, 0}, 5],
    Circle[(r1 - r2) {Cos[t], Sin[t]}, r2],
    Table[
     o = (r1 - r2) {Cos[i], Sin[i]};
     Line@{o, o + k r2 {Cos[i*r1/r2], Sin[-i*r1/r2]}}
     , {i, 0, t, Pi/96.}]}]]
 , {t, 0, 2 Pi}, {r2, 0.1, 5}, {k, 1, 2}]

最后,把另一端的轨迹画出来,然后适当更改图形的样式,美(丑?)化一下

就是最后的代码了(和文章开头的略有不同哦,使用函数避免了很多次书写{Cos[t],Sin[t]}这种东西

Manipulate[
 Block[{r1 = 5, o, c},
  c[x_] := {Cos[x], Sin[x]};
  Graphics[{
    Circle[{0, 0}, 5],
    Circle[(r1 - r2) c[t], r2],
    Gray, l = Table[
      o = (r1 - r2) c[i];
      Line@{o, o + k r2 c[-i*r1/r2]}
      , {i, 0, t, Pi/96.}],
    Black, Thick, Line@l[[;; , 1, 2]]}]]
 , {t, 0, 2 Pi}, {r2, 0.1, 5}, {k, 1, 2}]
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值