数学奇怪的距离Java3D
我会展示一些关于我的问题的图片,这样一切都会更容易理解:
{a1}
Image 2
我的第一幅图像显示了轴(x轴由圆柱体组成,y轴由圆锥体组成,z轴由球体组成)和3个圆柱体,定位如下:
x轴(右侧)上方的圆柱体支持RotZ(PI/4)和RotX(0)。z轴(左)上方的圆柱体支持RotX(PI/4)和RotZ(0)。中间的圆柱体支持RotX(PI/4)和RotZ(PI/4)。p>
我的第二幅图显示了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
# 1 楼答案
编辑:
根据注释,气缸的端点位于
这意味着距离实际上是不对称的。为了获得更对称的结果,第二次旋转必须围绕y轴
原始答案:
这一点也不奇怪。你的汽缸的末端在
从第一个端点到第二个端点的距离为1,从第一个端点到第三个端点(或从第二个端点到第三个端点)的距离为sqrt(1-sqrt(0.5))<;一,
另外,如果想使图像更加对称,可以将第三个圆柱体的末端设置为(sqrt(0.5),0,sqrt(0.5))