2

この画像のような「重力グリッド」を作成したいと思います。

画像

このグリッドの作成に最も近いものを次の画像に示します。

img2

この問題を解決できるまで、Y 軸に平行な線のみをワープしています。しかし、写真でわかるように、線は私の「惑星」を通り過ぎてゆがんでいるように見えます.

ここに私が今持っている興味のあるコードがあります:

for (each point on a line parallel to the y-axis) {
    if (planetPosition.x > currrentPoint.x) {
        warpedXPos = currrentPoint.x + (1 / (distance*1000));
    }
    else {
        warpedXPos = currrentPoint.x - (1 / (distance*1000));
    }
}
4

1 に答える 1

5

アイデアは、1/R に比例する量だけ惑星に向かってすべてのポイントを引っ張ることです。ここで、R は惑星からポイントまでの距離です。

あなたのコードでは currentPoint.x などは絶対位置ですが、惑星に対する位置をワープする必要があります。したがって、式は次のようになります。

warped.x = currrentPoint.x + (planetPosition.x-currrentPoint.x)/(1000*distance)

の後の部分+は、基本的にワープの相対距離のスケーリングであり、このたわみを元の絶対値に追加します。おそらく 1000 ファクターも使用したくないでしょうが、これはあなたの例に沿っているだけです。また、 を使用してこれをケースに分割する必要がないことに注意してください>。減算の符号は適切な方向に調整する必要があります。

(ちなみに、このタイプの操作は非常に一般的です...最初に絶対係数を減算し、次にスケーリングし、元の係数を元に戻します。これは、多くのアプリケーションで使用するために覚えておく価値のあるトリックです。)

于 2012-04-08T02:59:51.210 に答える