私の問題についていくつかの画像を表示するので、すべてが理解しやすくなります。
私の最初の画像は、次のように配置された軸(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