现有答案没有考虑端点是任意的(而不是给定的)。因此,在测量曲线的直线度时,使用端点(例如,计算预期的长度,角度,位置)是没有意义的。一个简单的例子是两端弯曲的直线。如果我们使用距曲线的距离和端点之间的直线的距离进行测量,这将非常大,因为绘制的直线与端点之间的直线偏移。
我们如何知道曲线的笔直度?假设曲线足够平滑,我们想知道曲线的切线平均变化了多少。对于一条线,它将为零(因为切线是常数)。
如果我们将时间t的位置设为(x(t),y(t)),则切线为(Dx(t),Dy(t)),其中Dx(t)是时间t处x的导数(该站点似乎缺少TeX支持)。如果未通过弧长对曲线进行参数化,则通过除以||(Dx(t),Dy(t))||进行归一化。因此,我们在时间t处具有与曲线相切的单位矢量(或角度)。因此,角度为a(t)=(Dx(t),Dy(t))/ ||(Dx(t),Dy(t))||
然后,我们对沿曲线积分的|| Da(t)|| ^ 2感兴趣。
鉴于我们最有可能具有离散的数据点而不是曲线,因此必须使用有限差分来近似导数。因此,Da(t)变为(a(t+h)-a(t))/h
。并且,a(t)变为((x(t+h)-x(t))/h,(y(t+h)-y(t))/h)/||((x(t+h)-x(t))/h,(y(t+h)-y(t))/h)||
。然后,我们通过对h||Da(t)||^2
所有数据点求和并可能通过曲线的长度进行归一化来获得S。我们很可能使用h=1
,但这实际上只是一个任意比例因子。
重申一下,对于一条线,S将为零,并且偏离一条线时,S越大。要转换为所需的格式,请使用1/(1+S)
。假定比例尺是任意的,则可以将S乘以某个正数(或以其他方式对其进行变换,例如使用bS ^ c代替S)来调整某些曲线的笔直度。