Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/327.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java 使用三维变换矩阵_Java_3d_Matrix - Fatal编程技术网

Java 使用三维变换矩阵

Java 使用三维变换矩阵,java,3d,matrix,Java,3d,Matrix,在人工智能课程中,我们有一个机器人,它的手臂有7个关节。每个关节可以旋转不同的方向。我需要知道结局会在哪里。我一直在尝试做3d矩阵乘法,它适用于一个关节,但一旦我加入另一个关节,它就与我使用Java3D api制作的模型不符。这就是我试图计算第二个关节位置的方法 double[][] b = {{0, 0, 0, 1}}; // Joint 1 b = HercMatrix.MatMul(b, HercMatrix.getTranslation(0, 0, -110)); b = HercMa

在人工智能课程中,我们有一个机器人,它的手臂有7个关节。每个关节可以旋转不同的方向。我需要知道结局会在哪里。我一直在尝试做3d矩阵乘法,它适用于一个关节,但一旦我加入另一个关节,它就与我使用Java3D api制作的模型不符。这就是我试图计算第二个关节位置的方法

double[][] b = {{0, 0, 0, 1}};

// Joint 1
b = HercMatrix.MatMul(b, HercMatrix.getTranslation(0, 0, -110));
b = HercMatrix.MatMul(b, HercMatrix.getRotation(0, arm.getJointAngle(0), 0));

// Joint 2
b = HercMatrix.MatMul(b, HercMatrix.getTranslation(0, 0, -250));
b = HercMatrix.MatMul(b, HercMatrix.getRotation(arm.getJointAngle(1), 0, 0));

System.out.println("Matrix: " + b[0][0] + ", " + b[0][1] + ", " + b[0][2]);
我想这就是我应用乘法的方式。我知道这不是我的matmul或matrice生成代码,我已经单独测试了所有这些

第二次平移需要在第一个关节角度的相对x轴上。但我不知道我是不是这样做的


非常感谢您的帮助或想法。

如果不了解仿射变换矩阵的结构和角度变量的定义,很难准确回答。例如,的法线定义假定位置向量从左侧相乘,这似乎与您的使用相反。最后还要检查b[0][3]==1

您的代码似乎等同于以下伪代码:

b = origin.translate(Joint1).rotate(Joint1).translate(Joint2).rotate(Joint2);
这不等于

b = origin.translate(Joint2).rotate(Joint2).translate(Joint1).rotate(Joint1);

因此,请检查您需要的转换顺序。

这实际上就是问题所在。谢谢你的建议!