我正在使用 flex,尽管我认为这是一个独立于语言的问题。我正在尝试使用curveTo(二次贝塞尔函数,我不相信Flex有任何其他函数,如果有,请纠正我!)点1和3是“节点”,点1和3是“节点” 2是拖动手柄。
我想要的不是让线向点 2 弯曲,而是实际上穿过它。我设法通过侥幸实现了这个工作 - 通过将(点 1 和 3 之间的线的中点之间的距离)和点 2 加倍。
不过,这并没有把它放在线路的顶点,只是在靠近它的某个地方。
有人有什么想法吗?
安德鲁
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
使用公式计算二次贝塞尔曲线
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
我们这个公式:B'(t) = 3 (1 - t) 2 (P1 - P0) + 6 (1 - t) t (P2 - P1) + 3 t2 (P3 - P2)
您可以使用导数来找到最大值和最小值。