用Bezier平滑粗多边形的算法

时间:2012-11-10 06:32:04

标签: c++ c polygon bezier

我正在制作一个地图程序,我有轮廓跟踪的粗略轮廓,现在我想用Bezier来平滑这些轮廓。 我不知道如何使终点平稳。你知道,我必须将开始和结束混合以具有相同的切线。我找到了几个算法,但没有一个处理这个问题。 我知道这可以通过差异来解决,但我不是那个东西。所以我希望有人可以给我一个明显的代码演示的关键部分。

1 个答案:

答案 0 :(得分:0)

我不了解你的申请,但我会回答如何匹配两条贝塞尔曲线: 如果你有两个带控制点(A1,A2,..,AN-1,AN)和(B1,B2,..,BN-1,BN)的贝塞尔曲线,并希望匹配A的结尾和B,首先你必须确保AN = B1(例如通过设置为(AN + B1)/ 2)。

为了使其切向连续AN-1,(AN / B1),B2必须在一条线上。 线的方向可以通过平均A的最后一段和B的第一段的方向来找到:d =((AN-AN-1)+(B2-AN))/ 2。

在2D中: 通过分别找到线(AN,d)与线(AN-2,AN-1)和(B2,B3)的交点来重新定位AN-1和B2。 对于3D,您可能需要将线与由(B2,B3)构造的平面和通过计算(B2-B3)和d的叉积而得到的第三个点相交。