【问题标题】:How to Drawing a curve line(peaks) using list of x,y coordinates如何使用 x,y 坐标列表绘制曲线(峰)
【发布时间】:2015-07-20 02:18:08
【问题描述】:

我有一个打印的 x,y 点列表,显示不均匀的峰值曲线。

上面的图像是通过在一个 java paint 组件上绘制点而生成的。我使用以下方式将它们绘制在一个绘制组件上。

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

有没有更好的方法来绘制这种波浪线?我检查了一些类似的问题,通常他们需要打印曲线或峰值,但我的线并不总是峰值,因为有时它会变平,有时它们很奇怪。

【问题讨论】:

  • 可能类似于this?或者类似this
  • 这很有帮助,但是当使用线和点绘制曲线时,当我们使用'g.scale'函数放大时,它们往往会出现像素化。有没有办法平滑曲线,或者我应该为这类事情寻找一些曲线库?
  • 看看RenderingHints,但是,请记住,放大比缩小和缩小更难,而不是缩放像素,我会缩放点并简单地重新绘制它们

标签: java graphics2d curve bezier


【解决方案1】:

使用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);

这种方式也可以让您轻松转换坐标 - 当然,转换视图可能更有效。

【讨论】: