0

私の問題についていくつかの画像を表示するので、すべてが理解しやすくなります。

画像1
画像2

私の最初の画像は、次のように配置された軸(x軸は円柱、y軸は円錐、z軸は球)と3つの円柱を示しています。

x軸(右)の上の円柱は、RotZ(PI / 4)およびRotX(0)をサポートします。z軸(左)の上のシリンダーは、RotX(PI / 4)とRotZ(0)をサポートします。中央のシリンダーはRotX(PI / 4)とRotZ(PI / 4)をサポートします。

2番目の画像は、まったく同じ角度値で3つの円柱を示していますが、原点に球があり、遠近法が変更されています。これは、奇妙なことを明確にするためです。つまり、上部の円柱(実験的には「x軸」の円柱)が中央に近いことです。円柱(最初の画像の中央の円柱)は、最初の画像の下部の円柱(「z軸」)の円柱よりも異なります。違いはどの視点からでも見ることができるため、視点が問題になることはありません。

問題は私がローテーションを行う方法にあるのではないかと考えました。円柱の長さは2fなので、最初に円柱を(0,1,0)に変換して、円柱の一方の端にある円の中央の点を作成します。アイデアは、(0,0,0)ポイントを中心に回転させたいということです。次に、回転します。
これが問題でしょうか?

以下のコードは、シリンダーの配置方法を示しています

 private void addSimpleBound(float x,float y,float z)
    {


    Cylinder b=new Cylinder();
    TransformGroup tg=new TransformGroup();
    tg.addChild(b);
    TransformGroup element=translate(tg, new Vector3f(0f,1f,0f)); 
    TransformGroup gr=rotate(element,xAngle,zAngle);
    elements.addChild(gr);
}
    TransformGroup rotate(Node node,
        double xAngle,
        double zAngle)
{

    Transform3D tiltAxisXform = new Transform3D();
    Transform3D tempTiltAxisXform = new Transform3D();
    tiltAxisXform.rotX(xAngle);
    tempTiltAxisXform.rotZ(zAngle);
    tiltAxisXform.mul(tempTiltAxisXform);
    TransformGroup rotatedGroup = new TransformGroup(tiltAxisXform);
    rotatedGroup.addChild(node);
    return rotatedGroup;
}// The rotation method

軸を含む斜視図

4

1 に答える 1

1

編集:

コメントごとに、シリンダーの終点は

  (sqrt(0.5), sqrt(0.5), 0),
  (0, sqrt(0.5), sqrt(0.5)),
  (sqrt(0.5), 0.5, 0.5)

これは、距離が実際には非対称であることを意味します。より対称的な結果を得るには、2 回目の回転は y 軸を中心とする必要があります。

元の答え:

これはまったくおかしなことではありません。あなたのシリンダーの端は

  (sqrt(0.5), sqrt(0.5), 0),
  (0, sqrt(0.5), sqrt(0.5)),
  (0.5, sqrt(0.5), 0.5)

1 番目の端から 2 番目の端までの距離は 1、1 番目から 3 番目の端まで (または 2 番目から 3 番目まで) の距離は sqrt(1 - sqrt(0.5)) < 1 です。

PS 画像をより対称にしたい場合は、3 番目の円柱の端を (sqrt(0.5),0,sqrt(0.5)) にすることができます。

于 2012-11-03T21:35:53.130 に答える