0

我正在尝试使用 android 的“Matrix”类中存在的静态方法 multiplyMV 与向量进行基本的矩阵乘法。以下是一小段代码:

// packaged included
import java.lang.Object;
import android.opengl.Matrix;

public class Example extends Thread
{
  float[] R = new float[]  {1,0,0,0,   0,1,0,0,  0,0,1,0,  0,0,0,0};
  float[] inVector = new float[] {1,0,0,0};
  public void run()
  {
    inVector[4] = 2; // edited here // Line 09
    Matrix.multiplyMV(inVector , 0, R, 0, inVector , 0); // Line 10

  }
}

我不确定自己在做什么错误,但是这段代码会导致未捕获的异常。我试图查看代码中的什么时候出现此异常。如果我在第 10 行设置一个断点,则执行将在前一行停止,如果我随后给出一个 step-into 命令,我再次以异常结束。所以该方法的使用导致了这个异常,但我不知道为什么。我错过了一些包裹吗?我什至无法捕捉到这个异常并打印堆栈跟踪以查看发生了什么。任何帮助深表感谢!

代码的上下文是它必须执行向量从一个坐标系到另一个坐标系的转换。

编辑:发现异常:第 09 行的 IndexOutOfBounds

4

2 回答 2

0

在 multiplyMV 调用中交换 R 和 inVector。使用 inVector 作为 lhsMat。

于 2013-12-13T02:09:35.813 回答
0

尽管您可以使用相同的数组,但不能使用此处所述的相同元素:https ://developer.android.com/reference/android/opengl/Matrix.html

乘以MV

在 API 级别 1 中添加

void multiplyMV (float[] resultVec, 
                int resultVecOffset, 
                float[] lhsMat, 
                int lhsMatOffset, 
                float[] rhsVec, 
                int rhsVecOffset)

将 4 元素向量乘以 4x4 矩阵并将结果存储在 4 元素列向量中。在矩阵表示法中:结果 = lhs x rhs

可以为 resultVec、lhsMat 和/或 rhsVec 传递相同的浮点数组。但是,如果 resultVec 元素与 lhsMat 或 rhsVec 元素重叠,则 resultVec 元素值未定义。

您的代码是错误的,因为您为 resultVec 和 rhsVec 设置了相同的偏移量。

于 2016-07-19T10:28:11.217 回答