|  | 
 
 发表于 2013-4-25 09:58:05
|
显示全部楼层 
| 顶,孟总和各位歌姬歌基们辛苦,能参与这样的企划好幸运。 .JPG) 不过孟总的算法没看懂orz。倒是物理上电子斥力算法很容易理解。很快就得了个结果。同样贴个代码好了。
 —————————————以下代码—————————————————————————
 function outdata=PointOnBall()
 %利用动力学方法和引力公式求球面均匀分布点
 close all;
 NumPoint=21;
 data=rand(3,NumPoint);
 for i=1:NumPoint
 data(:,i)=data(:,i)/norm(data(:,i));
 end%归一化获得球面点
 InfCom=1e-8;
 step=0.3;%运动步长
 for count=1:800
 for i=1:NumPoint
 Ptemp(:,i)=sub_motion(data,i,step);
 end
 data=Ptemp;
 sForPlot(count)=data(1,1);
 end
 plot(sForPlot);%看看收敛与否
 outdata=data;
 %以下绘图部分
 figure;
 ci=1;
 for t1=0:pi/10:2*pi
 cj=1;
 for t2=-pi:pi/10:pi
 xx(ci,cj)=t1;
 yy(ci,cj)=t2;
 Ball1(ci,cj)=cos(t2)*cos(t1);
 Ball2(ci,cj)=cos(t2)*sin(t1);
 Ball3(ci,cj)=sin(t2);
 cj=cj+1;
 end
 ci=ci+1;
 end
 mesh(Ball1,Ball2,Ball3);
 hold on;
 plot3(outdata(1,:),outdata(2,:),outdata(3,:),'or');
 axis equal;
 hold off
 end
 
 
 
 function Pt=sub_motion(data,i,step)
 N=length(data);
 F=[0;0;0];
 InfCom=1e-8;
 for j=1:N
 if j~=i
 vec=data(:,i)-data(:,j);
 ft=vec/((vec'*vec)+InfCom);%斥力公式,因为计算万有斥力麻烦,简化为倒数型斥力
 F=F+ft;
 end
 
 end
 Ptemp=data(:,i)+F*step;%沿力方向直加
 Pt=Ptemp/norm(Ptemp);
 end
 
 ——————————————代码结束————————————————
 
 
 
   
 咏唱区发这个是不是有歪楼倾向233
 
 | 
评分
查看全部评分
 |