目前我为自己生成网格(3、4、5个顶点),我正在寻找这些顶点并生成网格。
我的问题是我想生成这样的网格: https://en.wikipedia.org/wiki/Hexadecagon(及以下:15、14、13 ..个顶点) 而且我不想单手这样做。有没有办法或技巧,如何用代码做到这一点?我使用了这个:https://github.com/CiaccoDavide/Unity-UI-Polygon,但是我无法添加碰撞器并获得在那里生成的实际网格物体。
答案 0 :(得分:1)
您要将点拟合到一个单位圆上,然后根据需要缩放。
给定多个顶点> = 3,每个顶点之间的夹角为360 /(顶点数量)
例如,对于5个顶点,每个顶点必须相隔72度。
现在,对于每个顶点,起始角均为0度,x坐标是起始角的余弦,y坐标是起始角的正弦。在每个顶点之后,以上述计算的角度增加起始角度。
下面是一些Matlab代码,该代码演示了我对包含13个顶点的多边形的要求:
num_verts = 13;
angle = 360/num_verts;
vertices = zeros(num_verts+1,2); % extra vertex just to plot the complete polygon
for ii=1:num_verts
vertices(ii,1) = cosd(angle*ii);
vertices(ii,2) = sind(angle*ii);
end
vertices(end,:) = vertices(1,:);
figure;
plot(vertices(:,1),vertices(:,2))
axis equal;
如果要对多边形引入一些随机性,可以将起始角度旋转一些随机量,或者将最终坐标乘以某个随机量。
例如,在这里,我创建了一个五边形,旋转并缩放了它。
num_verts = 5;
angle = 360/num_verts;
vertices = zeros(num_verts+1,2); % extra vertex just to plot the complete polygon
rand_angle_shift = 360*rand();
for ii=1:num_verts
vertices(ii,1) = cosd(angle*ii + rand_angle_shift);
vertices(ii,2) = sind(angle*ii + rand_angle_shift);
end
vertices(end,:) = vertices(1,:);
vertices = vertices * 20;
figure;
plot(vertices(:,1),vertices(:,2))
axis equal;
您甚至可以将每个顶点乘以随机数量,以获得新的奇异(但有效)的多边形:
num_verts = 6;
angle = 360/num_verts;
vertices = zeros(num_verts+1,2); % extra vertex just to plot the complete polygon
rand_angle_shift = 360*rand();
for ii=1:num_verts
vertices(ii,1) = cosd(angle*ii + rand_angle_shift);
vertices(ii,2) = sind(angle*ii + rand_angle_shift);
end
vertices = vertices .* rand(num_verts+1,2);
vertices(end,:) = vertices(1,:);
figure;
plot(vertices(:,1),vertices(:,2))
axis equal;