java - 使用 3d 变换矩阵

标签 java 3d matrix

在 AI 类(class)中,我们有一个机器人,它的 ARM 有 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 或矩阵生成代码,我已经单独测试了所有代码。

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

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

最佳答案

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

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

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

这不等同于

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

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

关于java - 使用 3d 变换矩阵,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/584481/

相关文章:

c++ - 在 C++ 中从传递给函数的指针 vector 访问矩阵

java - Kryo:IdentityObjectIntMap.clear() 产生巨大的 CPU 负载

java - 连接到 oracle 10g 数据库时获取 IOException "got minus one from a read call"

java - 如何指定 class.getClassLoader() 返回哪个类加载器?

java - 在java中分割或解析字符串

如果大于 120 个三角形,Matlab 将停止在网格上正确插值颜色

javascript - Three.js 向场景添加多个立方体的更好方法

3d - XNA Game Studio 3D模型编辑器建议

python - rpy2 转换矩阵 -> DataFrame

java Arrays.sort 二维数组