matlab立方体投影,那些投影到三维的高维立方体,后来都怎么样了?(浅度好文)...
該樓層疑似違規已被系統折疊?隱藏此樓查看此樓
function hypercube( N, a, b, c)
%N為立方體維數,N不小于3
% a為投影方式,b為是否畫面,c為是否旋轉
%取值 1 點投影 畫平面 旋轉
%取值 0 平行投影 不畫平面 不旋轉
%-----------------------------------------------
a=logical(a);
b=logical(b);
c=logical(c);
B=orth(rand(N,N));%每一列是N維正交規范基,共N個
%B=eye(N);%也可以使用單位矩陣
P=zeros(N,2^N);%2^N個N維頂點,每一列用于儲存一點的坐標
for j=1:2^N
%第j列,對應j-1的二進制數
for i=1:N
P(i,j)=bitget(j-1,i);%每一列儲存不同的二進制數(0-1組合)
end
end
RMP=RM(P);%可達矩陣,true表示距離為1
P=B*P;%每一列為一點的坐標
CT=mean(P,2);%中心點坐標,列向量
P=P-CT*ones(1,2^N);%平移,中心與原點重合
%-------------------------------------------------
if c %有運動
de=2;%旋轉角度
C=eye(N);%過渡矩陣C
C1=[cosd(de),sind(de); -sind(de),cosd(de)];%旋轉矩陣
C([N-1,N],[N-1,N])=C1;
K=1000;
else %沒有運動
K=1;
end
for k=1:K
if a %點投影
PTY=P;%儲存投影后坐標
for j=1:2^N
PTY(:,j)=2*PTY(:,j)./(2-PTY(N,j));
end
PXYZ=PTY(1:3,:);
else %平行投影
PXYZ=P(1:3,:);
end
plot3(PXYZ(1,:),PXYZ(2,:),PXYZ(3,:),'r*');
axis([-1.5,1.5,-1.5,1.5,-1.5,1.5]);
hold on
if b %選四點,根據距離畫平面
for i4=4:2^N
for i3=3:i4-1
for i2=2:i3-1
for i1=1:i2-1
M4=RMP([i1,i2,i3,i4],[i1,i2,i3,i4]);%4點的可達矩陣
if all(sum(M4)==3)
mysurf(PXYZ(:,[i1,i2,i3,i4]));
end
end
end
end
end
else %選兩點,根據距離畫線
for i=1:2^N
for j=1:i-1
if RMP(i,j)
plot3( PXYZ(1,[i,j]), PXYZ(2,[i,j]), PXYZ(3,[i,j]),'b-');
end
end
end
end
title([num2str(N),'維立方體']);
xlabel('X軸');
ylabel('Y軸');
zlabel('Z軸');
grid on
hold off
pause(0.01);
if c
P=C*P;%坐標旋轉變換
end
end
end
function RMA= RM(A)
%構造n*n可達矩陣
%每一列為點的坐標
n=size(A,2);%點數
RMA=zeros(n,n);
for i=2:n
for j=1:i-1
RMA(i,j)=sum(abs(A(:,i)-A(:,j)));
end
end
RMA=RMA+RMA';
RMA=RMA<1.1;
end
function output = mysurf( A )
%輸入四個點畫平面
%A是3*4矩陣,三行分別代表X Y Z ,每一列為一點坐標
A=A';
X=[A([1,2],1),A([3,4],1)];
Y=[A([1,2],2),A([3,4],2)];
Z=[A([1,2],3),A([3,4],3)];
output=surf(X,Y,Z);
alpha(0.25);%不透明度
colormap([0,0,1]);%藍色
end
總結
以上是生活随笔為你收集整理的matlab立方体投影,那些投影到三维的高维立方体,后来都怎么样了?(浅度好文)...的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: 安宁于心的下一句是什么啊?
- 下一篇: 做眼袋手术多少钱啊?