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

6,391 次查看(过去 30 天)

采纳的回答

MathWorks Support Team
编辑:MathWorks Support Team 2022-3-23
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)
  18 个评论
Walter Roberson
Walter Roberson 2022-9-9
You would get a different error message if you had a script with a function after and the function did not have a matching end statement.
That error could happen if you try to create a function inside a script in a MATLAB version before R2015b. It might perhaps also happen if you try to define a function at the command line (I seem to remember the wording as being slightly different for that case, but perhaps that is the wording in an older version than I am using.)

请先登录,再进行评论。

更多回答(9 个)

serwan Bamerni
serwan Bamerni 2016-2-17
编辑:MathWorks Support Team 2023-5-26,6:02
There is now a function called viscircles():
  3 个评论

请先登录,再进行评论。


Steven Lord
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 个评论

请先登录,再进行评论。


Supoj Choachaicharoenkul
plot(x, y, 'bo', 'MarkerSize', 50);
  2 个评论
Walter Roberson
Walter Roberson 2022-2-5
Depending which graphics driver you are using, when you ask for a circle marker drawn large, the result might not look circular. The drivers approximate a circle but they do not generally take into consideration the size of the circle when doing the approximation so it might look bad.

请先登录,再进行评论。


amine bouabid
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

Ebrahim Soujeri
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 个评论
Walter Roberson
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
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
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.

请先登录,再进行评论。


Devin Marcheselli
Devin Marcheselli 2020-1-17
how do i plot a circle using the equation: (x-h).^2+(y-k).^2 = r.^2
  3 个评论
Mark Rzewnicki
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
% Center: (h,k) Radius: r
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]);

请先登录,再进行评论。


ali yaman
ali yaman 2022-4-14
编辑:ali yaman 2022-4-14
I think there is no need to any of the above solutions, you can draw a circle by one of the following codes.
Let's say radius is 5
fimplicit(@(x,y) x^2+y^2-25)
ezplot('x^2+y^2-25',[-5,5])
% Note that the 25 in the codes comes from the square of 5. If you want
% draw a circle with 8 radius then write 64 instead of 25.
  4 个评论
ali yaman
ali yaman 2022-4-19
Thanks @Walter Roberson. I did not know the default drawing area for fimplicit is [-5 5].

请先登录,再进行评论。


Sam Zebrado
Sam Zebrado 2022-6-12
编辑:Sam Zebrado 2022-6-12
You can use a one-line function like this if you need to plot circles on unequal axis but do not what them to look like ellipses:
%% a function to plot using different radius
fc_circle_plot = @(xs,ys,rs,varargin)...
arrayfun(@(x,y,r)plot(x,y,'o','MarkerSize',r,varargin{:}),xs,ys,rs,'UniformOutput',false);
%% one demo
x = 1:5;
y = rand(1,5);
radius = randi([10,20],1,5);% random integer from 10 to 20, with a size of [1,5]
figure;
hold on;
fc_circle_plot(x,y,radius,...
'Color','b','LineWidth',2 ... any parameters supported by plot() could be placed here
);
hold off;
p.s. You can also replace function plot as other functions for other usages.
  3 个评论
DGM
DGM 2023-3-6
%% a function to plot using different radius
fc_circle_plot = @(xs,ys,rs,varargin)...
arrayfun(@(x,y,r)plot(x,y,'o','MarkerSize',r,varargin{:}),xs,ys,rs,'UniformOutput',false);
% some data
x = 1:5;
y = rand(1,5);
radius = randi([10,20],1,5);% random integer from 10 to 20, with a size of [1,5]
% say there's a line plot in the figure to begin with
plot(x,y) % i'm going to reuse the same points
% then you can use hold to plot other things
hold on;
fc_circle_plot(x,y,radius,...
'Color','b','LineWidth',2 ... any parameters supported by plot() could be placed here
);
hold off;

请先登录,再进行评论。

类别

Find more on Polar 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!

Translated by