Матрицы в Objective-C - PullRequest
       37

Матрицы в Objective-C

5 голосов
/ 27 ноября 2011

Есть ли какой-нибудь класс для поддержки Matrix в Objective-C?Под матрицей я подразумеваю 2D-массивы.

Теперь я использую 2 NSArray s, один внутри другого.Это прекрасно работает, но мой код выглядит как большой беспорядок.

Я также пытался использовать массивы в стиле C друг с другом (matrix[][]), но этот подход не подходит моему приложению, так как я не могу автоматически@synthesize или укажите @properties для них.

Я, конечно, мог бы создать для этого свой собственный класс, но мне интересно, если в Objective-C уже есть что-то для таких ситуаций.Я провел небольшое исследование в Google, но ничего не нашел.

Ответы [ 4 ]

4 голосов
/ 27 ноября 2011

Нет, у Foundation нет классов 2D-массивов. Что касается математических вычислений, матрицы, как правило, реализуются на C или C ++ из соображений портативности и производительности. Для этого вам придется написать собственный класс, если вы действительно этого хотите.

1 голос
/ 01 октября 2014

Поздно, но я бы хотел упомянуть этот проект , который реализует гибкий класс Matrix на основе массива C с интерфейсами для многих функций BLAS и LAPACK. Отказ от ответственности: я разработчик.

Основное использование выглядит следующим образом:

YCMatrix *I = [YCMatrix identityOfRows:3 Columns:3];
double v = [I getValueAtRow:1 Column:1];
[I setValue:0 Row:0 Column:0];
1 голос
/ 27 ноября 2011

Кажется, у 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;

в качестве матрицы трехмерного преобразования.

0 голосов
/ 27 ноября 2011

Я думаю, вам нужно будет создать подкласс NSArray или использовать какой-нибудь несладкий синтаксис: [MyArray objectAtIndex:i*d+j].Последний случай действительно громоздок, так как вы получите только один неуклюжий счетчик.

...