Randomly generated complex polygon with user input

I want to generate a randomly shaped complex polygon which has start point (0,0) and has vertices defined by user input.

 Respuesta aceptada

Image Analyst
Image Analyst el 5 de Abr. de 2013
How about using ginput() or impoly()?

17 comentarios

Matthew
Matthew el 5 de Abr. de 2013
No i need the function to draw the polygon not the user the user just supplies the number of vertices.
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.
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
Image Analyst el 5 de Abr. de 2013
Editada: Image Analyst el 5 de Abr. de 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
Matthew el 6 de Abr. de 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?
Try patch() or fill().
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
Matthew el 7 de Abr. de 2013
Editada: Image Analyst el 7 de Abr. de 2013
Is it just me getting the fill(X,Y,C) wrong?
Image Analyst
Image Analyst el 7 de Abr. de 2013
Editada: Image Analyst el 7 de Abr. de 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
Matthew el 7 de Abr. de 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.
Where did you see 'RGB::random()' ? I don't see it in the help as one of the 'ColorSpec' types.
Matthew
Matthew el 7 de Abr. de 2013
It was on a google search result for matlab random colours.
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.
For some reason this keeps giving me green.
patch(coordinates(:,1), coordinates(:,2),rand());
Sorry, you need 3 numbers. Try this:
randomColor = rand(1,3)
patch(coordinates(:,1), coordinates(:,2), randomColor); % Can use fill() also.
Matthew
Matthew el 7 de Abr. de 2013
YES! it works :) thank you. Now I just have to flip it in the x and y axis.
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."

Iniciar sesión para comentar.

Más respuestas (0)

Categorías

Más información sobre Surfaces, Volumes, and Polygons en Centro de ayuda y File Exchange.

Community Treasure Hunt

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

Start Hunting!

Translated by