How can I draw a filled circle?
    237 vues (au cours des 30 derniers jours)
  
       Afficher commentaires plus anciens
    
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 commentaires
Réponse acceptée
  Walter Roberson
      
      
 le 13 Sep 2013
        6 commentaires
  Will Reeves
      
 le 21 Juin 2023
				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:

  DGM
      
      
 le 9 Juil 2025
				As far as I know, rectangle() will use 4 vertices when curvature is 0, and 100 vertices otherwise.  There is no resolution setting.
Plus de réponses (7)
  Shahriar
      
 le 9 Nov 2013
        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)
6 commentaires
  Walter Roberson
      
      
 le 7 Oct 2022
				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
      
      
 le 13 Sep 2013
        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 commentaires
  Sharne Fernandes
 le 21 Août 2022
				@Image Analyst, could you suggest to me a way of adding  more than 1 circles using these steps?
Thank you 
  Walter Roberson
      
      
 le 23 Août 2022
				% 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
      
      
 le 20 Nov 2014
        circles(x,y,radius,'color','black')
2 commentaires
  Image Analyst
      
      
 le 6 Fév 2021
				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
 le 8 Août 2018
        
      Modifié(e) : Walter Roberson
      
      
 le 10 Nov 2019
  
      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 commentaire
  Walter Roberson
      
      
 le 10 Nov 2019
				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
      
 le 13 Sep 2013
        
      Modifié(e) : vatankhah
      
 le 13 Sep 2013
  
      3 commentaires
  Will Reeves
      
 le 21 Juin 2023
				
      Modifié(e) : Will Reeves
      
 le 21 Juin 2023
  
			... 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
      
      
 le 21 Juin 2023
				@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:
  Anton
 le 24 Sep 2014
        
      Modifié(e) : Walter Roberson
      
      
 le 10 Nov 2019
  
      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 commentaire
  Walter Roberson
      
      
 le 10 Nov 2019
				? rectangle() uses data units, which are axes relative. It does not use figure units. 
annotation() uses figure units though.
Voir également
Catégories
				En savoir plus sur Image Processing Toolbox dans Help Center et File Exchange
			
	Community Treasure Hunt
Find the treasures in MATLAB Central and discover how the community can help you!
Start Hunting!






















