从几个点绘制曲线

时间:2011-06-15 14:27:10

标签: java swing bezier

我想知道如何将点连接在一起形成一条曲线。我在图表中有20分,想知道如何加入他们。我尝试使用GeneralPath对象,但想知道是否有更好的方法?

5 个答案:

答案 0 :(得分:3)

GeneralPath当然是最直截了当的。创建您的路径,为您的第一个点调用moveTo,然后为每个后续点调用lineTo。然后将其绘制到Graphics2D对象。

答案 1 :(得分:3)

听起来你需要一个Catmull-Rom曲线。有关详细信息,请参阅http://www.mvps.org/directx/articles/catmull/;有关实施,请参阅http://johnsogg.blogspot.com/2010/01/cardinal-splines-and-catmull-rom.html

答案 2 :(得分:2)

GeneralPath是一个很好的方法,应该处理你的要求,除非你要留下别的东西。 Path2D是一个可以更精确的新类,但如果你不需要那么精确,那么GeneralPath就没有优势。

答案 3 :(得分:2)

Bézier想象出一条基于多项式元素的曲线:

(a + b)^3 = a^3 + 3a^2*b + 3a*b^2 + b^3

^是“权力”而非“异或”)。他实际上将a替换为t而将b替换为1-t。这样公式就是(t + (1 - t))^3(是的,它等于1)。

此时,我们有公式

t^3 + 3*t^2*(1-t) + 3*t*(1-t)^2 + (1-t)^3

共有4个部分。选择4分。

(x1,y1), (x2,y2), (x3,y3), (x4,y4)

现在,创建参数方程,将公式的每个部分乘以坐标,如下所示:

x(t) = t^3*x1 + 3*t^2*(1-t)*x2 + 3*t*(1-t)^2*x3 + (1-t)^3*x4
y(t) = t^3*y1 + 3*t^2*(1-t)*y2 + 3*t*(1-t)^2*y3 + (1-t)^3*y4

这是立方Bézier的参数方程。

你想要一个20级力量Bézier? “简单地”发展(t + (1-t))^20

Pascal Triangle可以帮到你。

答案 4 :(得分:1)

要构建曲线,而不仅仅是线条,您可以使用GeneralPath

的方法
public void curveTo(float x1, float y1, float x2, float y2, float x3, float y3)

创建贝塞尔曲线。但是要计算控制点x1, y1, x2, y2,你需要输入一些数学,或下载一些插值库。

你也可以查看this question,它有一个实现某些插值算法的源代码链接。