如何使用 x,y 坐标列表绘制曲线(峰值)

3

我有一串x,y坐标点,打印出来会显示一个不平滑的峰形曲线。

enter image description here

上述图片是通过在Java绘图组件上直接绘制这些点而生成的。我使用了以下方法在画板上绘制它们:

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

有没有更好的方法来画这样的波浪线?我查看了一些类似的问题,通常它们需要打印曲线或峰值,但我的线条并不总是像峰值那样,有时会变平,有时则很奇特。


2
也许像这个(https://dev59.com/wmUo5IYBdhLWcg3wpg7N)?或者像这个(https://docs.oracle.com/javase/tutorial/2d/geometry/primitives.html)? - MadProgrammer
这很有帮助,但是当使用线条和点来绘制曲线时,使用“g.scale”函数进行缩放时,它们往往会出现像素化。是否有平滑曲线的方法,或者我应该寻找一些曲线库来处理这些事情? - Balaram26
1
请查看RenderingHints,但是请记住,放大比缩小困难,而且我会缩放点而不是像素,并简单地重新绘制它们。 - MadProgrammer
1个回答

2
使用java.awt.Graphics绘制折线的最简单方法是使用drawPolyline方法。它要求您将x和y坐标存储在单独的int[]数组中,但比逐个绘制每个线段要快得多且更清晰。
如果您需要浮点坐标,则最好使用带有Graphics2DShape对象。不幸的是,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);

这种方法也可以轻松地转换您的坐标——不过,当然,转换视图可能更加高效。


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接