Простое решение: забудьте об этих именах и переведите этот класс в простой массив, индексируя m.x
как m[1]
, m.roll
как m[2]
и т. Д. Это может не подойти для некоторых случаев использования,но, безусловно, является наиболее эффективным решением.
Альтернативное решение требует создания пользовательского класса.subsref
и subsasgn
не обязательны, возможно объявить зависимые свойства и определить методы получения и установки (хотя это не красиво!):
classdef Euler
properties
x = 0;
y = 0;
z = 0;
end
properties (Dependent)
yaw, pitch, roll;
psi, theta, phi;
end
methods
function value = get.yaw(obj)
value = obj.x;
end
function value = get.pitch(obj)
value = obj.y;
end
function value = get.roll(obj)
value = obj.z;
end
function obj = set.yaw(obj,value)
obj.x = value;
end
function obj = set.pitch(obj,value)
obj.y = value;
end
function obj = set.roll(obj,value)
obj.z = value;
end
% Add same methods for psi, theta, phi.
end
end
Теперь вы можете сделать:
e = Euler;
e.x = 1;
e.yaw % returns 1
e.roll = 5;
e.z % returns 5
То есть объект имеет свойства x
, y
, z
, yaw
, pitch
и roll
(и после добавления соответствующих установщиков и получателей также psi
, theta
и phi
), но хранит только три значения.Например, значения yaw
и x
связаны между собой и всегда идентичны.