我将展示一些关于我的问题的图片,这样一切都会更容易理解:
我的第一张图片显示了轴(x 轴由圆柱体组成,y 轴由圆锥体组成,z 轴由球体组成)和 3 个圆柱体的位置如下:
x 轴上方的圆柱体(右)支持 RotZ(PI/4) 和 RotX(0)。z 轴上方的圆柱体(左)支持 RotX(PI/4) 和 RotZ(0)。中间气缸支持RotX(PI/4)和RotZ(PI/4)。
我的第二张图片显示了 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