MATLAB Answers

How do I plot a circle with a given radius and center?

7,549 views (last 30 days)
I would like to plot a circle with a given radius and center.

Accepted Answer

MathWorks Support Team
MathWorks Support Team on 3 Jan 2019
Here is a MATLAB function that plots a circle with radius 'r' and locates the center at the coordinates 'x' and 'y':
function h = circle(x,y,r)
hold on
th = 0:pi/50:2*pi;
xunit = r * cos(th) + x;
yunit = r * sin(th) + y;
h = plot(xunit, yunit);
hold off
An alternative method is to use the 'rectangle' function:
function h = circle2(x,y,r)
d = r*2;
px = x-r;
py = y-r;
h = rectangle('Position',[px py d d],'Curvature',[1,1]);
daspect([1,1,1])
If you are using version R2012a or later and have Image Processing Toolbox, then you can use the 'viscircles' function to draw circles:
viscircles(centers,radii)

  7 Comments

Show 4 older comments
Chinthamakula Saikiran
Chinthamakula Saikiran on 26 Jul 2017
Thanks and we want answer to plot circle when they have given us centre and a point on the circle
Michael Abboud
Michael Abboud on 1 Aug 2017
If you would like to plot a circle given two points [Center, Point on circle], rather than [Center, Radius], you can simply calculate the distance between your two points, and then use that distance as the radius.

Sign in to comment.

More Answers (4)

serwan Bamerni
serwan Bamerni on 17 Feb 2016

  2 Comments

ceethal piyus
ceethal piyus on 16 May 2019
I've applied circular hough tranform for identifing the circlular objects in an image and i got the results . But when i used the code into an app designer, insted of ploting the circles into the image where the centers are marked its ploting the circle in a different figure. How can i get both circles and center points into the same axes ( named "app.segmented" )
code.JPG
error
code1.JPG
How to add the axes name to viscircles function in an app designer. I tired
viscircles(centres,radii,'color','b','parent','app.segemented'); which is giving the following error.
code2.JPG

Sign in to comment.


amine bouabid
amine bouabid on 23 Jul 2018
Edited: amine bouabid on 23 Jul 2018
hello
you can plot a circle simply by writing :
syms x; syms y;
ezplot((x-xi).^2+(y-yi).^2-r.^2)
where xi and yi are the coordinates of the center and r is the radius

  0 Comments

Sign in to comment.


Supoj Choachaicharoenkul
Supoj Choachaicharoenkul on 2 Oct 2019
plot(x, y, 'bo', 'MarkerSize', 50);

  0 Comments

Sign in to comment.


Devin Marcheselli
Devin Marcheselli 3 minutes ago
how do i plot a circle using the equation: (x-h).^2+(y-k).^2 = r.^2

  1 Comment

Mark Rzewnicki
Mark Rzewnicki less than a minute ago
Hey there, I've been playing around with this as it relates to complex-valued functions.
It turns out that this is a very nontrivial question. There are several issues you run into along the way - you need to make some arbitrary choices about how to define your circle. I will share with you the way I found to be most natural.
Assuming y is the indpendent variable, expand the x term in the circle equation:
Bring these expanded term to the right-hand side of the equation:
Take the square root of both sides and bring k to the right-hand side:
This is the equation you can use to plot the circle. The code I came up with is a little messy (was intended for personal use in another context) but I will throw some comments in and hopefully you find it as interesting as I did.
***The big takeaway from all of this: We can deal with circles in rectangular coordinates, but it is much more natural to use polar coordinates and think of the circle as the locus of points with distance r from the center.
% Circle equation: (x-h)^2 + (y-k)^2 = r^2
% Center: (h,k) Radius: r
h = 1;
k = 1;
r = 1;
%% In x-coordinates, the circle "starts" at h-r & "ends" at h+r
%% x_res = resolution spacing between points
xmin = h - r;
xmax = h + r;
x_res = 1e-3;
X = xmin:x_res:xmax;
%% There are 2 y-coordinates on the circle for most x-coordinates.
%% We need to duplicate every x-coordinate so we can match each x with
%% its pair of y-values.
%% Method chosen: repeat the x-coordinates as the circle "wraps around"
%% e.g.: x = [0 0.1 0.2 ... end end ... 0.2 0.1 0]
N = length(X);
x = [X flip(X)];
%% ytemp1: vector of y-values as we sweep along the circle left-to-right
%% ytemp2: vector of y-values as we sweep along the circle right-to-left
%% Whether we take positive or negative values first is arbitrary
ytemp1 = zeros(1,N);
ytemp2 = zeros(1,N);
for i = 1:1:N
square = sqrt(r^2 - X(i)^2 + 2*X(i)*h - h^2);
ytemp1(i) = k - square;
ytemp2(N+1-i) = k + square;
end
y = [ytemp1 ytemp2];
%% plot the (x,y) points
%% axis scaling coefficient c: how far past the radius should the graph go?
c = 1.5;
figure(1)
plot(x,y)
axis([h-c*r h+c*r k-c*r k+c*r]);

Sign in to comment.

Sign in to answer this question.