1

現在、円周を正しく計算する作業方法があります円周内の各位置は、構造体の配列内に格納されます。カメラの位置は、配列内の位置に応じて円に沿って移動します。配列の各要素は、3D 空間内の位置の x、y、および z 値を保持します。

問題: 円の位置は半径 3 の x:0、y:0、z:0 にあるようですが、3D 空間内の別の場所 (x:10、y:35、 z:20) で、半径は 3 です。

私の構造体:

typedef struct 
    {
        float x;
        float y;
        float z;
    } circle;
circle loop[600] = {0};

円を計算する私の方法:

void calcCircle()
{
    for (int i = 0; i < 599 ; i++)
            {
                loop[i].x = radius * sin(i/100.0);
                loop[i].y = 10;
                loop[i].z = radius * cos(i/100.0);
            }

}
4

1 に答える 1

3

計算にオフセットを追加するだけです。たとえば、中心に10,35,20...

const double PI = 3.1415926535;
void calcCircle()
{
    for (double i = 0; i < 2*PI ; i+=PI*2/600)
            {
                loop[i].x = 10 + radius * sin(i/2*PI);
                loop[i].y = 35;
                loop[i].z = 20 + radius * cos(i/2*PI);
            }

}

0,0,0あなたの例は中心にあるのではなく、にあることに注意してください0,10,0- それでもカメラを10上にしたい場合は、値にさらに10を追加してくださいy

また、 n 個のポイントを事前に計算するよりも、軌道の中心とカメラのオフセットを指定する方が一般的です。そうすれば、カメラは固定点の間ではなくスムーズに移動できます。現状では、軌道の速度はフレームレートに関連している可能性が高く、デバイスによって異なる可能性があります.

sin最後に、 /のスケーリングを変更してcos、600 ステップで 1 つの完全な軌道を表すようにしました。

于 2013-05-08T19:31:09.120 に答える