You are now following this question
- You will see updates in your followed content feed.
 - You may receive emails, depending on your communication preferences.
 
Randomly generated complex polygon with user input
    2 views (last 30 days)
  
       Show older comments
    
Accepted Answer
  Image Analyst
      
      
 on 5 Apr 2013
        How about using ginput() or impoly()?
17 Comments
  Matthew
 on 5 Apr 2013
				No i need the function to draw the polygon not the user the user just supplies the number of vertices.
  Image Analyst
      
      
 on 5 Apr 2013
				Use inputdlg() to get an integer. Then
coordinates = rand(numberOfVertices, 2);
coordinates(1,:) = [0, 0]; % Force first coord to 0,0
plot(coordinates(:,1), coordinates(:,2), 'r-');
Note - it's very "complex" = it can even have overlapping regions (figure 8's). If you don't want that, you have to find the average (centroid) and find all the angles, and sort by angle. At least that's one way.
  Matthew
 on 5 Apr 2013
				I tried but i just got this error.
Undefined function or variable 'numberOfVertices'.
Error in plotfunc (line 3) coordinates = rand(numberOfVertices, 2);
prompt = {'Enter Number of verticies:'};
numberOfVerticies = inputdlg(prompt);
coordinates = rand(numberOfVertices, 2);
coordinates(1,:) = [0, 0]; % Force first coord to 0,0
plot(coordinates(:,1), coordinates(:,2), 'r-');
  Image Analyst
      
      
 on 5 Apr 2013
				
      Edited: Image Analyst
      
      
 on 5 Apr 2013
  
			Sorry - misspelled it. Try this:
prompt = {'Enter Number of vertices:'};
numberOfVertices = str2num(cell2mat(inputdlg(prompt, 'enter a number', 5)))
coordinates = rand(numberOfVertices, 2);
coordinates(1,:) = [0, 0]; % Force first coord to 0,0
coordinates(end+1,:) = [0, 0]; % Force last coord to 0,0
plot(coordinates(:,1), coordinates(:,2), 'bo-');
grid on;
  Matthew
 on 6 Apr 2013
				Exactly what i need thank you for the help. One last thing, is there an easy way to fill the plot with a colour?
  Matthew
 on 7 Apr 2013
				i tried both i just cant get them to work. No way of typing fill works i'm stuck on it. I want it to use 'RGB::random()' for the color so all would be different.
function plotfunc()
prompt = {'Enter Number of vertices:',}
numberOfVertices = str2num(cell2mat(inputdlg(prompt, 'enter a number', 5)))
coordinates = rand(numberOfVertices, 2);
coordinates(1,:) = [0, 0]; % Force first coord to 0,0
coordinates(end+1,:) = [0, 0]; % Force last coord to 0,0
plot(coordinates(:,1), coordinates(:,2));
fill(plot(coordinates(:,1), coordinates(:,2)),'RGB::random()');
grid on;
end
  Matthew
 on 7 Apr 2013
				
      Edited: Image Analyst
      
      
 on 7 Apr 2013
  
			Is it just me getting the fill(X,Y,C) wrong?
  Image Analyst
      
      
 on 7 Apr 2013
				
      Edited: Image Analyst
      
      
 on 7 Apr 2013
  
			You can't put plot() inside fill(). Take it out. Try this:
% prompt = {'Enter Number of vertices:',}
% numberOfVertices = str2num(cell2mat(inputdlg(prompt, 'enter a number', 5)))
numberOfVertices = 7; % Fixed at 7 for this demo.
coordinates = rand(numberOfVertices, 2);
coordinates(1,:) = [0, 0]; % Force first coord to 0,0
coordinates(end+1,:) = [0, 0]; % Force last coord to 0,0
plot(coordinates(:,1), coordinates(:,2));
grid on;
patch(coordinates(:,1), coordinates(:,2),'r'); % Can use fill() also.
grid on;
  Matthew
 on 7 Apr 2013
				Yep that works :) but I can't get the 'RGB::random()' to work as I want it to make a random colour each time.
  Image Analyst
      
      
 on 7 Apr 2013
				Where did you see 'RGB::random()' ? I don't see it in the help as one of the 'ColorSpec' types.
  Image Analyst
      
      
 on 7 Apr 2013
				If it ever was allowed, it's not now, not that I can find. See the help. You can use
fill(x, y, 'Color', rand());
if you want a random color.
  Matthew
 on 7 Apr 2013
				For some reason this keeps giving me green.
patch(coordinates(:,1), coordinates(:,2),rand());
  Image Analyst
      
      
 on 7 Apr 2013
				Sorry, you need 3 numbers. Try this:
randomColor = rand(1,3)
patch(coordinates(:,1), coordinates(:,2), randomColor); % Can use fill() also.
  Image Analyst
      
      
 on 7 Apr 2013
				There is an 'xdir' property where you can reverse the direction. I think it's something like
set(gca, 'xdir', 'reverse');
or something like that. If this is solved, then mark the answer as "Accepted."
More Answers (0)
See Also
Categories
				Find more on Surfaces, Volumes, and Polygons in Help Center and File Exchange
			
	Products
Community Treasure Hunt
Find the treasures in MATLAB Central and discover how the community can help you!
Start Hunting!An Error Occurred
Unable to complete the action because of changes made to the page. Reload the page to see its updated state.
Select a Web Site
Choose a web site to get translated content where available and see local events and offers. Based on your location, we recommend that you select: .
You can also select a web site from the following list
How to Get Best Site Performance
Select the China site (in Chinese or English) for best site performance. Other MathWorks country sites are not optimized for visits from your location.
Americas
- América Latina (Español)
 - Canada (English)
 - United States (English)
 
Europe
- Belgium (English)
 - Denmark (English)
 - Deutschland (Deutsch)
 - España (Español)
 - Finland (English)
 - France (Français)
 - Ireland (English)
 - Italia (Italiano)
 - Luxembourg (English)
 
- Netherlands (English)
 - Norway (English)
 - Österreich (Deutsch)
 - Portugal (English)
 - Sweden (English)
 - Switzerland
 - United Kingdom(English)
 
Asia Pacific
- Australia (English)
 - India (English)
 - New Zealand (English)
 - 中国
 - 日本Japanese (日本語)
 - 한국Korean (한국어)