Java3D Transfrom3D旋转不准确

时间:2018-02-07 14:02:24

标签: rotation java-3d

我遇到以下问题。我想在Java3D中绘制一个两个球体之间的圆柱体。两者都位于(-1,-1,-1)和(1,1,1)。

所以我写了以下方法:

public TransformGroup buildJoint(double sx,double sy,double sz,double ex,double ey,double ez)
{
    TransformGroup transformGroup=new TransformGroup();
    transformGroup.setCapability(TransformGroup.ALLOW_TRANSFORM_WRITE);

    // Get the cylinder size
    double cylinderSize=Math.sqrt((ex-sx)*(ex-sx)+(ey-sy)*(ey-sy)+(ez-sz)*(ez-sz));

    // 1st Relocation for the cylinder size offset 
    Transform3D relocateT3D=new Transform3D();
    Vector3d relocate=new Vector3d(0,cylinderSize/2,0);
    relocateT3D.setTranslation(relocate);

    //2nd Relocation to place the cylinder at the start point
    Transform3D move3D=new Transform3D();
    Vector3d move=new Vector3d(sx,sy,sz);
    move3D.setTranslation(move);        
    move3D.mul(relocateT3D);                

    move3D.rotZ(-Math.PI/4.f);                  // Rotate the cylinder 45gr around Z axis

    Transform3D roty3D=new Transform3D();
    roty3D.rotY(-Math.PI/4.f);                  // Rotate the cylinder 45gr around Y axis
    roty3D.mul(move3D);

    transformGroup.setTransform(roty3D);

    Cylinder cylinder=new Cylinder(0.05f,(float) cylinderSize);
    transformGroup.addChild(cylinder);
    return transformGroup;
}

我用以下方法调用此函数: TransformGroup joint = buildJoint(-1,-1,-1,1,1,1);

但有趣的是,不知何故,圆柱体的两端都不会在球体中间内部结束。存在约0.2弧度的不准确度。

有人知道这里会发生什么吗?

0 个答案:

没有答案