Есть ли способ получить координаты для овала, нарисованного с помощью Graphics2D? - PullRequest
1 голос
/ 01 апреля 2011

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

Ответы [ 3 ]

2 голосов
/ 01 апреля 2011

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

Ниже приведен пример того, как вы можете использовать его.

import java.awt.Graphics2D; import java.awt.geom.AffineTransform; import java.awt.geom.Ellipse2D; import java.awt.geom.Path2D; import sun.java2d.loops.ProcessPath; public class Test { static public void main( final String ... args) { final Ellipse2D e2D = new Ellipse2D.Float(0, 0, 100, 200); final AffineTransform at = new AffineTransform(); final Path2D.Float p2D = new Path2D.Float(e2D, at); final sun.java2d.loops.ProcessPath.DrawHandler dhnd = new ProcessPath.DrawHandler(0, 0, 100, 200) { public void drawLine( final int x1, final int y1, final int x2, final int y2) { System.out.printf("Line: %d,%d -> %d,%d\n", x1, y2, x2, y2); } public void drawPixel( final int x, final int y) { System.out.printf("Pixel: %d,%d\n", x, y); } public void drawScanline( final int x1, final int x2, final int y) { System.out.printf("ScanLine: %d,%d -> %d,%d\n", x1, y, x2, y); } }; sun.java2d.loops.ProcessPath.drawPath(dhnd, p2D, 0, 0); } }

Код распечатывает, какой пиксель нарисован и какая линия нарисована (вычисление пикселей линии не так сложно).

Как видите, этот код не требует кражи кода рисования.Просто слушай, что рисуется.Так что это может быть хорошо.

И если лицензия действительно является проблемой, вы можете использовать PathIterator.Eclipse2D может предоставить вам PathIterator, который вы можете использовать, и отслеживать пиксель оттуда.

2 голосов
/ 01 апреля 2011

Использовать Ellipse2D.contains(Point) метод. Вы можете передать все координаты в прямоугольной области и посмотреть, находятся ли они в овальной области.

1 голос
/ 01 апреля 2011

Вы можете посмотреть исходный код для drawOval () и украсть его.

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

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...