奇怪的远离Java 3d

时间:2012-11-02 16:29:14

标签: java math 3d java-3d

我会展示一些关于我的问题的图片,所以一切都会更容易理解:

Image 1
Image 2

我的第一张图片显示的是轴(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

Perspective view with the axes

1 个答案:

答案 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))。