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

조회 수: 11,374(최근 30일)
MathWorks Support Team 2010년 7월 26일
댓글: Walter Roberson 2021년 6월 9일
I would like to plot a circle with a given radius and center.

### 채택된 답변

MathWorks Support Team 2019년 1월 3일
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:
HG 2021년 6월 9일

댓글을 달려면 로그인하십시오.

### 추가 답변(7개)

serwan Bamerni 2016년 2월 17일
##### 댓글 수: 3표시숨기기 이전 댓글 수: 2
Walter Roberson 2020년 12월 25일

댓글을 달려면 로그인하십시오.

Supoj Choachaicharoenkul 2019년 10월 2일
plot(x, y, 'bo', 'MarkerSize', 50);
##### 댓글 수: 1표시숨기기 없음
wagenaartje 2020년 12월 7일
This is the best solution by far if you want to highlight some part in the figure

댓글을 달려면 로그인하십시오.

Steven Lord 2020년 12월 25일
Another possibility is to approximate the circle using a polyshape with a large number of sides and plot that polyshape.
p = nsidedpoly(1000, 'Center', [2 3], 'Radius', 5);
plot(p, 'FaceColor', 'r')
axis equal ##### 댓글 수: 3표시숨기기 이전 댓글 수: 2
Walter Roberson 2021년 6월 9일
Remember that an equilateral triangle has a 60 degree range.

댓글을 달려면 로그인하십시오.

amine bouabid 2018년 7월 23일
편집: amine bouabid 2018년 7월 23일
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
##### 댓글 수: 2표시숨기기 이전 댓글 수: 1
Walter Roberson 2021년 5월 9일
Using viscircles() or using plot() with a 'o' marker and large 'MarkerSize' is even shorter.

댓글을 달려면 로그인하십시오.

Devin Marcheselli 2020년 1월 17일
how do i plot a circle using the equation: (x-h).^2+(y-k).^2 = r.^2
##### 댓글 수: 3표시숨기기 이전 댓글 수: 2
Mark Rzewnicki 2020년 3월 17일
Sadly I just saw this now, sorry.
The easiest way to do this would have been to write the original code twice (renaming the variables the second time) and plot both circles using a "hold on" statement.
This makes the code look brutally ugly - you really should vectorize things and define functions when scaling up code like this - but it will get the job done in a pinch. The result would look something like this (5-minute edit of my original code):
% Circle equation: (x-h)^2 + (y-k)^2 = r^2
h = 1;
k = 1;
r = 1;
h1 = 2;
k1 = 2;
r1 = 2;
%% 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;
xmin1 = h1 - r1;
xmax1 = h1 + r1;
X1 = xmin1:x_res:xmax1;
%% 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)];
N1 = length(X1);
x1 = [X1 flip(X1)];
%% 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);
ytemp11 = zeros(1,N1);
ytemp22 = zeros(1,N1);
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
for i = 1:1:N1
square1 = sqrt(r1^2-X1(i)^2 + 2*X1(i)*h1 - h1^2);
ytemp11(i) = k1 - square1;
ytemp22(i) = k1 + square1;
end
y = [ytemp1 ytemp2];
y1 = [ytemp11 ytemp22];
%% plot the (x,y) points
figure(1)
plot(x,y)
hold on
plot(x1,y1)
axis([-5 5 -5 5]);

댓글을 달려면 로그인하십시오.

Ebrahim Soujeri 2021년 3월 26일
The shortest code for it could be this:
function plotcircle(r,x,y)
th = 0:pi/100:2*pi;
f = r * exp(j*th) + x+j*y;
plot(real(f), imag(f));
##### 댓글 수: 3표시숨기기 이전 댓글 수: 2
Walter Roberson 2021년 3월 27일
Notice though that I used the shortcut of plotting a single variable instead of real() and imag() of the expression. This is a "feature" of plot: if you ask to plot() a single variable and the variable is complex valued, then it uses the real component as x and the imaginary component as y. Removing the temporary variables made the code more compact, but the change to plot() only a single expression is using a different algorithm than what you used.
.. and you did say "the shortest", but my version of your approach is shorter ;-)

댓글을 달려면 로그인하십시오.

PATRICIA AGUILAR 2021년 5월 4일
An object moves on a circle of radius 1. Plot this circle and place a point at an angle of 67º. Help me
##### 댓글 수: 1표시숨기기 없음
Walter Roberson 2021년 5월 4일
For 67 degrees, notice that in
xunit = r * cos(th) + x;
yunit = r * sin(th) + y;
you could use cosd() and sind() if your angle were in degrees.

댓글을 달려면 로그인하십시오.

### Community Treasure Hunt

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

Start Hunting!