plotting evenly spaced lines across object

4 views (last 30 days)
Dear all,
After finding an object boundary, I would like to plot evenly spaced lines (lets say every 5 degrees angle moving clockwise) that will cross the object center and stop at the object periphery at both sides. Something like cutting a cake into pieces.
For example,for an elliptical object,after finding long axis of it (let's call it 0-180 degrees axis), I would like to plot lines every given angle starting from 0-180 axis for entire 180 degrees. So if I would move every 5 degrees, I would get 36 lines.
Does anyone know how to do it and how to get the length of these lines? much appreciate jakub

Accepted Answer

Sven
Sven on 9 Mar 2013
Edited: Sven on 9 Mar 2013
Hi Jakub,
I think this does exactly what you're looking for. I've commented the code so it's easy to follow. Note that I've used the intersections entry on the file exchange.
% Make a blob
BW = false(20);
BW(4:16,6:12) = true;
% Get its boundary and a center location
bb = bwboundaries(BW);
bbXY = bb{1}(:,[2 1]);
centXY = mean(bbXY,1);
figure, imagesc(BW), hold on, plot(bbXY(:,1),bbXY(:,2),'g',centXY(1),centXY(2),'yo')
% Make a line that is sure to extend past the object
cutLineXY = [-1 0; 1 0] * sum(size(BW).^2);
% Define how many times we will rotate it
thetas = 0:15:360;
sth = sind(thetas);
cth = cosd(thetas);
for i = 1:length(thetas)
% Rotate the line
R = [cth(i) sth(i); -sth(i) cth(i)];
rotLineXY = cutLineXY * R;
% Shift it to the center
rotLineXY = rotLineXY + [centXY;centXY];
plot(rotLineXY(:,1),rotLineXY(:,2),'k')
% Check where it intersects our boundary
[X,Y] = intersections(rotLineXY(:,1),rotLineXY(:,2),bbXY(:,1),bbXY(:,2));
% Every 2nd intersection will be "inside" the blob
for cutNo = 1:2:length(X)
plot(X(cutNo:cutNo+1), Y(cutNo:cutNo+1),'-w.')
end
end
Does that answer your question?
  5 Comments
Jakub
Jakub on 2 Jul 2013
Hi Sven,
Sorry for bothering you again. The code works very well, it plots all the lines correctly, however, when I want to see the XY coordinates of intersections, there are only 2 numbers instead of 25 if one use thetas spacing of 0:15:360. Would you know where could be teh problem?
Much appreciate, jakub
Jakub
Jakub on 2 Jul 2013
I am sorry again, please ignore previous message; all clear, it is just not my day,
cheers, j

Sign in to comment.

More Answers (0)

Categories

Find more on Line Plots in Help Center and File Exchange

Community Treasure Hunt

Find the treasures in MATLAB Central and discover how the community can help you!

Start Hunting!