翻转包含许多多边形的多边形以创建所有内容的倒置镜像

时间:2012-11-28 16:08:43

标签: java math geometry polygons

我创建了一个包含6个顶点的多边形。让我们称之为多边形外部。在外部多边形内部,我创建了较小的多边形。我想在当时垂直翻转所有这一点。

我知道外部多边形的顶点,内部多边形有一个ArrayList<Polygon>。我能够翻转外部多边形。但是我如何翻转内部多边形以保持它们在新的多边形中的相对位置?我知道外部多边形的中心和翻转版本。

更正:我需要水平翻转。 我翻转了外部多边形(三角形),我能够移动内部多边形。但距离不正确。这是我所做的一幅画面, (https://docs.google.com/drawings/d/1cPYJqxTWVu5gSHFQyHxHWSTysNzxJvNuJIwsgCQInfc/edit) https://docs.google.com/drawings/d/1cPYJqxTWVu5gSHFQyHxHWSTysNzxJvNuJIwsgCQInfc/edit

我试过了:

 for (Polygon p : polygonList) {

                    Polygon tempP = new Polygon(p.xpoints, p.ypoints, p.npoints);

                    firstPointinPolygon = new Point(p.xpoints[0], p.ypoints[0]);
                    // find frist point in the polygon 

                    float adjacent = (float) firstPointinPolygon.getX() - 400;
                    float opposite = (float) firstPointinPolygon.getY() - 400;

                    float hypotenuse = (float) Math.sqrt(opposite * opposite + adjacent * adjacent);

                    float cosine = adjacent / hypotenuse;
                    float sine = opposite / hypotenuse;

                    float endX = 400 * cosine;
                    float endY = 400 * sine;

                    float endXDelta =400-endX;
                    float endYDelta=400-endY;

                    Polygon pM = move(tempP, endX, endY);


                    polygonListMirror.add(pM);

                    tempP = new Polygon();
                }

public Polygon move(Polygon p, double xMove, double yMove) {

 // Change the values of the points for the Polygon
    for (int i = 0; i < p.xpoints.length; i++) {

        p.xpoints[i] += xMove;
        p.ypoints[i] += yMove;

    }
    return p;
}

但是没想到结果,我预料到了。我究竟做错了什么?最终结果应该像这个链接中的图片: (https://docs.google.com/drawings/d/1vYdWkCelWW1_NUypNhtmckBYfEMzCf6bMVtoB-AyPkw/edit) https://docs.google.com/drawings/d/1vYdWkCelWW1_NUypNhtmckBYfEMzCf6bMVtoB-AyPkw/edit

1 个答案:

答案 0 :(得分:0)

我认为这样的事情会这样做:

Polygon outerPolygon, oldOuterPolygon;
ArrayList<Polygon> innerPolygons;
// set up objects
for (Polygon polygon: innerPolygons)
{
  for (int i = 0; i < polygon.ypoints.length; i++)
  {
    polygon.ypoints[i] = center(outerPolygon) - polygon.ypoints[i] + center(oldOuterPolygon);
  }
}

如果您只是垂直翻转它,使得最顶部和最底部点的y坐标只是切换,两者的中心应该是相同的(因此您可以说2 *中心)

我很确定你可以用适用的Polygon中的任何一点替换center(outerPolygon)和center(oldOuterPolygon),只要它们都使用相同的点。