0

我有一个可以绘制热点的 Java swing 应用程序。我允许用户绘制 Rectangle 、 Polygon 和 Circle 。

对于 Circle,我使用的是 Ellipse2D

Ellipse2D.Double ellipseDouble = new Ellipse2D.Double(x,y,width,height);
        g.draw(ellipseDouble);

上面工作正常,它确实画了一个椭圆/圆。

现在我希望在 HTML 图像地图中使用该区域时的问题。

Html Image map 不支持 Ellipse 所以我想为 Ellipse2D 使用多边形,但真的不知道如何转换它。

有谁知道我将如何将 Ellipse2D 转换为 Polygon ponits?

4

2 回答 2

3

使用FlatteningPathIterator. 参见例如http://java-sl.com/tip_flatteningpathiterator_moving_shape.html其中点在 custom 之后移动Shape

您可以获取列表Points并创建Polygon.

于 2013-06-24T10:47:22.323 回答
0

也许有人会发现这个很有用:这是矩形内的 pdfbox 椭圆或圆形(宽度=高度)绘制函数,它最初将椭圆作为多边形进行绘制。

基于点 [0 , 0] 的椭圆数学函数的代码:x^2/a^2 + y^2/b^2 = 1

private  PdfBoxPoligon draw_Ellipse_or_Circle_as_poligon_with_PDFBOX (
        PDPageContentStream content, float bottomLeftX, float bottomLeftY,
        float width, float height, boolean draw) throws IOException {
    PdfBoxPoligon result = new PdfBoxPoligon();


    float a = width/2;
    float b = height/2;

    int  points =    (int) (a*b/20);


    if (DEBUG) {
        System.out.println("points=" + points);
    }

    //top arc
    for (float x = -a; x < a; x = x + a / points) {
        result.x.add(bottomLeftX + a + x);
        float y = (float) Math.sqrt((1-(x*x)/(a*a))*(b*b));
        result.y.add(bottomLeftY+b+y);
    }

    //bottom arc
    for (float x = a; x >= -a; x = x - a / points) {
        result.x.add(bottomLeftX + a + x);
        float y = -(float) Math.sqrt((1-(x*x)/(a*a))*(b*b));
        result.y.add(bottomLeftY+b+y);
    }

    result.x.add(result.x.get(0));
    result.y.add(result.y.get(0));

    if (draw) {
        for (int i=1; i < result.x.size(); i++) {
            content.addLine(result.x.get(i-1), result.y.get(i-1), result.x.get(i), result.y.get(i));
        }
    }


    return result;
}
于 2015-02-08T09:36:25.150 回答