我已经阅读了该线程以使这发生在 4 点上,但仅在此处的 2D 空间中。
我已经实现了 3D 的答案,但这里只针对 3 个控制点
我读过这篇文章,但不理解 sudo 代码或数学
任何人都可以在java中简化吗?我不想将曲线绘制为 3 点的 2 段
我已经阅读了该线程以使这发生在 4 点上,但仅在此处的 2D 空间中。
我已经实现了 3D 的答案,但这里只针对 3 个控制点
我读过这篇文章,但不理解 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
其中P0
和P3
是端点,P1
anP2
是控制点。
我们有四个曲线点(该答案SrcPt
中的数组),端点与贝塞尔端点重合,曲线上的两个内部点应定义贝塞尔曲线的两个控制点。要计算,我们必须知道 - 哪些参数对应于和。让这些参数为 1/3 和 2/3(可能的问题在链接的答案中)。P1
P2
t
SrcPt[1]
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
。所以我们将拥有描述贝塞尔曲线所需的所有点。链接答案实现了解决方案。
示例 -t
相同内部点的更改值如何影响曲线:
计算点后绘制三次曲线p[x][y]
:
public void paint(Graphics g) {
Graphics2D g2d = (Graphics2D) g;
CubicCurve2D cubcurve = new CubicCurve2D.Float(p[0][0], p[0][1], p[1][0], p[1][1], p[2][0], p[2][1], p[3][0], p[3][0]);
g2d.draw(cubcurve);
}
(回复:http ://www.java2s.com/Tutorial/Java/0261__2D-Graphics/CubicCurve2DFloat.htm )