2015-07-20 6 views
3

У меня есть список x, y точек, которые напечатаны, отображают неровную линию кривой кривой.Как рисовать линию кривой (пики), используя список координат x, y

enter image description here

изображение было генерируется только картина точек на компоненте Java краски. Я использовал следующий способ, чтобы нарисовать их на компоненте краски.

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

Есть ли лучшие способы рисовать такую ​​волновую линию? Я проверил некоторые из подобных вопросов, часто им нужно распечатать кривую или пик, но моя линия не всегда является пиком, как несколько раз его квартиры, а в других случаях они странные.

+2

Возможно, что-то вроде [этого] (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». Есть ли способы сгладить кривые или я должен искать некоторую кривую lib для такого рода вещей? – 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); 

Этот способ позволяет легко преобразовывать координаты вы тоже - однако, это может быть более эффективным преобразование взгляд, конечно.

Смежные вопросы