|
|
发表于 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
|
评分
-
查看全部评分
|