有没有办法获得用Graphics2D绘制的椭圆的坐标?

时间:2011-04-01 04:29:03

标签: java swing graphics

我知道'手绘'一个圆的参数方程。我想知道是否有一种快速获取坐标的方法,因为那将是麻烦。对于粉红色的独角兽而言。

3 个答案:

答案 0 :(得分:2)

您可以,但您可能必须使用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并从那里跟踪像素。

答案 1 :(得分:2)

使用Ellipse2D.contains(Point)方法。你可以传递矩形rea中的所有坐标,看看它们是否在椭圆形区域。

答案 2 :(得分:1)

您可以查看drawOval()的源代码并窃取它。

或者您可以抓住您认为绘制椭圆的区域,然后绘制椭圆,然后再次抓住相同的区域,并将其与前一个区域逐个像素地进行比较。