掃除ロボットをシミュレートするプログラムを作成する必要があります。私たちはOctaveでそれをする必要があります。Octave/Matlabで移動する2次元プロットの回転
Main()
clear all;
%Initalisierung der Raummatrix, damit nachher abgefragt werden kann
XMatrix = 0;
YMatrix = 0;
%"Winkel festsetzten"
t=1;
h=1;
hold on
%Startpunkte vom Punkt
x = 20;
y = 15;
alpha = 45;
xalt= 10;
yalt= 10;
%Hier die Methode ändern um verschiedene Räume einzulesen
[XMatrix,YMatrix] = RaummitsechsEcken();
%plot Funktion wird gespeichert
p = plot(x,y,'*');
%p1 = plot(x,y,xalt,yalt);
while(true)
pause(0.001)
%alte Position speichern
xalt = get(p,'XData');
yalt = get(p,'YData');
%Bewegungsberechnung
set(p,'YData',get(p,'YData')+0.1*t);
set(p,'XData',get(p,'XData')+0.1*h);
% Strich plot
%Kollisionabfrage
if(inpolygon(get(p,'XData'),get(p,'YData'),XMatrix,YMatrix) == false)
%Alte Position zurückspielen
set(p,'XData',xalt);
set(p,'YData',yalt);
%Neue Winkelberechnung(random)
t = -1+rand(1)*(1-(-1));
h = -1+rand(1)*(1-(-1));
endif
endwhile
endfunction
function[X,Y] = RaummitsechsEcken()
X = [10 18 10 30 22 30 10];
Y = [1 16 30 30 16 1 1];
plot(X,Y)
hold on
endfunction
「ロボット」は壁に当たったときのコードの問題は、彼がランダムにこのように新しい天使と動きを生成していること、です。問題は、ロボットが角度と速度について同じ変数を持つということです。速度は角度によって異なります。私の質問は、誰かが私のポイントを同じ速度で動かす方法を知っていても、ロボットが壁に当たったときの速度から離れて方向を変えれば、今のところです。私は回転行列を検索しましたが、それで動作させることはできません。 私はあなたが助けることを願っています!
フェリックス
2つの変数を使用しますか? – Suever
また、 't'と' h'を正規化してください。 – beaker