arr[x][y][z]=a,将数组arr视为三维空间上的“点”。如果a>=6,那么三轴正负方向的“点”的数值+1,该“点”的数值变成a-6,简称为向正负方向扩散。吸收则为相反的操作。如果6>a>=3,那么先正向扩散负向吸收,后正向吸收负向扩散(如果该“点”的值的范围依旧不变)。如果a<=-6,则正负方向吸收,该“点”的值+6。如果-6<a<=-3则与6>a>=3的操作相反。如果3>a>-3则不进行操作。
将正在进行操作的“点”在空间上显示,在不同的尺度下观察是否出现类似于我们世界的事物(比如粒子或者电磁波)。
idea有了,但本人是个菜鸡,不会编程,有没有大佬能够一展身手,非常感谢。
这是个三维点云坐标X、Y、Z与其点云代表的场A之间的对应关系的变化,可以用四个列向量表示。
比如我这里给随机的X,Y和Z,以及A,(PS,我不知道我的理解是不是对的,但大致的方法就可以这样写,可能加减法需要你根据自己想法做一些调整)
clc;clear
n = 1000;%三维粒子总数
X = randi([-10,10],n,1);%X坐标
Y = randi([-10,10],n,1);%Y坐标
Z = randi([-10,10],n,1);%Z坐标
A = randi([-10,10],n,1);%a的值
scatter3(X,Y,Z,20,A,'filled'); colormap(jet)%画图
nt = 1000;
for i = 1:nt
q1 = A>=6;
q2 = A>=3 & A<6;
q3 = A<=-6;
q4 = A>-6 & A<-3;
% 如果a>=6,那么三轴正负方向的“点”的数值+1,该“点”的数值变成a-6,简称为向正负方向扩散
X(q1) = X(q1) + 1; Y(q1) = Y(q1) + 1; Z(q1) = Z(q1)+1; A(q1) = A(q1)-6;
% 如果6>a>=3,那么先正向扩散负向吸收,后正向吸收负向扩散(如果该“点”的值的范围依旧不变)
X(q2) = X(q2) + 1; Y(q2) = Y(q2) + 1; Z(q2) = Z(q2)+1; A(q2) = A(q2)+6;
q22 = q2 & A>=3 & A<6; % 如果该“点”的值的范围依旧不变
X(q22) = X(q22) - 1; Y(q22) = Y(q22) - 1; Z(q22) = Z(q22)-1; A(q22) = A(q22)-6;
% 如果-6<a<=-3则与6>a>=3的操作相反
X(q4) = X(q4) - 1; Y(q4) = Y(q4) - 1; Z(q4) = Z(q4)-1; A(q4) = A(q4)-6;
q44 = q4 & A>-6 & A<-3; % 如果该“点”的值的范围依旧不变
X(q44) = X(q44) - 1; Y(q44) = Y(q44) - 1; Z(q44) = Z(q44)-1; A(q44) = A(q44)+6;
% 如果a<=-6,则正负方向吸收,该“点”的值+6
X(q3) = X(q3) + 1; Y(q3) = Y(q3) + 1; Z(q3) = Z(q3)+1; A(q1) = A(q1)+6;
figure(1);clf % 画图
scatter3(X,Y,Z,20,A,'filled'); colormap(jet)
pause(0.001)
end
最后显示两团粒子相互分离的现象
感觉蛮有意思的
idea不是写java的吗
matlab的散点图应该要用scatter来描述