有 Java 编程相关的问题?

你可以在下面搜索框中键入要查询的问题!

数学奇怪的距离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

Perspective view with the axes


共 (1) 个答案

  1. # 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))<;一,

    另外,如果想使图像更加对称,可以将第三个圆柱体的末端设置为(sqrt(0.5),0,sqrt(0.5))