我正在使用多边形链来近似曲线。我想逼近曲线上所有点的曲率函数的平均值。我需要的一个曲率函数是,例如曲率的平方。计算具有不均匀分段长度的多边形链的平均曲率
我可以通过选择链上的某些点,计算这些点的曲率,对其应用函数(例如对其进行平方),然后对所计算的值进行平均来得到接近的结果。
我需要准确性和速度。我欣赏这两个 - 快速,但近似;以及准确但缓慢的解决方案。我正在使用Java,但答案不需要用Java编写 - 甚至根本不需要包含任何代码。
具有均匀段长度
如果多边形链的段都具有相等的长度多边形链,我可以计算顶点的曲率和进行平均这一点。我看到了两种方法来获得顶点的曲率。
一种方法是获取通过选定顶点,顶点之前和之后的顶点的圆。曲率是1 /半径的圆。
另一种方法是计算在所选择的顶点连接的两个区段的外部角度(以弧度为单位),然后通过一个段的长度除以它的绝对值。在下图中,φ标志着外角:
我不知道如果此方法是正确的,因为我没有数学推导,但它提供了一种类似于我已经通过实验发现结果到上面的方法。
具有非均匀段长度
多边形链不幸的是,有没有保证该段有统一的长度。
如果我尝试使用上述第一种方法,连接到较长段的顶点给出较低的曲率,即使它们明显更清晰。我尝试用所选顶点之前的一个点x单位和点之后的一个点x单位替换前一个和下一个顶点。我不知道如何设置x不变,以获得准确的结果。我试过的所有值似乎都给出了不准确的结果。
如果我尝试使用第二种方法,我不知道用什么长度来分割角度。如果我根本没有分割任何东西,我实际上得到相当好的结果来比较两条曲线并确定哪条曲线更加曲线,但我需要能够确定一个点的实际曲率。
有了这两种方法,还有一个问题,即具有较短段(其中点较密集)的部件会对平均值影响更大。
另一个可能的解决方案是忽略顶点,而是使用均匀间隔的链条上的一系列点,将它们视为新的多边形链(用直线连接点),然后计算曲率在这个新的链条上,使用我在标题为“具有均匀链段长度的多边形链”标题下提到的方法之一。然而,找到这样一个点的数组并不是微不足道的,因为我必须选择一个段的长度,并且只有在产生这些点之后,我才能看到所得到的链的长度是否可以被选定的段长度整除。
感谢您的回答。 :)但我需要一些澄清。通过“最后一个解决方案”,你的意思是找到一个新的数组* *是*等间距的?这不是一个完整的解决方案。如果我这样做,我只能将问题减少到计算具有*统一*段长度的多边形链的平均曲率。我仍然必须使用1/circle_radius或角度/长度方法。 所以,你是在暗示我找到一个新的,类似的链条,一个是确实有统一的长度的线段,然后使用角度/长度的方法,因为球近似可以给坏的结果。那是对的吗? – user2623008
@ user2623008我建议你计算出一个新的等距阵列具有良好的(但可能是昂贵的,像拉格朗日事)方法,_if只有if_你不介意,我已经试过了预计算时间 – 2016-05-31 16:48:21
这样做有卡特莫尔-Rom样条曲线,但我遇到了一些问题。如果我在Catmull-Rom样条上取两个* d *单位的点,则它们可能在用直线连接时彼此更接近,这意味着生成的多边形链可能在段长度上不均匀。如果我试图找到样条曲线上实际上间隔相等(用直线)的点,则计算起来会更昂贵,最后一点可能与原始点的最后一点不同。但是,对于一个新问题,这已经成熟了。再次感谢您的帮助。 :) – user2623008