Hello everyone

I've written some matlab code that will generate squares (or more exatly the min/max x&y values) and then colour these squares differently according to if there's any overlap or not.

Here's my problem:As the number of squares increases the possibility of non-overlapping squares decreases.

Try running for values between 1 - 10 and see the difference.

So somehowI would like the squares to scatter more somewhat.I have no ideas how to do this

Here's my code if anyone is interested, I know there's improvements to be made.

Help much appreciated :)Code:`function [ ] = rektangelplot( amount )`

%REKTANGELPLOT Summary of this function goes here

% Detailed explanation goes here

%Square generation

x1 = amount*rand(amount, 1);

x2 = amount*rand(amount, 1) + x1;

y1 = amount*rand(amount, 1);

y2 = amount*rand(amount, 1) + y1;

collection = [x1, x2, y1, y2];

%Overlap check

truth_table = zeros(amount, amount);

overlap = 0;

c = 1;

for a = 1:amount

x1c = (collection(a, 2) + collection(a, 1))/2;

x1r = x1c - collection(a, 1);

y1c = (collection(a, 4) + collection(a, 3))/2;

y1r = y1c - collection(a, 3);

for b = 1:amount

if a ~= b

x2c = (collection(b, 2) + collection(b, 1))/2;

x2r = x2c - collection(b, 1);

y2c = (collection(b, 4) + collection(b, 3))/2;

y2r = y2c - collection(b, 3);

if(abs(x1c -x2c) < (x1r + x2r) && abs(y1c - y2c) < (y1r + y2r))

truth_table(a,b) = 1;

truth_table(b,a) = 1;

overlap_x1 = max(collection(a, 1), collection(b, 1));

overlap_y1 = max(collection(a, 3), collection(b, 3));

overlap_x2 = min(collection(a, 2), collection(b, 2));

overlap_y2 = min(collection(a, 4), collection(b, 4));

overlap(c, 1) = overlap_x1;

overlap(c, 2) = overlap_x2;

overlap(c, 3) = overlap_y1;

overlap(c, 4) = overlap_y2;

c = c+1;

end

end

end

end

%Draw squares and overlapses

figure

axis([0 3*amount 0 3*amount]);

hold on

for a = 1:amount

drawX = collection(a, 1):0.01:collection(a, 2);

drawY = collection(a, 3):0.01:collection(a, 4);

minY = drawX;

minY(:) = collection(a, 3);

maxY = drawX;

maxY(:) = collection(a, 4);

plot(drawX, minY);

plot(drawX, maxY);

minX = drawY;

maxX = drawY;

minX(:) = collection(a, 1);

maxX(:) = collection(a, 2);

plot(minX, drawY);

plot(maxX, drawY);

end

if overlap ~= 0;

a = length(overlap(:,1));

for b = 1:a;

fill([overlap(b,1) overlap(b,2) overlap(b,2) overlap(b,1)], [overlap(b,3) overlap(b,3) overlap(b,4) overlap(b,4)],'red');

end

end

for a = 1:amount;

if sum(truth_table(a,:)) == 0;

fill([collection(a,1) collection(a,2) collection(a, 2) collection(a,1)] ,[collection(a,3) collection(a,3) collection(a,4) collection(a,4)],'green');

end

end

hold off