2016-05-12 3 views
0

Я пытаюсь построить перемещение точек с использованием объектно-ориентированных объектов. Я создаю точки в исходном положении, затем добавляю их позицию в вектор и даю им свойства. В качестве фона есть сетка 1000х1000.Переменные Matlab - OOP, не обновляющиеся до списка

uav1 = uavclass([10,10,10]); 
uav2 = uavclass([-10,-10,-10]); 
uav3 = uavclass([20,20,20]); 
uav4 = uavclass([-20,-20,-20]); 
uav5 = uavclass([30,30,30]); 
XY = []; 
XY(:,1) = [uav1.position(1),uav2.position(1),uav3.position(1),uav4.position(1),... 
    uav5.position(1),]; 
XY(:,2) = [uav1.position(2),uav2.position(2),uav3.position(2),uav4.position(2),... 
    uav5.position(2),]; 

UAVs = plot(XY(:,1), XY(:,2), ... 
     'Marker', '.', ... 
     'Color', 'r', ... 
     'LineStyle', 'none', ... 
     'MarkerSize', 8); 

Когда я иду в участок, однако с помощью

while uav2.charge > 25 
    uav2.position(1) = uav2.position(1) + uav2.maxHorizSpeed; 
    uav2.position(2) = uav2.position(2) + uav2.maxHorizSpeed; 
    uav2.position(2) 
    uav2.charge = uav2.charge - 1; 
    pause(0.5) 
    set(UAVs, 'XData', XY(:,1), 'YData', XY(:,2)); 
end 
drawnow 

это не сюжет. Значение uav2.position увеличивается, но оно не увеличивается в векторе XY, и движение не происходит. Класс

classdef uavclass 
    properties 
     position = [0,0,0] 
     charge = 100; 
     destination = [0,0,0]; 
     maxVertClimb = 2; 
     maxHorizSpeed = 5; 
     sensorRange = 25; 
     unloadingTime = 60; 
     safeDistance = 5; 
     chargingTime = 300; 
     minCruiseAlt = 20; 
     maxCruiseAlt = 70; 
    end 
    methods 
     function uav = uavclass(pos) 
      uav.position = pos; 
     end 
    end 
end 

ответ

0

Вы явно не обновлять XY. Я бы рекомендовал поместить uav в массив объектов, чтобы вы могли напрямую получать XY с помощью одного вызова.

Смежные вопросы