1

半径10メートルの円が2つあり、z軸に向かって大きな円ごとに半径1メートルの円を5つ配置したいとします。大きな円と小さな円を任意に動かしてほしい。大きな円は衝突できるはずで、小さな円は衝突できるはずです。

これを達成するための最良の方法は何ですか?私はたまたまJavaを使用していますが、アルゴリズム/擬似コードで問題ありません。

すなわち; 大きな円の加速度と回転運動を効率的に小さな円に伝達し、それらすべてを動的に動かすにはどうすればよいですか。私が見た解決策は、特に大きな円よりも複雑なオブジェクトについて考え始めると、扱いにくくなる傾向がありますが、それはまさにその通りかもしれません。

4

1 に答える 1

0

あなたはただいくつかの数学をする必要があるように聞こえます。

x1、y1を中心とし、半径r1の「ボート」があるとします。「船乗り」はx2、y2にあり、半径r2であるため、x2y2はボートの境界内にあります。ボートが角度Aだけ回転し、セーラーがこの回転フレームと単に共動している場合、セーラーの新しい中心位置は同じ角度だけ回転します。

a1 = x2 - x1; //difference between centers, x direction
b1 = y2 - y1; //in y direction
a2 = a1*cos(A) + b1*sin(A); //new difference in x direction
b2 = b1*cos(A) - a1*sin(A); //new difference in y direction

x3 = x1 + a2;  //new center position of sailor, x direction
y3 = y1 + b2;  //                               y direction

その丸い円(セーラー)に何らかの向きがある場合は、Aだけ回転させる必要があります。セーラーの向きを、ボートからの半径方向のベクトルに合わせて考えてください。新しい位置では、ボートが角度Aだけ回転した後、この方向もAを回転させたので、その回転をセーラーにも適用する必要があります。船乗りが特徴のない円である場合、すべての向きは同じであり、スキップできます。

于 2012-11-08T18:46:46.883 に答える