Bezier 曲线:强制 4 个点的曲线通过 3D 空间中的控制点

问题描述

我已阅读该线程以实现 4 点,但仅限于 2D 空间 here

我已经实现了 3D 的答案,但只针对 3 个控制点 here

我已阅读 this 帖子,但不了解 sudo 代码或数学

任何人都可以在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

其中 P0P3 是终点,P1P2 是控制点。

我们有四个曲线点(that answer中的SrcPt数组),端点与贝塞尔端点重合,曲线上的两个内部点应定义两个控制点P1和{{ 1}} 的贝塞尔曲线。为了计算,我们必须知道 - P2 参数对应于 tSrcPt[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 值如何影响曲线:

enter image description here

相关问答

Selenium Web驱动程序和Java。元素在(x,y)点处不可单击。其...
Python-如何使用点“。” 访问字典成员?
Java 字符串是不可变的。到底是什么意思?
Java中的“ final”关键字如何工作?(我仍然可以修改对象。...
“loop:”在Java代码中。这是什么,为什么要编译?
java.lang.ClassNotFoundException:sun.jdbc.odbc.JdbcOdbc...