plotting evenly spaced lines across object

4 vues (au cours des 30 derniers jours)
Jakub
Jakub le 8 Mar 2013
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

Réponse acceptée

Sven
Sven le 9 Mar 2013
Modifié(e) : Sven le 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 commentaires
Jakub
Jakub le 2 Juil 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 le 2 Juil 2013
I am sorry again, please ignore previous message; all clear, it is just not my day,
cheers, j

Connectez-vous pour commenter.

Plus de réponses (0)

Catégories

En savoir plus sur Line Plots dans Help Center et File Exchange

Community Treasure Hunt

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

Start Hunting!

Translated by