Matlab球面上有180个点均匀分布(如下图),球直径为1m,球心(0,0,0),想要求出这180个点的球坐标?
将最近的三个点用直线连接为一个三角形,由点是均匀分布知其为等边三角形,且任意相邻的三点都可连成一个等边三角形,于是这180个点就连成了一个正多边形,且它的顶点数是180
数学只存在5种正多边形,而其中没有顶点数是180的,见下表
面数 棱数 顶点数 每面边数 每顶点棱数
正4面体 4 6 4 3 3
正6面体 6 12 8 4 3
正8面体 8 12 6 3 4
正12面体 12 30 20 5 3
正20面体 20 30 12 3 5
由此可知,这里的均匀分布是指向足球表面的点那样类似分布的
由12个正方形和30个六边形组成,那30个六边形是全等的
写了一个不是均匀分布的,供参考
参照地球的经纬度,每隔pi/10取值,经度取[0:pi/10:2*pi],纬度取[0:pi/10:pi],由于matlab计算时的舍入误差使结果偏大,故经纬度都取不到最大值,故共有9*20+1=181个点。
clear
clc
x=zeros(1,180);
y=zeros(1,180);
z=zeros(1,180);
for n=1:9
for k=0:19
x(20*n+k)=0.5*sin(pi*n/10)*cos(pi*k/10);
y(20*n+k)=0.5*sin(pi*n/10)*sin(pi*k/10); %坐标变换
z(20*n+k)=0.5*cos(pi*n/10);
end
end
x
y
z
scatter3(x,y,z,'*','r')
xlabel('x')
ylabel('y')
zlabel('z')
供参考
酱油+炮灰+探路的
太感谢你了,
x(20*n+k)=0.5*sin(pi*n/10)*cos(pi*k/10);
y(20*n+k)=0.5*sin(pi*n/10)*sin(pi*k/10);
z(20*n+k)=0.5*cos(pi*n/10);
应该改成
mm=1;
for n=1:9
for k=0:19
x(mm)=0.5*sin(pi*n/10)*cos(pi*k/10);
y(mm)=0.5*sin(pi*n/10)*sin(pi*k/10);
z(mm)=0.5*cos(pi*n/10);
mm=mm+1;
end
end
这样中间的零点就去掉了,太感谢你了。
按你题中要求的均匀分布,我写的应该不是正确的答案啊