2011-06-15 55 views
2

我想知道如何将点连接在一起形成曲线。我在图表中有20点,并想知道如何加入他们。我试过用GeneralPath对象,但想知道是否有更好的方法?从几个点绘制曲线

+1

定义'更好'。 – 2011-06-15 15:08:24

回答

1

要建立一个曲线,而不仅仅是行,你可以使用的GeneralPath

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

它创建贝塞尔曲线的方法。但要计算控制点x1, y1, x2, y2您需要放一些数学,或者下载一些插值库。

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

+1

没有解决通过点路由曲线的关键问题。此外,“下载一些插值库”意味着什么,控制点不能像这样生成。 “放一些数学”是可以的,但是模拟贝塞尔曲线的算法需要的算法是真正的弯曲。 – 2011-06-19 18:03:16

3

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

2

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

2

贝塞尔想象基于多项式元件上的曲线:

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

^正“到电源”,而不是“异或”)。他实际上将atb替换为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 

这是三次贝塞尔的参数方程。

你想要一个20次方的Bézier? “简单地”开发(t + (1-t))^20

Pascal Triangle应该可以帮到你。