我在flex工作,虽然我认为这是一个与语言无关的问题。我试图用3点绘制曲线,使用curveTo(二次贝塞尔函数,我不相信Flex有任何其他,如果有,请纠正我!)点1和3是“节点”,有点2是拖动手柄。
我想要的不是将曲线朝点2弯曲,而是实际通过它。我已经设法通过使它成功 - 通过将(点1和点3之间的线的中点之间的距离)加倍到点2来实现这一点。
这并没有把它放在线的Apex上,只是靠近它的地方。
任何想法?
安德鲁
答案 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)
您可以使用导数来查找最大值和最小值。