我会展示一些关于我的问题的图片,所以一切都会更容易理解:
我的第一张图片显示的是轴(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
答案 0 :(得分:1)
修改强>
根据评论,您的圆柱的终点位于
(sqrt(0.5), sqrt(0.5), 0),
(0, sqrt(0.5), sqrt(0.5)),
(sqrt(0.5), 0.5, 0.5)
这意味着距离实际上是不对称的。对于更对称的结果,第二次旋转必须围绕y轴。
原始回答:
这根本不奇怪。圆柱的末端位于
(sqrt(0.5), sqrt(0.5), 0),
(0, sqrt(0.5), sqrt(0.5)),
(0.5, sqrt(0.5), 0.5)
从第一端到第二端的距离是1,从第一端到第三端(或从第二端到第三端)的距离是sqrt(1 - sqrt(0.5))< 1。
P.S。如果你想让图像更加对称,你可以把第三个圆柱的末端放到(sqrt(0.5),0,sqrt(0.5))。