The code below generates random points inside a regular hexagon. I need the second coordinate y of the points to be an angle from 0:2pi. How can I modify the code please?

numEdges = 6;
R = 8;
xVertex = R * cos((0:6)*pi/3);
yVertex = R * sin((0:6)*pi/3);
xVertex = [xVertex , xVertex(1)];
yVertex = [yVertex , yVertex(1)];
requiredPoints = 20;
plot(xVertex, yVertex, 'b+-', 'LineWidth', 3);
grid on;
numPointsIn = 1;
while numPointsIn < requiredPoints
testx = 2 * R * rand(1) - R;
testy = 2 * R * rand(1) - R;
if inpolygon(testx, testy, xVertex, yVertex)
x(numPointsIn) = testx;
y(numPointsIn) = testy;
numPointsIn = numPointsIn + 1;
end
end
hold on;
plot(x,y,'r+', 'MarkerSize', 10, 'LineWidth', 2);

Answers (1)

Something like
yAngle = atan2(y, x);

7 Comments

Where should I add it in the code? Which part? I tried like this and nothing changed:
numEdges = 6;
R = 8;
xVertex = R * cos((0:6)*pi/3);
yVertex = R * sin((0:6)*pi/3);
yAngle = atan2(y, x);
xVertex = [xVertex , xVertex(1)];
yVertex = [yVertex , yVertex(1)];
requiredPoints = 20;
plot(xVertex, yVertex, 'b+-', 'LineWidth', 3);
grid on;
numPointsIn = 1;
while numPointsIn < requiredPoints
testx = 2 * R * rand(1) - R;
testy = 2 * R * rand(1) - R;
if inpolygon(testx, testy, xVertex, yVertex)
x(numPointsIn) = testx;
y(numPointsIn) = testy;
numPointsIn = numPointsIn + 1;
end
end
hold on;
plot(x,y,'r+', 'MarkerSize', 10, 'LineWidth', 2);
You can add it at the very end, after you have x and y. This will get you the angles of every point.
I tried again and nothing changed. Does it function when you try?
You put it in the wrong place. I said to "add it at the very end, after you have x and y" and you did not do that. This works:
R = 8;
xVertex = R * cos((0:6)*pi/3);
yVertex = R * sin((0:6)*pi/3);
xVertex = [xVertex , xVertex(1)];
yVertex = [yVertex , yVertex(1)];
requiredPoints = 20;
plot(xVertex, yVertex, 'b+-', 'LineWidth', 3);
grid on;
numPointsIn = 1;
while numPointsIn < requiredPoints
testx = 2 * R * rand(1) - R;
testy = 2 * R * rand(1) - R;
if inpolygon(testx, testy, xVertex, yVertex)
x(numPointsIn) = testx;
y(numPointsIn) = testy;
numPointsIn = numPointsIn + 1;
end
end
hold on;
plot(x,y,'r+', 'MarkerSize', 10, 'LineWidth', 2);
yAngle = atan2(y, x) + pi
and NumEdges is not needed - you never use it.
Ok but the angle should show in the graph, so Y should not be -8:8 but 0:2pi, or not? Thank you very much.
yAngle is in the range 0-2*pi, not -8 to 8. y is in that range, but not the angles.
To have the angle show up on the graph, use the sprintf() and text() functions.
str = sprintf('yAngle(1) = %f', yAngle(1));
text(1., .2, str);
I think the desired output is
yAngle = atan2(y, x) + pi;
plot(x,yAngle,'r+', 'MarkerSize', 10, 'LineWidth', 2);

This question is closed.

Asked:

on 21 Jan 2018

Closed:

on 20 Aug 2021

Community Treasure Hunt

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

Start Hunting!