问题描述
我已阅读该线程以实现 4 点,但仅限于 2D 空间 here 。
我已经实现了 3D 的答案,但只针对 3 个控制点 here
任何人都可以在java中简化吗?我不想将曲线绘制为 3 点的 2 段
解决方法
三次贝塞尔曲线分量的公式(比如 X):
X(t) = P0.X*(1-t)^3 + 3*P1.X*(1-t)^2*t + 3*P2.X*(1-t)*t^2 + P3.X*t^3
其中 P0
和 P3
是终点,P1
和 P2
是控制点。
我们有四个曲线点(that answer中的SrcPt
数组),端点与贝塞尔端点重合,曲线上的两个内部点应定义两个控制点P1
和{{ 1}} 的贝塞尔曲线。为了计算,我们必须知道 - P2
参数对应于 t
和 SrcPt[1]
。让这些参数为 1/3 和 2/3(可能的问题在链接答案中)。
因此将 SrcPt[2]
和 t=1/3
代入上面的公式:
t=2/3
并针对未知的 SrcPt[1].X = SrcPt[0].X*(1-1/3)^3 + 3*P1.X*(1-1/3)^2*1/3 +
3*P2.X*(1-1/3)*1/3^2 + SrcPt[3].X*1/3^3
SrcPt[2].X = SrcPt[0].X*(1-2/3)^3 + 3*P1.X*(1-2/3)^2*2/3 +
3*P2.X*(1-2/3)*(2/3)^2 + SrcPt[3].X*2/3)^3
和 P1.X
求解此系统。所以我们将拥有所有需要的点来描述贝塞尔曲线。链接答案实现了解决方案。
示例 - 更改相同内部点的 P2.X
值如何影响曲线: