现在我为自己生成网格(3,4,5点),我寻找顶点并生成网格。
我的问题是,我想生成这样的网格:https://en.wikipedia.org/wiki/Hexadecagon (下面是:15,14,13)。我不想每只手都这么做。有什么办法或诀窍,我怎么能用代码做到这一点呢?我使用了这个:https://github.com/CiaccoDavide/Unity-UI-Polygon,但是我不能添加对撞机并得到在那里生成的实际网格。
发布于 2019-02-11 18:40:40
你想把你的点放在一个单位的圆圈上,然后如果想要的话,就按比例缩放。
给定多个顶点>= 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;
https://stackoverflow.com/questions/54618336
复制相似问题