使用3d变换矩阵

时间:2009-02-25 02:12:57

标签: java 3d matrix

在AI类中,我们有一个机器人,其手臂有7个关节。每个关节可以旋转不同的方向。我需要知道最终的目标。我一直在努力做三维矩阵乘法,它适用于一个关节,但是一旦我加入另一个关节,它就不能与我使用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轴上进行第二次平移。但我不知道我是怎么做的......

非常感谢任何帮助或想法。

1 个答案:

答案 0 :(得分:1)

如果没有看到仿射变换矩阵的结构和角度变量的定义,很难准确回答。 translation matrix的正常定义假设位置向量从左侧乘以,例如,这似乎与您的使用相反。最后检查b [0] [3] == 1。

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

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

这不等于

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

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