贝塞尔曲线:强制 4 个点的曲线通过 3D 中的控制点 space
Bezier curve : forcing a curve of 4 points to pass through control points in 3D space
我已经阅读了线程以实现 4 点,但仅限于 2D space here .
我已经实现了 3D 的答案,但只有 3 个控制点 here
我已阅读 post 但不理解 sudo 代码或数学
任何人都可以在 java 中简化吗?我不想将曲线绘制为 2 段 3 点
三次贝塞尔曲线分量(比如 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
是控制点。
我们有四个曲线点(SrcPt
数组在),端点与贝塞尔曲线端点重合,曲线上的两个内部点应定义两个控制点P1
和P2
的贝塞尔曲线。要计算,我们必须知道-t
参数对应于SrcPt[1]
和SrcPt[2]
。让这些参数为 1/3 和 2/3(可能的问题在链接的答案中)。
所以将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)
我已经阅读了线程以实现 4 点,但仅限于 2D space here .
我已经实现了 3D 的答案,但只有 3 个控制点 here
我已阅读
任何人都可以在 java 中简化吗?我不想将曲线绘制为 2 段 3 点
三次贝塞尔曲线分量(比如 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
是控制点。
我们有四个曲线点(SrcPt
数组在P1
和P2
的贝塞尔曲线。要计算,我们必须知道-t
参数对应于SrcPt[1]
和SrcPt[2]
。让这些参数为 1/3 和 2/3(可能的问题在链接的答案中)。
所以将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)