找到贝塞尔曲线的顶点

时间:2010-07-05 16:44:45

标签: geometry bezier

我在flex工作,虽然我认为这是一个与语言无关的问题。我试图用3点绘制曲线,使用curveTo(二次贝塞尔函数,我不相信Flex有任何其他,如果有,请纠正我!)点1和3是“节点”,有点2是拖动手柄。

我想要的不是将曲线朝点2弯曲,而是实际通过它。我已经设法通过使它成功 - 通过将(点1和点3之间的线的中点之间的距离)加倍到点2来实现这一点。

这并没有把它放在线的Apex上,只是靠近它的地方。

任何想法?

安德鲁

3 个答案:

答案 0 :(得分:0)

使用公式

计算二次贝塞尔曲线
B(t) = (1-t)(1-t)*P0 + 2(1-t)t*P1 + t*t*P2

其中P0,P1和P2是您指定的3个点。曲线从P0开始,以P2结束 t的范围从0到1 应在t = 0.5时达到顶点 所以尝试将P0,P2和t = 0.5插入公式设置它等于其中的点 你想要apex并从公式中提取P1

答案 1 :(得分:0)

Bezier样条曲线不会通过其控制点,但Catmull Rom样条曲线将会通过。

B(t) = ((2*P1)+(-P0+P2)*t + (2*P0-5*P1+4*P2-P3)*t*t + (-P0+3*P1-3*P2+P3)*t*t*t )) / 2

虽然这是一个三次样条而不是二次样条。您可以尝试制作P1=P2

答案 2 :(得分:0)

我们这个公式:B'(t) = 3 (1 - t) 2 (P1 - P0) + 6 (1 - t) t (P2 - P1) + 3 t2 (P3 - P2)

您可以使用导数来查找最大值和最小值。