环形跑道与折线动点交互动画

返回首页

首页地址https://geogebra.kz16.top/

预览效果

所有代码

环形跑道所有GeoGebra代码如下

A=(0,0)
B=(2,0)
C=(2,1)
D=(0,1)
f=Segment(A,B)
g=Segment(C,D)
c:Semicircle(C,B)
d:Semicircle(A,D)
s = {f,c,g,d}
LN = 0..length(s)
Lx = zip(Sum(s,k), k, LN)
L = dataFunction(Lx, LN/length(s))
setvisibleInView(L,1,false)
t = slider(0, Lx(-1), 0.01)
P = point(s, L(t)) 

如果想让它循环跑,只需要稍微修改下t就行了
也就是最后两行代码改成

t = slider(0, 3*Lx(-1), 0.01)
P = point(s, L(mod(t,Lx(-1)))) 

折线动点问题完全可以类似处理,甚至可以类似处理自定义速度和某特定点处停留

问题分析

环形跑道与折线动点的数学本质是:
求相关弧长参数方程

因此可把这类问题当成一个简单的数学问题,数学上,应该不难得到两段折线的弧长参数方程。

例如线段ABAB的弧长参数方程可以为

OA+sABAB\overrightarrow{OA}+\dfrac{s\overrightarrow{AB}}{|\overrightarrow{AB}|}, 其中s[0,AB]s\in[0,|\overrightarrow{AB}|]为弧长参数.

对应的GeoGebra代码

curve(A + s/abs(AB)*(B-A), s, 0, abs(AB))

同理不难得到折线段ABCABC的关于ss的弧长参数方程:

{OA+sABAB,    s[0,AB]OB+(sAB)BCBC,s[AB,BC]\begin{cases} \overrightarrow{OA}+\dfrac{s\overrightarrow{AB}}{|\overrightarrow{AB}|},\;\;s\in[0,|\overrightarrow{AB}|]\\[2em] \overrightarrow{OB}+\dfrac{(s-|\overrightarrow{AB}|)\overrightarrow{BC}}{|\overrightarrow{BC}|},\\[2em] \qquad s\in[|\overrightarrow{AB}|,|\overrightarrow{BC}|] \end{cases}

根据数学公式不难理解对应的GeoGebra代码,

curve(if(s<abs(AB), 
 A + s/abs(AB)*(B-A), 
 B + (s-abs(AB))/abs(BC)*(C-B)), 
 s, 0, abs(AB)+abs(BC))

类似,对于线段与圆弧的组合,参数方程也不难写出来。

但是对于多段折线问题,尽管能写出来,但毕竟麻烦,因此可以考虑借助画图软件完成。

GeoGebra折线参数机制解析

GeoGebra构造线段ABAB,并且取名字为ff,代码为

f = segment(A,B)

它有个隐藏的属性,指令point(f,0)表示AA点,指令point(f,1)表示BB点, 指令point(f,0.5)表示ABAB中点,看到这三个例子应该不难猜出point的第二个数字参数表示点在线段的位置。总之。这里的第二个数字参数有点像定比分点的系数。

假设f,g,h是3段首尾拼接的线段或圆弧(可以选择是否封闭),把这四段用列表放到一起代码为

s = {f,g,h}

它也有个隐藏的属性,我们都知道33段折线有44个顶点,指令point(s,0)表示第一个顶点,指令point(s,1/3)表示第22个顶点,point(s,2/3)表示第33个顶点,指令point(s,1)表示第最后一个顶点也是这里的第44个顶点。总之就是一句话,它不是一个弧长参数方程,但是它比较接近弧长参数方程,它有两个特点:

因此只需要想个办法,把参数的完全均分机制变成按弧长分配。

解决方案

为了方便解析,我们把抽象的字母数字实例化,假设f,g,h的长度依次为4,5,6,这三段折线的44个顶点依次为A,B,C,DA,B,C,D,我们的目的是找到弧长参数方程LL ,使得

我们知道GeoGebra的内部机制已经帮助我们求得

point(s,0)--->A
point(s,1/3)--->B
point(s,2/3)--->C
point(s,1)--->D

因此需要找到一个折线函数建立好0,4,9,150,1/3,2/3,1两者间的一一对应关系,也就是只找个简单的分段线性插值函数,问题自然就迎刃而解。

其实,GeoGebra内部恰好有一个专门处理这个问题的指令,DataFunction
这个指令实现功能的对应的数学术语是分段线性插值,输入指令

DataFunction({1,2,3},{0,2,1})

会得到一个过点(1,0),(2,2),(3,1)(1,0),(2,2),(3,1)的折线函数。

于是只剩下最后一个问题,怎么通过{4,5,6}得到{0,4,9,15}?也就是给出一个数列,求它前nn项和构成的数列。这个问题在GeoGebra可以通过循环与求和完成。

在GeoGebra中,如果s={4,5,6}Sum(s,2)=4+5=9Sum(s,3)=4+5+6=15,因此外层来个循环就可以得到最终结果

s={4,5,6}
zip(Sum(s,k), k, 0..3) 
# 结果是{0,4,9,15}

经过上面的分析,我们得到所有代码,假设f,g,h是三条连在一起的线段,则下面的GeoGebra代码可以得到最终结果

s = {f,g,h}
LN = 0..3
Lx = zip(Sum(s,k), k, LN)
L = dataFunction(Lx, LN/3)
t = slider(0, Lx(-1), 0.01)
point(s, L(t)) 

上面代码中的两个数字3都表示折线的段数,它也可以替换成length(s)

DataFunction的替代

DataFunction用于线性插值,好用是好用,但不方便做成工具,因此可以选择自定义,

利用傅里叶级数原理或拉格朗日插值原理,可以先做出好几个具有相同形式的基函数,最后做叠加。GeoGebra代码如下:

Lx = {1,2,3,4}
Ly = {2,1,5,3}
L=Sum(if(Lx(k)<x<Lx(k+1), 
 Ly(k)+(x-Lx(k))*(Ly(k)-Ly(k+1))
 /(Lx(k)-Lx(k+1)),0), 
 k, 1, length(Lx)-1))

对于确定的Lx = {1,2,3,4}还可以做优化

Ly = {2,1,5,3}
L=Sum(if(k==floor(x), 
 Ly(k)+(x-k)*(Ly(k+1)-Ly(k)),0),
 k, 1, length(Ly)-1))

拉格朗日插值

A(1,2)B(3,5)A(1,2),B(3,5)两点的拉格朗日线性插值函数为

f(x)=2x313+5x131f(x)=2\cdot\dfrac{x-3}{1-3}+5\cdot\dfrac{x-1}{3-1}

A(1,2)B(3,5)C(4,6)A(1,2),B(3,5), C(4,6)三点的拉格朗日二次插值函数为

f(x)=2(x3)(x4)(13)(14)+5(x1)(x4)(31)(34)+6(x1)(x3)(41)(43)f(x)=2\cdot\dfrac{(x-3)(x-4)}{(1-3)(1-4)} +5\cdot\dfrac{(x-1)(x-4)}{(3-1)(3-4)} +6\cdot\dfrac{(x-1)(x-3)}{(4-1)(4-3)}

更多关于拉格朗日插值可参考
https://kz16.top/na/interp/

返回首页

首页地址https://geogebra.kz16.top/


本文来源:
https://kz16.top/geogebra/pd.html
作者:Zhou Bingzhen
欢迎非商业转载,转载请说明来源

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