How can I draw a filled circle?

조회 수: 827 (최근 30일)
vatankhah
vatankhah 2013년 9월 13일
댓글: Image Analyst 2023년 6월 21일
I know the radius and the center coordinate of a circle
I want to fill this circle with black color
how can I do this?
  댓글 수: 3
Praveen Pawar
Praveen Pawar 2017년 1월 9일
what a great idea You are genius...
abdalaziz alkassm
abdalaziz alkassm 2020년 7월 17일
Using fill(x,y,'b')

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

채택된 답변

Walter Roberson
Walter Roberson 2013년 9월 13일
  댓글 수: 5
Will Reeves
Will Reeves 2022년 2월 15일
Yes please.. + 1 for that request. please implement "FaceColor" for a viscircles property! I need to draw thousands of circles in a plot...
Will Reeves
Will Reeves 2023년 6월 21일
Also, just for completness.. Is there a "quality setting" somewhere for rectangle (when curvature=1) that draws a circle instead of a load of straight lines?
for example:

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

추가 답변 (7개)

Shahriar
Shahriar 2013년 11월 9일
Very simple. The following will draw a filled circle at (1,1) with red color. Change it as you wish.
plot(1, 1, '.r', 'MarkerSize',69)
  댓글 수: 5
Image Analyst
Image Analyst 2022년 10월 6일
@Sathish Kumar and @Patriek Bruurs, that's correct. The marker size is relative to your screen or figure size or something. It is not relative to the scale used for your x and y axes. So zooming in and out will probably not change the marker size, and the marker size has nothing at all to do with the spatial calibration scale of your x and y. So for example if you wanted a big spot you'd use a markersize of, say, 100 regardless if your x and y axes went from 0-1 or from 0 to a billion. The marker size is NOT the diameter of the spot in units of your graph. So if your axis went from 0 to a billion you'd still use a marker size of 100, not a marker size of 30 million. Also zooming in or out of the axes does not change the marker size - you can imagine scenarios where if it did, it would be a disaster, with the marker covering up some small region you wanted to scrutinize.
Walter Roberson
Walter Roberson 2022년 10월 7일
I did some measurements on my screen last night. To within measurement error, the spot size produced by plot() grew linearly -- for example spot size 1000 was twice as large as spot size 500. But I was not able to figure out what the units were; the units did not make sense in inches or mm or points. For example marker size 1000 was approximately 66.4 mm diameter -- between 66.1 and 66.8 (I cannot get my digital calipers flat on the screen and it is a judgement call about where exactly the bounds are.) (Admittedly, due to measurement error, it just might be the case that the spot size is slightly nonlinear.)
My display is a larger one, but is below the bounds at which MATLAB starts lying about resolutions

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


Image Analyst
Image Analyst 2013년 9월 13일
To create a 2D logical image of a solid circle (a disc), you can use code like this:
% Create a logical image of a circle with specified
% diameter, center, and image size.
% First create the image.
imageSizeX = 640;
imageSizeY = 480;
[columnsInImage rowsInImage] = meshgrid(1:imageSizeX, 1:imageSizeY);
% Next create the circle in the image.
centerX = 320;
centerY = 240;
radius = 100;
circlePixels = (rowsInImage - centerY).^2 ...
+ (columnsInImage - centerX).^2 <= radius.^2;
% circlePixels is a 2D "logical" array.
% Now, display it.
image(circlePixels) ;
colormap([0 0 0; 1 1 1]);
title('Binary image of a circle');
  댓글 수: 10
Sharne Fernandes
Sharne Fernandes 2022년 8월 21일
@Image Analyst, could you suggest to me a way of adding more than 1 circles using these steps?
Thank you
Walter Roberson
Walter Roberson 2022년 8월 23일
% Create a logical image of a circle with specified
% diameter, center, and image size.
% First create the image.
imageSizeX = 640;
imageSizeY = 480;
[columnsInImage rowsInImage] = meshgrid(1:imageSizeX, 1:imageSizeY);
% Next create the circle in the image.
centerX = [100 180 300];
centerY = [150 30 400];
radius = [100 20 50];
circlePixels = any((rowsInImage(:) - centerY).^2 ...
+ (columnsInImage(:) - centerX).^2 <= radius.^2, 2);
circlePixels = reshape(circlePixels, imageSizeY, imageSizeX);
% circlePixels is a 2D "logical" array.
% Now, display it.
image(circlePixels) ;
colormap([0 0 0; 1 1 1]);
hold on
scatter(centerX, centerY, 'r+');
hold off
title('Binary image of circles');

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


Chad Greene
Chad Greene 2014년 11월 20일
A few FEX submissions make it easy:
circles(x,y,radius,'color','black')
  댓글 수: 2
Stevie P
Stevie P 2021년 2월 6일
This is the easiest and most versatile answer!
Image Analyst
Image Analyst 2021년 2월 6일
Now there is a viscircles function built in to the Image Processing Toolbox
viscircles([x, y], radius);
This can handle vectors of centers and radii, in addition to just one.

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


ABDULRAHMAN HAJE KARIM ALNAJAR
ABDULRAHMAN HAJE KARIM ALNAJAR 2018년 8월 8일
편집: Walter Roberson 2019년 11월 10일
Simply, use the following command:
I = insertShape(I,'FilledCircle',[x y r],'color',[1 1 1],'LineWidth',5);
[x y] is the centre coordinates r is the radius
Note, you need Computer Vision Toolbox to run this command.
  댓글 수: 1
Walter Roberson
Walter Roberson 2019년 11월 10일
This is a good routine to use if you have a matrix that you want to draw a circle into. It is not, however, a good routine to draw a circle on the display.

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


vatankhah
vatankhah 2013년 9월 13일
편집: vatankhah 2013년 9월 13일
thanks for the answer but I want just a simple command in matlab to fill a circle that is plotted with specified radius and center coordinate
  댓글 수: 3
Will Reeves
Will Reeves 2023년 6월 21일
편집: Will Reeves 2023년 6월 21일
... but it seems as if this is fairly course angular resolution and are therefore not really circles. Please can this adjusted in a future release so that you can chose the angular precision?
Image Analyst
Image Analyst 2023년 6월 21일
@Will Reeves remember we're dealing with digital computers that use discrete values and don't have infinite precision. If you're really going to zoom way, way in, so much so that the circle has "kinks" in it because it's made up as very short line segments, you can make those line segments as small as you want by increasing the angular resolution in the code in the FAQ:

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


vatankhah
vatankhah 2013년 9월 14일
thanks a lot for your help, it was useful

Anton
Anton 2014년 9월 24일
편집: Walter Roberson 2019년 11월 10일
Use "area" command. Typically used to fill area under y=f(x) curve.
Using Rectangle command has 2 inconveniences: 1) They use figure axes, not the graph axes (see this submission for help http://www.mathworks.co.uk/matlabcentral/fileexchange/30347-sigplot/content/sigplot/sigplot/BasicFunctions/dsxy2figxy.m )
2) a consequence of 1 in fact: if you zoom or move the graph your circle will remain in "old" position and scale, which is annoying.
This is how you draw a filled circle of radius R at (x,y) in the axis of your graph using "area" command:
Ang = 0:0.01:2*pi; %angle from 0 to 2pi with increment of 0.01 rad. CircX=R*cos(Ang); CircY=R*sin(Ang);
h=area(X+CircX,Y+CircY);
set(h,'FaceColor',[.7 0 0]) %colour of your circle in RGB, [0 0 0] black; [1 1 1] white set(h,'LineStyle','none')
% unfortunately you have to remove the line: because circle is not a function strictly speaking. % "area" command tries to fill area below your function which leaves a line-artefact connecting your circle with X axis.
  댓글 수: 1
Walter Roberson
Walter Roberson 2019년 11월 10일
? rectangle() uses data units, which are axes relative. It does not use figure units.
annotation() uses figure units though.

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

카테고리

Help CenterFile Exchange에서 Animation에 대해 자세히 알아보기

Community Treasure Hunt

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

Start Hunting!

Translated by