0

我已经阅读了该线程以使这发生在 4 点上,但仅在此处的 2D 空间中。

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

我读过这篇文章,但不理解 sudo 代码或数学

任何人都可以在java中简化吗?我不想将曲线绘制为 3 点的 2 段

4

2 回答 2

1

三次贝塞尔曲线分量的公式(比如 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是端点,P1anP2是控制点。

我们有四个曲线点(该答案SrcPt中的数组),端点与贝塞尔端点重合,曲线上的两个内部点应定义贝塞尔曲线的两个控制点。要计算,我们必须知道 - 哪些参数对应于和。让这些参数为 1/3 和 2/3(可能的问题在链接的答案中)。P1P2tSrcPt[1]SrcPt[2]

所以代t=1/3t=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相同内部点的更改值如何影响曲线:

在此处输入图像描述

于 2020-12-22T16:39:37.877 回答
0

计算点后绘制三次曲线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 )

于 2022-02-06T12:16:36.270 回答