2012-04-26, 17:52
#1
Tjo, håller på med en skoluppgift i MatLab som kretsar kring överlappande resp. ej överlappande rektanglar vilka ska skrivas ut i en graf. Rektanglarna kan se ut på två olika sätt beroende på om de överlappar eller ej:
Överlappande rektanglar:
Ej överlappande rektanglar:
Programmet funkar ibland, ibland inte, ej överlappande rektanglar markeras då och då som överlappande rektanglar och vice versa. Jag har med ett kriterium för att gallra ut de överlappande rektanglarna vilket jag tror borde fungera (kommenterat "kriterium" i kod). Vart tror ni felet ligger?
Programmet är en ganska simpel konstruktion och ser ut på följande sätt:
Tacksam för alla svar!
Överlappande rektanglar:
Kod:
rectangle('position',[wx wy ww wh],'Linestyle', '-', 'FaceColor', 'none');
Ej överlappande rektanglar:
Kod:
rectangle('position',[wx wy ww wh],'Linestyle', '-.', 'FaceColor', 'none');
Programmet funkar ibland, ibland inte, ej överlappande rektanglar markeras då och då som överlappande rektanglar och vice versa. Jag har med ett kriterium för att gallra ut de överlappande rektanglarna vilket jag tror borde fungera (kommenterat "kriterium" i kod). Vart tror ni felet ligger?
Programmet är en ganska simpel konstruktion och ser ut på följande sätt:
Kod:
function [ output_args ] = projekt(Antal)
matrix=zeros(Antal,4); %Skapa vector
counter1=0; %Räknade pekar på resp rad i matris
SaveAntal=Antal; %Spara undan antal brukas senare
ManuAntal=Antal; %Sparar undan antal brukas senare
Break=0;
%Lägger in slumpmässigt framtagna siffror i matris
while 0<Antal
counter1=counter1+1;
x=(rand(1)*10); %y-koor
y=(rand(1)*10); %x-koor
w=(rand(1)*10); %width
h=(rand(1)*10); %height
matrix(counter1,1)=x;
matrix(counter1,2)=y;
matrix(counter1,3)=w;
matrix(counter1,4)=h;
display(matrix);
Antal = Antal-1; %Räknar ner whilesatsen
end
while Break~=SaveAntal
Break=Break+1; %Räknar upp whilesatsen
wx=matrix(ManuAntal,1);
wy=matrix(ManuAntal,2);
ww=matrix(ManuAntal,3);
wh=matrix(ManuAntal,4);
x1=matrix(ManuAntal,1);
y1=matrix(ManuAntal,2);
w1=matrix(ManuAntal,3)./2;
h1=matrix(ManuAntal,4)./2;
counter2=0;
while counter2<SaveAntal
counter2=counter2+1; %Räknar upp whilesatsen
x2=matrix(counter2,1);
y2=matrix(counter2,2);
w2=(matrix(counter2,3)./2);
h2=(matrix(counter2,4)./2);
if x1~=x2
if abs(x2-x1) < w2+w1 && abs(y2-y1) < h2+h1 %Kriterium
rectangle('position',[wx wy ww wh],'Linestyle', '-', 'FaceColor', 'none');
else
rectangle('position',[wx wy ww wh],'Linestyle', '-.', 'FaceColor', 'none');
end
end
end
ManuAntal=ManuAntal-1;
end
Tacksam för alla svar!
__________________
Senast redigerad av Schweinsteigen 2012-04-26 kl. 18:05.
Senast redigerad av Schweinsteigen 2012-04-26 kl. 18:05.