Отражение многоугольника, содержащего много полигонов, для создания перевернутого зеркала всего.

Я создал многоугольник с 6 вершинами. Давайте назовем это внешним полигоном. Внутри внешнего полигона я создал меньшие полигоны. Я хочу перевернуть все это по вертикали в одну точку за раз.

Я знаю вершины внешнего многоугольника, и у меня есть ArrayList<Polygon> для внутренних многоугольников. Мне удалось перевернуть внешний многоугольник. но как перевернуть внутренние полигоны, сохранив их относительное положение в новом? Я знаю центр внешнего многоугольника и перевернутую версию.

исправление: мне нужно было перевернуть по горизонтали. Я перевернул внешний многоугольник (форма треугольника) и смог переместить внутренние многоугольники. но расстояние неверное. это изображение того, что я сделал, (https://docs.google.com/drawings/d/1cPYJqxTWVu5gSHFQyHxHWSTysNzxJvNuJIwsgCQInfc/edit) https://docs.google.com/drawings/d/1cPYJqxTWVu5gSHFQyHxHWSTysNzxJvNuJIwsgedit

Я пробовал это:

 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


person ashsha91    schedule 28.11.2012    source источник
comment
Когда вы говорите флип, вы имеете в виду отражение вокруг горизонтальной оси или поворот на 180 градусов?   -  person eh9    schedule 29.11.2012


Ответы (1)


Я думаю, что-то вроде этого сделает это:

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 * центр).

Я почти уверен, что вы можете заменить center(outerPolygon) и center(oldOuterPolygon) любой точкой из применимого многоугольника, если оба используют одну и ту же точку.

person Bernhard Barker    schedule 29.11.2012