【问题标题】:Matrices in Objective-CObjective-C 中的矩阵
【发布时间】:2012-01-07 05:00:20
【问题描述】:

Objective-C 中是否有任何类支持矩阵?矩阵是指二维数组。

我现在做的是使用 2 个NSArrays,一个在另一个中。这很好用,但我的代码看起来很乱。

我也尝试在彼此之间使用 C 样式数组 (matrix[][]),但这种方法不适合我的应用程序,因为我不能自动为它们 @synthesize 或指定 @properties

我当然可以为此创建自己的类,但我想知道的是,Objective-C 是否已经为这种情况提供了一些东西。我做了一些谷歌研究,但没有找到任何东西。

【问题讨论】:

    标签: objective-c multidimensional-array matrix


    【解决方案1】:

    不,Foundation 没有任何二维数组类。就数学计算而言,出于可移植性和性能原因,矩阵通常用 C 或 C++ 实现。如果你真的想要,你必须为此编写自己的类。

    【讨论】:

      【解决方案2】:

      似乎 obj-c 没有自己的矩阵结构。我参考了iOS SDK的CATransform3D,发现它使用:

      struct CATransform3D
      {
          CGFloat m11, m12, m13, m14;
          CGFloat m21, m22, m23, m24;
          CGFloat m31, m32, m33, m34;
          CGFloat m41, m42, m43, m44;
      };
      
      typedef struct CATransform3D CATransform3D;
      

      作为 3D 变换矩阵。

      【讨论】:

      • 我的目标是使用坐标访问它,比如说 x 和 y。无论如何,谢谢你的回答。
      【解决方案3】:

      迟到了,但我想提一下this project,它实现了一个基于 C 数组的灵活 Matrix 类,具有许多 BLAS 和 LAPACK 函数的接口。 免责声明:我是开发者。

      基本使用如下:

      YCMatrix *I = [YCMatrix identityOfRows:3 Columns:3];
      double v = [I getValueAtRow:1 Column:1];
      [I setValue:0 Row:0 Column:0];
      

      【讨论】:

        【解决方案4】:

        我认为你需要继承 NSArray 或使用一些不甜的语法:[MyArray objectAtIndex:i*d+j].后一种情况真的很麻烦,因为你只会得到一种笨拙的枚举器。

        【讨论】:

        • 只有当你可以提供自己的存储空间时,你才应该继承NSArray
        猜你喜欢
        • 2013-10-26
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2014-02-07
        • 1970-01-01
        • 1970-01-01
        • 2013-08-26
        相关资源
        最近更新 更多