2016-05-12 1 views
0

私はオブジェクト指向を使ってドットの動きをプロットしようとしています。最初の位置にドットを生成し、その位置をベクトルに追加してプロパティを与えます。背景として1000x1000のグリッドがあります。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では増加せず、移動も起こりません。 クラスは、あなたが明示的に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

です。私はuavをオブジェクト配列に入れて、XYを1回の呼び出しで直接取得できるようにすることをお勧めします。

関連する問題