0

6つの頂点を持つポリゴンを作成しました。これをポリゴンの外側と呼びましょう。外側のポリゴンの内側に、小さなポリゴンを作成しました。一度に1点ずつ縦にひっくり返したいです。

私は外側のポリゴンの頂点を知っておりArrayList<Polygon>、内側のポリゴン用にを持っています。外側のポリゴンを反転させることができました。しかし、新しいポリゴンの相対位置を維持しながら、内側のポリゴンを反転するにはどうすればよいですか?外側のポリゴンの中心と反転バージョンを知っています。

訂正:私は水平に反転する必要がありました。外側のポリゴン(三角形)を反転させて、内側のポリゴンを動かすことができました。しかし、距離は正しくありません。これは私が行ったことの写真です(https://docs.google.com/drawings/d/1cPYJqxTWVu5gSHFQyHxHWSTysNzxJvNuJIwsgCQInfc/edit)https://docs.google.com/drawings/d/1cPYJqxTWVu5gSHFQyHxHWST

私はこれを試しました:

 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_NUypNhtmckBYfEMzCf6b /編集

4

1 に答える 1

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*center と言えます)。

center(outerPolygon) と center(oldOuterPolygon) を、両方が同じポイントを使用している限り、該当する Polygon の任意のポイントに置き換えることができると確信しています。

于 2012-11-29T11:33:42.410 に答える