我想知道如何将点连接在一起形成一条曲线。我在图表中有20分,想知道如何加入他们。我尝试使用GeneralPath对象,但想知道是否有更好的方法?
答案 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,它有一个实现某些插值算法的源代码链接。