教你用GeoGebra模拟转盘,指针动或转盘动,任君选择

上一次,我们用GeoGebra做了个转盘,效果如下:

这是指针随机转动的效果,能不能做到指针不动,而转盘随机动呢?

答案是肯定的!来看看修改后的效果:

相关设置都没有改变,依旧可以选择将圆平均划分为几个区域(可划分为3到20个区域),而每个区域都可自行选择颜色(共5种颜色可选);另外,指针的起始位置、转动的速度也都可以选择。

自动转动10次按钮也是有的:

我转啊转啊

问题来啦:怎么在上一个作品的基础上进行修改?主要是修改什么呢?

  • 上一个作品是指针转动,我们将其转化成点的随机转动
  • 若要让转盘转动,其实就是让扇形转动,而扇形的动,又可以转化为点的随机转动

扇形( <圆或椭圆>, <点1>, <点2> )

注:扇形 (Sector)

这么一想,一下子找到了突破点!那么,来尝试修改吧!

扇形转动效果

我们需要n个扇形,并且让这些扇形随机转动。

于是,依照刚刚的思路:

  • 要让扇形随机转动,那么,就要先找出随机转动的点——点C。
  • 点C即为扇形指令中的点1,而点2——只需让点C旋转360° / n即可。
  • 于是,构造扇形的所有点即为:序列(旋转(C, k), k, 0°, 360°, 360° / n)

注:序列(Sequence)、旋转(Rotate)

而原作品中,构造扇形的所有点,是用l3 = 序列(描点(c, 元素(l1, k)), k, 1, n + 1);所以,我们只需输入:

l3 = 序列(旋转(C, k), k, 0°, 360°, 360° / n)

另外,需注意的是:现在做到了转盘随机动,但,指针也是跟着转。

于是,将A0重命名为A

并在指令栏分别输入:

A0 = 描点(c, 0)

u = 向量(A)

B0=如果(m<2, A0, 复制自由对象(B))

注:描点(Point)、向量(Vector)、复制自由对象(CopyFreeObject)

目前效果如下:

可以发现还有两个问题需要解决。

更正显示结果

原作品中,需要判断指针落在第几个区域,即为判断点B的路径值范围。

现在,指针为u = 向量(A),则应判断点A的路径值范围。

扇形的1,2,3标示是不正确的,下一部分再修改

而我们知道路径值为0到1。

  • 由于扇形会旋转,而点B是第1个扇形的起点;
  • 那么,需通过判断A的路径值与B的路径值的关系。
  • 不如将B的路径值记为b。
  • 于是,第1个区域的路径值为b到b+1/n?
  • 非也!假设b+1/n等于1.1,而路径值最大为1,那么,0到0.1的路径值范围也属于第1个区域。
  • 故,第(k+1)个区域(k为0,1,2……,n-1)的路径值范围为:b+k/n到b+(k+1)/n或者b+k/n-1到b+(k+1)/n-1。

于是,只需在指令栏分别输入:

b = 路径值(B)

l4 = 去除未定义对象(序列(如果(b + k / n < 路径值(A) < b + (k + 1) / n || b + k / n - 1 < 路径值(A) < b + (k + 1) / n - 1, k + 1), k, 0, n - 1))

注:路径值 (PathParameter)、去除未定义对象 (RemoveUndefined)

目前效果:


文本转动效果

文本1,2,3等是用来标示扇形,以便将下拉列表与扇形对应起来。所以扇形转动时,文本也应跟着转动。

原作品中,是在圆d上取一系列的点,用来决定文本的位置:

  • 不妨将圆d的圆心记为D,即:D = (-0.22, 0.22)
  • 而l5是文本位置的一系列起点,假设第一个起点是C'。
  • 如果C'可以和随机转动的点C一起转动,而其他起点可由C'旋转一定角度得到;
  • 由此,使得l5是一系列随着随机点C转动的点。

于是,只需输入:

D = (-0.22, 0.22)

C' = 旋转(交点(d, 线段(O, C)), 360° / n * 如果(m == 0, 1 / 3, 0.39 < b < 0.89, 2 / 3, 1 / 3), D)

l5 = 序列(旋转(C', k, D), k, 0°, 360°, 360° / n)

注:交点(Intersect)

至此,作品就完成了。

如需本作品的源文件,请评论:转盘2

举报
评论 0