How can I draw a line from center of multiple circles that will intersect all the circles?

I want to multiple circles with same center but different radius. Later on I want add a line from center that will intersect all the cirles. I am attaching a figure to demonstrate how will be my expected output.

 Accepted Answer

Try this:
t = linspace(0, 2*pi);
r = [1, 2, 3];
xc = 0.5;
yc = 0.1;
xcir = (r(:)*cos(t))' + xc;
ycir = (r(:)*sin(t))' + yc;
figure
hold all
plot(xcir, ycir)
plot([xc, xc+5], [yc, yc], '-r')
hold off
axis equal
text(xc+r, yc*ones(1,numel(r)), ['$\frac{D}h$', compose('$\\frac{%dD}h$', r(2:end))], 'HorizontalAlignment','left', 'VerticalAlignment','top', 'Interpreter','latex', 'FontSize',12)
producing:
How can I draw a line from center of multiple circles that will intersect all the circles - 2019 01 19.png
Experiment to get the result you want.

7 Comments

This is working well and getting the exact output but unable to point D/h, 2D/h etc as 'compose' giving me error. I am using R2014b.
This is the error:
Undefined function 'compose' for input arguments of type 'char'.
Error in circle_line (line 14)
text(xc+r, yc*ones(1,numel(r)), ['$\frac{D}h$', compose('$\\frac{%dD}h$', r(2:end))], 'HorizontalAlignment','left',
'VerticalAlignment','top', 'Interpreter','latex', 'FontSize',12 )
Change the compose call to sprintfc (that I believe evryone has). It is an undocumented function that creates cell strings, and is otherwise the same as sprintf.
This worked for me just now when I ran it, so it should work for you as well:
text(xc+r, yc*ones(1,numel(r)), ['$\frac{D}h$', sprintfc('$\\frac{%dD}h$', r(2:end))], 'HorizontalAlignment','left', 'VerticalAlignment','top', 'Interpreter','latex', 'FontSize',12)
My apologies for the delay. We are 7 hours behind UTC, so it was night here.
Thank you so much. It works well and perfectly. How can I bold the text? I am using 'fontWeight', 'bold' but its not working. One more thing how can I place D/h, 2D/h, 3D/h .... one line below so that it will not touch the straight line ?
As always, my pleasure.
For LaTeX labels, use the control sequence \bf to invoke boldface type, and \rm to restore the defaults:
text(xc+r, yc*ones(1,numel(r))-0.1, ['$\bf\frac{D}h\rm$', sprintfc('$\\bf\\frac{%dD}h\\rm$', r(2:end))], 'HorizontalAlignment','left', 'VerticalAlignment','top', 'Interpreter','latex', 'FontSize',12)
That worked when I tried it. It also lowers the labels by 0.1, so they are below the straight line.
For more information on LaTeX, see: The Not So Short Introduction to LaTeX2e (link).

Sign in to comment.

More Answers (0)

Community Treasure Hunt

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

Start Hunting!