我正在制作一个朋友在朱莉娅写的节目。我们必须为大学做一些工作,特别是对于一门名为“动态建模”的课程。
重要的是重现Kashtan和Alon的一些伟大作品;也许你知道他们关于生物网络和遗传算法的出版物。现在,我的朋友让我知道,我们是否可以在3D中绘制一些东西而且我不知道该怎么做。他给了我程序的一些部分(见下面的代码)并写信给我,看看是否可以从一个坐标(x,y,z)到另一个坐标(x,y,z)画一条线。你知道朱莉娅怎么做吗?
module ShowGateNet
export
showGate,
setGattaStruct;
using Plots;
using BPIPopulation;
abstract GrafGate
type GGate <: GrafGate
in1::Array{Integer};
in2::Array{Integer};
out::Array{Integer};
end;
#---------------------------------------------------------------
# creates a 2D-matrix for almost a circle:
# mx:: x-coordinate of the center circle
# my:: y-coordinate of the center circle
# r:: radius of the circle
#---------------------------------------------------------------
function circNumba(rx=2::Integer,cx=0::Integer,cy=0::Integer, cz=0)
k=0:360;
c=zeros(length(k),4);
c[:,1] = k;
c[:,2] = round(cos(radian(k))*rx+cx,3);
c[:,3] = cy;
c[:,4] = round(sin(radian(k))*rx+cz,3);
return c;
end;
function radian(grad)
return round(2*pi*grad/360,3);
end
function showGate(cx,cy,cz,numba)
r = 2;
centr = [cx;cy;cz];
# A = [centr[1]-1;centr[2];centr[3]];
# B = [centr[1];centr[2]+1;centr[3]];
C = [centr[1];centr[2]-1;centr[3]];
in2 = [centr[1]-3;centr[2]+1;centr[3]-1];
in1 = [centr[1]+3;centr[2]-1;centr[3]-1];
K = [centr[1];centr[2];centr[3]-1];
O = [centr[1];centr[2];centr[3]-3];
kCirc = circNumba(r,K[1],K[2],K[3]);
#display(plot!(kCirc[:,2],kCirc[:,3],kCirc[:,4],title="test-circ",line=3,color="red",zlabel="Z",xlabel="X",ylabel="Y"));
#display(plot!([centr[1],centr[1],centr[1]],[centr[2],centr[2],centr[2]],[centr[3]-1-r,centr[3]-1-r,centr[3]-3-r],w=3,color="blue"));
#display(plot!([centr[1]-3,centr[1]-3,centr[1]-2],[centr[2],centr[2],centr[2]],[centr[3],centr[3],centr[3]]-1,w=3,color="green")); #A nach K
#display(plot!([centr[1]+2,centr[1]+2,centr[1]+3],[centr[2],centr[2],centr[2]],[centr[3],centr[3],centr[3]]-1,w=3,color="green")); #A nach K
display(plot(kCirc[:,2],kCirc[:,3],kCirc[:,4],title="test-circ",line=3,color="red",zlabel="Z",xlabel="X",ylabel="Y"));
plot!([centr[1],centr[1],centr[1]],[centr[2],centr[2],centr[2]],[centr[3]-1-r,centr[3]-1-r,centr[3]-3-r],w=3,color="blue");#senkrechte
plot!([centr[1]-3,centr[1]-3,centr[1]-2],[centr[2],centr[2],centr[2]],[centr[3],centr[3],centr[3]]-1,w=3,color="green"); #A nach K
plot!([centr[1]+2,centr[1]+2,centr[1]+3],[centr[2],centr[2],centr[2]],[centr[3],centr[3],centr[3]]-1,w=3,color="green"); #A nach K
plotNumba(K,numba);
end;
function showGate2(cx,cy,cz,numba)
r = 2;
centr = [cx;cy;cz];
# A = [centr[1]-1;centr[2];centr[3]];
# B = [centr[1];centr[2]+1;centr[3]];
C = [centr[1];centr[2]-1;centr[3]];
in2 = [centr[1]+1;centr[2]+1;centr[3]];
in1 = [centr[1]+1;centr[2]-1;centr[3]];
K = [centr[1];centr[2]-r*2;centr[3]-1];
O = [centr[1];centr[2];centr[3]-1];
kCirc = circNumba(r,K[1],K[2],K[3]);
display(plot(kCirc[:,2],kCirc[:,3],kCirc[:,4],title="test-circ",line=3,color="red",zlabel="Z",xlabel="X",ylabel="Y"));
plot!([centr[1],centr[1],centr[1]],[centr[2],centr[2],centr[2]],[centr[3]-1-r,centr[3]-1-r,centr[3]-3-r],w=3,color="blue");
plotNumba(K,numba);
end;
function showGate2!(cx,cy,cz,numba)
r = 2;
centr = [cx;cy;cz];
# A = [centr[1]-1;centr[2];centr[3]];
# B = [centr[1];centr[2]+1;centr[3]];
C = [centr[1];centr[2]-1;centr[3]];
in2 = [centr[1]+1;centr[2]+1;centr[3]];
in1 = [centr[1]+1;centr[2]-1;centr[3]];
K = [centr[1];centr[2];centr[3]-1];
O = [centr[1];centr[2];centr[3]-1];
kCirc = circNumba(r,K[1],K[2],K[3]);
plot!(kCirc[:,2],kCirc[:,3],kCirc[:,4],title="test-circ",line=3,color="red",zlabel="Z",xlabel="X",ylabel="Y");
plot!([centr[1],centr[1],centr[1]],[centr[2],centr[2],centr[2]],[centr[3]-1-r,centr[3]-1-r,centr[3]-3-r],w=3,color="blue");
plot!([centr[1]-3,centr[1]-3,centr[1]-2],[centr[2],centr[2],centr[2]],[centr[3],centr[3],centr[3]]-1,w=3,color="green"); #A nach K
plot!([centr[1]+2,centr[1]+2,centr[1]+3],[centr[2],centr[2],centr[2]],[centr[3],centr[3],centr[3]]-1,w=3,color="green"); #A nach K
plotNumba(K,numba);
end;
function showGateIn!(cx,cy,cz,numba)
r = 2;
centr = [cx;cy;cz];
# A = [centr[1]-1;centr[2];centr[3]];
# B = [centr[1];centr[2]+1;centr[3]];
C = [centr[1];centr[2]-1;centr[3]];
in2 = [centr[1]+1;centr[2]+1;centr[3]];
in1 = [centr[1]+1;centr[2]-1;centr[3]];
K = [centr[1];centr[2];centr[3]-1];
O = [centr[1];centr[2];centr[3]-1];
kCirc = circNumba(r,K[1],K[2],K[3]);
plot!(kCirc[:,2],kCirc[:,3],kCirc[:,4],title="test-circ",line=3,color="red",zlabel="Z",xlabel="X",ylabel="Y");
if numba == 1
display(plot!([centr[1],centr[1],centr[1]],[centr[2],centr[2],centr[2]],[centr[3]-1-r,centr[3]-1-r,centr[3]-3-r],w=3,color="blue"));
else
plot!([centr[1],centr[1],centr[1]],[centr[2],centr[2],centr[2]],[centr[3]-1-r,centr[3]-1-r,centr[3]-3-r],w=3,color="blue");
end;
plotNumba(K,numba);
end;
function showGateL!(cx,cy,cz,numba)
r = 2;
centr = [cx;cy;cz];
# A = [centr[1]-1;centr[2];centr[3]];
# B = [centr[1];centr[2]+1;centr[3]];
C = [centr[1];centr[2]-1;centr[3]];
in2 = [centr[1]+1;centr[2]+1;centr[3]];
in1 = [centr[1]+1;centr[2]-1;centr[3]];
K = [centr[1]-1-r;centr[2];centr[3]-1];
O = [centr[1];centr[2];centr[3]-1];
kCirc = circNumba(r,K[1],K[2],K[3]);
plot!(kCirc[:,2],kCirc[:,3],kCirc[:,4],title="test-circ",line=3,color="red");
plot!([centr[1]-1,centr[1]-1,centr[1]],[centr[2],centr[2],centr[2]],[centr[3],centr[3],centr[3]]-1,w=3,color="green"); #A nach K
plot!([centr[1],centr[1],centr[1]+1],[centr[2],centr[2],centr[2]]+0.5,[centr[3]-1,centr[3]-1,centr[3]-1],w=3,color="green");# B nach D
plot!([centr[1],centr[1],centr[1]+1],[centr[2],centr[2],centr[2]]-0.5,[centr[3],centr[3],centr[3]]-1,w=3,color="green");# C nach E
plot!([centr[1],centr[1],centr[1]],[centr[2]-0.5,centr[2]-0.5,centr[2]+0.5],[centr[3],centr[3],centr[3]]-1,w=3,color="green"); # C nach B (waagerechte
plot!([centr[1],centr[1],centr[1]],[centr[2],centr[2],centr[2]],[centr[3]-1,centr[3]-1,centr[3]-3],w=3,color="blue");
plotNumba(K,numba);
end;
function showGateR!(cx,cy,cz,numba)
r = 2;
centr = [cx;cy;cz];
# A = [centr[1]-1;centr[2];centr[3]];
# B = [centr[1];centr[2]+1;centr[3]];
C = [centr[1];centr[2]-1;centr[3]];
in2 = [centr[1]+1;centr[2]+1;centr[3]];
in1 = [centr[1]+1;centr[2]-1;centr[3]];
K = [centr[1]+1+r;centr[2];centr[3]-1];
O = [centr[1];centr[2];centr[3]-1];
kCirc = circNumba(r,K[1],K[2],K[3]);
plot!(kCirc[:,2],kCirc[:,3],kCirc[:,4],title="test-circ",line=3,color="red");
plot!([centr[1]+1,centr[1]+1,centr[1]],[centr[2],centr[2],centr[2]],[centr[3],centr[3],centr[3]]-1,w=3,color="green"); #A nach K
plot!([centr[1],centr[1],centr[1]-1],[centr[2],centr[2],centr[2]]+0.5,[centr[3]-1,centr[3]-1,centr[3]-1],w=3,color="green");# B nach D
plot!([centr[1],centr[1],centr[1]-1],[centr[2],centr[2],centr[2]]-0.5,[centr[3],centr[3],centr[3]]-1,w=3,color="green");# C nach E
plot!([centr[1],centr[1],centr[1]],[centr[2]-0.5,centr[2]-0.5,centr[2]+0.5],[centr[3],centr[3],centr[3]]-1,w=3,color="green"); # C nach B (waagerechte
plot!([centr[1],centr[1],centr[1]],[centr[2],centr[2],centr[2]],[centr[3]-1,centr[3]-1,centr[3]-3],w=3,color="blue");
plotNumba(K,numba);
end;
#function setGattaStruct(pEle::BPIPopulation.popElement)
function setGattaStruct()
showGate(0,0,-4,15); # 15
showGate2!(-4,0,8,14); #14
showGate2!(4,0,8,13); #13
showGateL!(-8,4,16,12); #12
showGateL!(-8,-4,16,11); #11
showGateR!(8,4,16,10); #10
showGateR!(8,-4,16,9); #9
showGateL!(-8,4, 32,8); #8
showGateL!(-8,-4, 32,7); #7
showGateR!(8,4, 32,6); #6
showGateR!(8,-4, 32,5); #5
showGateIn!(0,6, 40,4); #4
showGateIn!(0,2, 40,3); #3
showGateIn!(0,-2, 40,2); #2
showGateIn!(0,-6, 40,1); #1
# hier dann evtl "PLOTTEN "der verbindungen
end;
function plotNumba(K,numba)
if numba>=10
plot!([K[1],K[1],K[1]]-0.25,[K[2],K[2],K[2]],
[K[3]-1,K[3]-1,K[3]-3]+2,w=3,color="blue");
end;
if numba%10 == 0
plot!([K[1],K[1],K[1]]+1.25,[K[2],K[2],K[2]],
[K[3]-1,K[3]-1,K[3]-3]+2,w=3,color="blue");
plot!([K[1],K[1],K[1]]+0.25,[K[2],K[2],K[2]],
[K[3]-1,K[3]-1,K[3]-3]+2,w=3,color="blue");
plot!([K[1]+1,K[1]+1,K[1]]+0.25,[K[2],K[2],K[2]],
[K[3],K[3],K[3]]-1,w=3,color="blue");
plot!([K[1]+1,K[1]+1,K[1]]+0.25,[K[2],K[2],K[2]],
[K[3],K[3],K[3]]+1,w=3,color="blue");
end;
if numba%10 == 1
plot!([K[1],K[1],K[1]]+1.25,[K[2],K[2],K[2]],
[K[3]-1,K[3]-1,K[3]-3]+2,w=3,color="blue");
end;
if numba%10 == 2
plot!([K[1],K[1],K[1]]+0.25,[K[2],K[2],K[2]],
[K[3]-2,K[3]-2,K[3]-3]+2,w=3,color="blue");
plot!([K[1],K[1],K[1]]+1.25,[K[2],K[2],K[2]],
[K[3]-1,K[3]-1,K[3]-2]+2,w=3,color="blue");
plot!([K[1]+1,K[1]+1,K[1]]+0.25,[K[2],K[2],K[2]],
[K[3],K[3],K[3]]-1,w=3,color="blue");
plot!([K[1]+1,K[1]+1,K[1]]+0.25,[K[2],K[2],K[2]],
[K[3],K[3],K[3]],w=3,color="blue");
plot!([K[1]+1,K[1]+1,K[1]]+0.25,[K[2],K[2],K[2]],
[K[3],K[3],K[3]]+1,w=3,color="blue");
end;
if numba%10 == 3
plot!([K[1],K[1],K[1]]+1.25,[K[2],K[2],K[2]],
[K[3]-1,K[3]-1,K[3]-3]+2,w=3,color="blue");
plot!([K[1]+1,K[1]+1,K[1]]+0.25,[K[2],K[2],K[2]],
[K[3],K[3],K[3]]-1,w=3,color="blue");
plot!([K[1]+1,K[1]+1,K[1]]+0.25,[K[2],K[2],K[2]],
[K[3],K[3],K[3]],w=3,color="blue");
plot!([K[1]+1,K[1]+1,K[1]]+0.25,[K[2],K[2],K[2]],
[K[3],K[3],K[3]]+1,w=3,color="blue");
end;
if numba%10 == 4
plot!([K[1],K[1],K[1]]+1.25,[K[2],K[2],K[2]],[K[3]-1,K[3]-1,K[3]-3]+2,w=3,color="blue");
plot!([K[1]+1,K[1]+1,K[1]]+0.25,[K[2],K[2],K[2]],[K[3],K[3],K[3]],w=3,color="blue");
plot!([K[1],K[1],K[1]]+0.25,[K[2],K[2],K[2]],[K[3]-1,K[3]-1,K[3]-2]+2,w=3,color="blue");
end;
if numba%10 == 5
plot!([K[1],K[1],K[1]]+1.25,[K[2],K[2],K[2]],[K[3]-2,K[3]-2,K[3]-3]+2,w=3,color="blue");
plot!([K[1],K[1],K[1]]+0.25,[K[2],K[2],K[2]],[K[3]-1,K[3]-1,K[3]-2]+2,w=3,color="blue");
plot!([K[1]+1,K[1]+1,K[1]]+0.25,[K[2],K[2],K[2]],[K[3],K[3],K[3]]-1,w=3,color="blue");
plot!([K[1]+1,K[1]+1,K[1]]+0.25,[K[2],K[2],K[2]],[K[3],K[3],K[3]],w=3,color="blue");
plot!([K[1]+1,K[1]+1,K[1]]+0.25,[K[2],K[2],K[2]],[K[3],K[3],K[3]]+1,w=3,color="blue");
end;
if numba%10 == 6
plot!([K[1],K[1],K[1]]+1.25,[K[2],K[2],K[2]],[K[3]-2,K[3]-2,K[3]-3]+2,w=3,color="blue");
plot!([K[1],K[1],K[1]]+0.25,[K[2],K[2],K[2]],[K[3]-1,K[3]-1,K[3]-3]+2,w=3,color="blue");
plot!([K[1]+1,K[1]+1,K[1]]+0.25,[K[2],K[2],K[2]],[K[3],K[3],K[3]]-1,w=3,color="blue");
plot!([K[1]+1,K[1]+1,K[1]]+0.25,[K[2],K[2],K[2]],[K[3],K[3],K[3]],w=3,color="blue");
plot!([K[1]+1,K[1]+1,K[1]]+0.25,[K[2],K[2],K[2]],[K[3],K[3],K[3]]+1,w=3,color="blue");
end;
if numba%10 == 7
plot!([K[1],K[1],K[1]]+1.25,[K[2],K[2],K[2]],[K[3]-1,K[3]-1,K[3]-3]+2,w=3,color="blue");
plot!([K[1]+1,K[1]+1,K[1]]+0.25,[K[2],K[2],K[2]],[K[3],K[3],K[3]]+1,w=3,color="blue");
end;
if numba%10 == 8
plot!([K[1],K[1],K[1]]+1.25,[K[2],K[2],K[2]],[K[3]-1,K[3]-1,K[3]-3]+2,w=3,color="blue");
plot!([K[1],K[1],K[1]]+0.25,[K[2],K[2],K[2]],[K[3]-1,K[3]-1,K[3]-3]+2,w=3,color="blue");
plot!([K[1]+1,K[1]+1,K[1]]+0.25,[K[2],K[2],K[2]],[K[3],K[3],K[3]]-1,w=3,color="blue");
plot!([K[1]+1,K[1]+1,K[1]]+0.25,[K[2],K[2],K[2]],[K[3],K[3],K[3]],w=3,color="blue");
plot!([K[1]+1,K[1]+1,K[1]]+0.25,[K[2],K[2],K[2]],[K[3],K[3],K[3]]+1,w=3,color="blue");
end;
if numba%10 == 9
plot!([K[1],K[1],K[1]]+0.25,[K[2],K[2],K[2]],[K[3]-1,K[3]-1,K[3]-2]+2,w=3,color="blue");
plot!([K[1],K[1],K[1]]+1.25,[K[2],K[2],K[2]],[K[3]-1,K[3]-1,K[3]-3]+2,w=3,color="blue");
plot!([K[1]+1,K[1]+1,K[1]]+0.25,[K[2],K[2],K[2]],[K[3],K[3],K[3]]-1,w=3,color="blue");
plot!([K[1]+1,K[1]+1,K[1]]+0.25,[K[2],K[2],K[2]],[K[3],K[3],K[3]],w=3,color="blue");
plot!([K[1]+1,K[1]+1,K[1]]+0.25,[K[2],K[2],K[2]],[K[3],K[3],K[3]]+1,w=3,color="blue");
end;
end;
end; # END MODULE