0

私は OpenGL でアプリケーションを書いています (この問題がそれに関連しているとは思いませんが)。回転が必要な 2D ポイント セット データがあります。後で 3D に投影されます。

この式を使用して回転を適用します。

x' = x cos f - y sin f
y' = y cos f + x sin f

ここで、「f」は角度です。ポイント セットを回転すると、結果が歪んでしまいます。角度によって影響の程度が異なります。

説明するのが難しいので、写真があります。赤いものは単純なジオメトリです。2D ポイント セットは、周囲に表示される白いポリラインの頂点です。最初の図は歪みのないポイントセットを示し、2 番目の図は回転後のポイントセットを示しています。回転に伴って発生するのはスキューだけではありません。場合によっては、変位も発生しているように見えます。

ここに画像の説明を入力

ここに画像の説明を入力

コード自体は簡単です:

double cosTheta = cos(2.4);
double sinTheta = sin(2.4);
CalcSimplePolyCentroid(listHullVx,xlate);
for(size_t j=0; j < listHullVx.size(); j++)   {

    // translate
    listHullVx[j] = listHullVx[j] - xlate;

    // rotate
    double xPrev = listHullVx[j].x;
    double yPrev = listHullVx[j].y;
    listHullVx[j].x = ((xPrev*cosTheta) - (yPrev*sinTheta));
    listHullVx[j].y = ((yPrev*cosTheta) + (xPrev*sinTheta));

    // translate
    listHullVx[j] = listHullVx[j] + xlate;
}

上記の「//rotate」の下のコードをコメントアウトすると、アプリケーションの出力は最初の画像になります。そしてそれを再び追加すると、2番目の画像が得られます。文字通り、他に起こっていることは何もありません (私の知る限り)。

使用されているデータ型はすべて double であるため、精度の問題はないと思います。上の写真が示すように、回転によってゆがみが生じる理由を誰か知っていますか?

以下の編集フィリペのコメントは正しかった。これはおそらくローテーションとは関係がなく、問題について十分な情報を提供していませんでした。

写真で示したジオメトリは建物を表しています。それらは、経度/緯度のマップ座標から生成されます。変換を行うために使用する点データでは、デカルト座標空間への実際の投影を使用するのを忘れ、x->lon、y->lat をマッピングしただけで、これが歪みを見ている理由だと思います。他の人の役に立たないと思うので、この質問を削除してもらいます。

4

1 に答える 1

1

更新: コメントの結果、表示されたコードにバグがある可能性は低いと判断されました。

もう 1 つの最後のヒント: std 変換フォーミュラーは、座標系がデカルトの場合にのみ有効です。

于 2013-01-15T18:09:05.157 に答える