Geometry 求贝塞尔曲线的顶点

Geometry 求贝塞尔曲线的顶点,geometry,bezier,Geometry,Bezier,我在flex中工作,尽管我认为这是一个与语言无关的问题。我试图用3个点绘制一条曲线,使用curveTo(一个二次贝塞尔函数,我不相信Flex还有其他函数,如果有,请纠正我!)点1和3是“节点”,点2是一个拖动手柄 我想要的不是直线向点2弯曲,而是事实上通过它。我通过侥幸成功地将(点1和点3之间的直线中点之间的距离)和点2的距离增加了一倍 这并没有把它放在这条线的顶端,只是放在靠近它的地方 有人有什么想法吗 Andrew使用以下公式计算二次贝塞尔曲线 B(t) = (1-t)(1-t)*P0 +

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

我想要的不是直线向点2弯曲,而是事实上通过它。我通过侥幸成功地将(点1和点3之间的直线中点之间的距离)和点2的距离增加了一倍

这并没有把它放在这条线的顶端,只是放在靠近它的地方

有人有什么想法吗


Andrew

使用以下公式计算二次贝塞尔曲线

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,使其等于
您希望顶点为,并从公式中提取P1

贝塞尔样条线不会通过其控制点,但会通过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

虽然这是一个三次样条曲线而不是二次样条曲线。你可以试着用这个公式:
B'(t)=3(1-t)2(P1-P0)+6(1-t)t(P2-P1)+3t2(P3-P2)


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

根据定义,贝塞尔样条曲线不通过其控制点(我猜退化情况除外)。有三次样条曲线,通过设计,包括控制点(Catmull Rom),但我对Flex一无所知,所以我不能说是否以任何方式支持它们。它们一点也不难实施;我真的很笨,在过去我已经成功地编写了好几次代码。听起来你真的想为拖动手柄选择一个位置,以便曲线通过你选择的点。对你的点是任意的还是以某种方式受到限制的?例如,点2实际上在1到3的直线的平分线上?多亏了这一点,我已经看过了公式。问题在于顶点并不总是在t=0.5。