2015-07-20 146 views
3

我有一个打印的x,y点列表,显示不均匀的峰值曲线。如何使用x,y坐标列表绘制曲线(峰)

enter image description here

通过只是画上一个java涂料成分的点处生成的上述图像。我用下面的方式将它们绘制在一个绘画组件上。

g.drawline(pointX,pointY,pointX,pointY) 

有没有更好的方法来画这样的波浪线?我检查了一些类似的问题,通常他们需要打印一条曲线或峰值,但是我的线并不总是一个高峰,因为有时候它的平面和其他奇怪的时候。

+2

也许类似[this](http://stackoverflow.com/questions/15864441/how-to-make-a-line-curve-through-points)?或者像[this](https://docs.oracle.com/javase/tutorial/2d/geometry/primitives.html)? – MadProgrammer

+0

这很有帮助,但是当使用直线和点绘制曲线时,当我们使用'g.scale'函数放大时,它们倾向于像素化。是否有方法来平滑曲线,或者我应该为这些类型的东西寻找一些曲线库? – Balaram26

+1

看看['RenderingHints'(https://docs.oracle.com/javase/tutorial/2d/advanced/quality.html),但是,请记住,放大是很难再缩放缩放和向下,而不是像素,我会缩放点并重新绘制它们 – MadProgrammer

回答

2

使用java.awt.Graphics绘制多段线的最简单方法是使用drawPolyline方法。它要求您将x和y坐标存储在单独的int[]数组中,但比分别绘制每个线段要快得多且清晰。

如果你需要浮点数坐标,最好的办法是使用一个Shape对象与Graphics2D。不幸的是,Java的似乎并没有提供一个折线Shape实现,但你可以很容易地使用Path2D

Graphics2D graphics = /* your graphics object */; 
double[] x = /* x coordinates of polyline */; 
double[] y = /* y coordinates of polyline */; 

Path2D polyline = new Path2D.Double(); 
polyline.moveTo(x[0], y[0]); 
for (int i = 1; i < x.length; i++) { 
    polyline.lineTo(x[i], y[i]); 
} 

graphics.draw(polyline); 

这种方式可以让你轻松地将您的坐标,太 - 但是,它可能是更有效地改造查看,当然。