沿曲线

时间:2017-04-04 14:54:45

标签: javascript geometry bezier curve

我正在使用这个等式计算沿二次曲线的一系列点数:

// Returns a point on a quadratic bezier curve with Robert Penner's optimization of the standard equation
result.x = sx + t * (2 * (1 - t) * (cx - sx) + t * (ex - sx));
result.y = sy + t * (2 * (1 - t) * (cy - sy) + t * (ey - sy));

可悲的是,这些点分布不均匀,您可以在下面的虚线渲染中看到。这些点在曲线的中间更密集,并且在边缘附近进一步间隔开。如何沿二次贝塞尔曲线计算均匀分布的点集?

请注意我正在使用它来渲染虚线,因此在MATLAB中使用缓慢的解决方案或其他方法都行不通。我需要一个适合渲染器的快速解决方案。这不是用于研究或一次性计算!

dashed

编辑:我不是问如何完成上述操作。以上就是我的渲染!我已经知道如何估计贝塞尔的长度,计算点的数量等等。我需要的是一个更好的贝塞尔点插值算法,因为我计算的点不均匀地沿着曲线!

2 个答案:

答案 0 :(得分:3)

您希望生成二次贝塞尔曲线的等距(通过弧长)细分。

所以你需要细分程序和function for calculation of curve length

查找整条曲线的长度(L),估算所需的细分数量(N),然后生成细分点,调整t参数以获取长度约为{的贝塞尔曲线段{1}}

示例:您发现L = 100并且希望N = 4个段。得到t = 1/2,将曲线细分为两部分,得到第一部分的长度。如果长度> 50,再次减小t和细分曲线。重复(使用二分搜索)直到长度值接近50.记住t值并执行相同的过程以获得长度= 25的段,用于曲线的第一半和第二半。

答案 1 :(得分:1)

这种方法使用THREE.js库,这不在OP的问题中,但是如果只是看它们如何接近它可能会有用:

*[local-name()="id"]