2011-11-27 17 views
5

¿Hay alguna clase para el soporte Matrix en Objective-C? Por Matrix quiero decir matrices 2D.Matrices en Objective-C

Lo que hago ahora es usar 2 NSArray s, una dentro de la otra. Esto funciona a la perfección, pero mi código parece un gran desastre.

También han tratado de utilizar matrices de tipo C dentro de cada-otro (matrix[][]) pero este enfoque no se ajusta a mi solicitud ya que no puedo automáticamente @synthesize o especificar @properties para ellos.

Por supuesto, podría crear mi propia clase para eso, pero lo que me pregunto es si Objective-C ya tiene algo para este tipo de situaciones. Hice algunas investigaciones de Google pero no encontré nada.

Respuesta

4

No, Foundation no tiene ninguna clase de matriz 2D. En lo que respecta a los cálculos matemáticos, las matrices se implementan típicamente en C o C++ por razones de portabilidad y rendimiento. Tendrás que escribir tu propia clase para eso si realmente lo quieres.

-2

Creo que tendrá que subclase NSArray o utilizar alguna sintaxis no dulce: [MyArray objectAtIndex:i*d+j]. El último caso es realmente engorroso, ya que obtendrá un solo tipo de encuestador torpe.

+3

Sólo debe subclase 'NSArray' cuando se puede proporcionar su propio almacenamiento. –

1

Parece que obj-c no tiene su propia estructura para la matriz. Me referí a CATransform3D del SDK de iOS, se encontró que utilice:

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; 

como la transformación 3D matriz.

+0

Mi objetivo era acceder usando coordenadas, digamos x e y. Gracias por tu respuesta de todos modos. – Dimme

1

Tarde para la fiesta, pero me gustaría mencionar this project, que implementa una clase Matrix flexible basada en una matriz C, con interfaces para muchas funciones BLAS y LAPACK. Descargo de responsabilidad: soy el desarrollador.

Uso básico es el siguiente:

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