齿轮曲线,一种源自于Spirograph曲线的几何图形,旨在简化并统一这些曲线,同时克服许多限制和约束。目标是生成和绘制更复杂且引人入胜的曲线。本文面向初级和中级编程爱好者,提供了网页和R脚本,用以展示齿轮曲线的不同方面。
Spirograph是一种几何绘图玩具,能够产生数学上的roulette曲线,这些曲线在技术上被称为hypotrochoids和epitrochoids。网络上有大量关于Spirograph及其相关曲线的文章。除了[1],还有许多在线动画器和生成器,以及许多用任何支持图形的语言实现的应用程序。
根据[1],描述笔尖(附着在齿轮上)轨迹的数学方程(以单一参数t为变量)如下:
x = (R-r)*cos(t) + rho*cos(((R-r)/r)*t),
y = (R-r)*sin(t) - rho*sin(((R-r)/r)*t),
其中:
需要注意的是,这些不是极坐标方程,因为角度t(theta)不是极坐标角度[1]。尽管它们看起来与[2,3]中的极坐标方程相似。
还应该提到的是,一些作者使用了略有不同的公式,例如:计算并使用齿轮的齿比;添加起始角度phi(即相位);计算每完整圆圈的循环数;添加一些其他系数。所有这些版本都是完全正确的,因为它们都试图精确地绘制出与“几何绘图玩具”产生的曲线相似的曲线。
齿轮曲线使用的方程与上面显示的非常相似,但这些方程被修改和统一,以克服一些限制,现在更加灵活:
因此,齿轮曲线方程版本如下:
x = R0*cos(T0*t) + R1*cos(T1*t),
y = R0*sin(T0*t) - R1*sin(T1*t),
其中:
使用这些方程的JavaScript片段(几乎与下面显示的相同)包含在本项目中使用的每个页面中。
// global vars
var cvs, ctx, cw;
// canvas, context, width
var n=2000, psc=1;
// dots/segments, plot scale
var pi=Math.PI, pi2=pi*2;
// Plotting Gearographic curves (using 2 gears)
// Coefficients related to:
// R0,T0 - prime radius and theta scale; R1,T1 - 2nd radius and theta scale.
function pGG2g(R0, T0, R1, T1){
var it=pi2/n, t;
// it - initial theta, t - theta
// Plot loop
ctx.beginPath();
for (var i=0; i<=n; i++) {
t=i*it;
x = (R0*Math.cos(T0*t) + R1*Math.cos(T1*t))*psc;
y = (R0*Math.sin(T0*t) - R1*Math.sin(T1*t))*psc;
ctx.lineTo(x, y);
// if(i<5) {console.log("t,x,y:", t, "/",x, "/", y)}
}
ctx.stroke();
}
"Demo 1: 9 Gearographic Curves (2 gears)"网页(GG2gDemo1.html)包含在zip文件中。它生成并显示9个简单的循环齿轮曲线(2个齿轮)绘制在一张图片中。
"Demo 2: Gearographic Curves (2 gears)"网页(GG2gDemo2.html)包含在zip文件中。它生成并显示几乎3打齿轮曲线(2个齿轮)。所需要做的就是点击"Plot next"按钮。
"Gearographic Curve Generator (2 gears)"网页(GG2gGenerator.html)包含在zip文件中,并在图3中部分显示。
首先,让强调:所有的目标都实现了!也就是说,已经定义了一组新的齿轮曲线,这与众所周知的Spirograph曲线非常相似,但同时它产生了以前不可能用塑料玩具绘制的新曲线。
应该提到的是,有些Spirograph曲线不能通过齿轮曲线来复制,这是修改方程和绘制方法的可理解结果。