【问题标题】:transposing an array list in processing在处理中转置数组列表
【发布时间】:2021-07-02 10:29:21
【问题描述】:

我正在尝试在 processing.js 中编写一个函数,该函数将一个数组列表作为输入,其中包含 4 个 int[] 类列表,每个列表包含 4 个元素。这就是我表示矩阵的方式,数组列表中的每个列表都表示一行。数组列表的索引 0 是顶行,数组列表的索引 3 是底行。我想编写一个函数来转置这个数组列表,但我遇到了障碍。这是我到目前为止的代码(注意:Z 是一个用零填充的 4x4 数组列表):

ArrayList<int[]> Transpose(ArrayList<int[]> M){
  ArrayList<int[]> A=Z;
  for (int q=0; q<4; q++){
    int[] atemp={};
    for (int p=0; p<4; p++){
      int[] mtemp=M.get(p);
      int i=mtemp[q];
      append(atemp,i);
    }
    A.add(atemp);
  }
  return A;
}

当我尝试将i 附加到atemp 时,我的问题似乎发生了。当我在将atemp.length 添加到A 之前打印出atemp.length 时,它打印的长度为0。我不确定为什么atemp 一直为空,我想知道是否有人可以帮助我了解发生了什么以及如何修复它。

【问题讨论】:

  • 我实际上需要将 ArrayList&lt;int[]&gt; A=Z; 行更改为 ArrayList&lt;int[]&gt; A=new ArrayList&lt;int[]&gt;(); 以便它返回一个 4x4 数组列表而不是 8x4,但我仍然有同样的问题。

标签: javascript arrays processing


【解决方案1】:

您已经发现需要将A 分配为新的ArrayList,而不是简单地再次引用现有的。

此外,如果您只需要 Processing.js 中的 4x4 转换矩阵,请使用已实现 transpose()PMatrix3D 类:

PMatrix3D A = new PMatrix3D();
// modify A as a test
A.translate(10, 20, 30);
println("A:");
A.print();
// clone A
PMatrix3D Z = A.get();
Z.transpose();
println("Z:");
Z.print();

应该输出:

A:
 01.0000  00.0000  00.0000  10.0000
 00.0000  01.0000  00.0000  20.0000
 00.0000  00.0000  01.0000  30.0000
 00.0000  00.0000  00.0000  01.0000

Z:
 01.0000  00.0000  00.0000  00.0000
 00.0000  01.0000  00.0000  00.0000
 00.0000  00.0000  01.0000  00.0000
 10.0000  20.0000  30.0000  01.0000

(您可以使用applyMatrix() 将转换应用到渲染器)。

记住 ProcessingJS 不再维护。

【讨论】:

    【解决方案2】:

    我不是 JavaScript 专家(你用 Java 标记了这个问题,这就是我查看的原因)但我认为你应该在 JS 中创建一个这样的数组:

    int[] atemp = [];
    

    您可能正在使用花括号创建一个对象?

    【讨论】:

    • 我很确定这只是处理的语法。当我尝试您的建议时,我得到了一个以前没有得到的错误代码。
    猜你喜欢
    • 2022-01-15
    • 1970-01-01
    • 2023-03-05
    • 2023-04-06
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2017-11-02
    • 1970-01-01
    相关资源
    最近更新 更多