cheno9468 发表于 2009-6-13 22:53

共享2个绘制立方体的程序

第一个用边线连接每个顶点,其中输入变量seite为正方体边长
function =wuerfel(seite)
punkte=dec2bin(0:7);
for z_idx=1:8, for s_idx = 1:3
endpunkte(z_idx,s_idx) = str2double(punkte(z_idx,s_idx));
end; end
path = ;
W=;
W = W / 3; W_eins = W * seite;
plot3(W_eins(:,1),W_eins(:,2),W_eins(:,3));
第二个为点阵正方体,每条边上点的数目可以通过变量j来确定,变量seite为正方体边长
function =wpunkte(seite,j)
t = 1:j^3;
k = 0; % Anfangwerte des 3. Spatltes vom Matrix w
l = 0; % Anfangwerte des 2. Spatltes vom Matrix w
m = 0; % Anfangwerte des 1. Spatltes vom Matrix w
%% Wuerfel werden aufgebaut, der alle j^3 Punkte hat.
% 3. Spalte
for i = t, w(i,3)=k; k=k+1;
   if k > j-, k = 0; end
end
% 2. Spalte
for i = t
   w(i,2)=l;
   if w(i,3) == j-1, l=l+1; end
   if l > j-1, l = 0; end
end
% 1. Spalte
for i = t-j
   n = i + j; w(n,1) = m;
   if n < j^3
      if w(n,2)==j-1 && w(n+1,2)==0, m = m + 1; end
   end
   if m > j-1, m = 0;end
end
%% (j-2)^3 Innenpunkte werden gesucht
% Die Innenpunkte werden als gezeichnet.
% Die Innenpunkte werden ab 2. Zeile der Matrix gesucht
for i = 1 : j^3
   if w(i,1) ~= 0 && w(i,1) ~= j-1, if w(i,2) ~= 0 && w(i,2) ~= j-1, if w(i,3) ~= 0 && w(i,3) ~= j-1
      w(i,1:3) = 0;
   end; end; end
end
a=[];

for s = 2 : j^3
   if w(s,1:3)==0, a = ; end
end
%% (j-2)^3 Innenpunkte werden geloescht
w(a,:)=[];
%% Wuerfel werden mit gewunschte Seitelaenge aufgebaut
W_tmp = w / (j-1); W = W_tmp * seite;
plot3(W(:,1),W(:,2),W(:,3),'.');
这2个程序都是自己写的,有不妥当的地方请各位不要见笑,并多提宝贵意见

[ 本帖最后由 ChaChing 于 2009-6-14 12:35 编辑 ]

kakalx 发表于 2009-6-13 23:08

回复 楼主 cheno9468 的帖子

好的很呢!!

第一个画图程序中的W=W / 3;都为大写吧……

[ 本帖最后由 ChaChing 于 2009-6-14 10:43 编辑 ]

ChaChing 发表于 2009-6-14 00:13

程序跑过吗? 请LS确定程序无误!

cheno9468 发表于 2009-6-14 00:21

原帖由 kakalx 于 2009-6-14 00:10 发表 http://www.chinavib.com/forum/images/common/back.gif
第一个画图程序中的W=W / 3;都为大写吧……

这个是我的打错了

的确应该都为大写

friendchj 发表于 2009-6-14 10:10

clc
clear
subplot(121)
wuerfel(2)
subplot(122)
wpunkte(2,4)
%%%%%%%%%%%
注:1.wuerfel中输入参数为正方形边长,但从画出的图中正方形边长看出,二者不符;
2.wpunkte仅以点画图,看着不舒服,可以考虑边缘用线连接;
3.这两个程序画的正方形以原点为起点,可以考虑更一般的情况,可以把它放在空间中任意位置。

cheno9468 发表于 2009-6-14 18:14

回复 5楼 friendchj 的帖子

1. wuerfel中W=W/3那行代码是多余.就是它造成了这个问题
2. wpunkte的目的就要以点做图,如果以边线作图的话会造成一些点的重复,比如在第一个程序里面,矩阵W的大小17*3,其实就只有8个顶点,有些点重复了,这也是捆饶我的问题,一直没有好的解决办法
3. 把正方体放在原点就是为了以后能把它放在空间任一位置而考虑的,其实只要把正方体平移就可以了

friendchj 发表于 2009-6-14 19:00

我试着编写了一个,即把正方体由每个线段拼接起来。

clc
clear
a=2;
b=4;
x1=;
y1=;
z1=;
z2=;
subplot(121)
hold on
plot3(,,)
plot3(,,)
for i=1:length(x1)
plot3(,,)
end
view(30,30)
axis equal
hold off
%%%%%%%%%%%%%%%%%%%%%%%%%%%
x2=;
zh=a:a/(1-b):0;
y2=;
zz1=zeros(1,length(x2));
zz2=a*ones(1,length(x2));
subplot(122)
hold on
plot3(x2,y2,zz1,'.')
plot3(x2,y2,zz2,'.')
plot3(,,,'r')
plot3(,,,'r')
zh=0:a/(b-1):a;
ind=;
for i=1:4
    plot3(,,,'r')
    plot3(,,zh(2:3),'.')
end
view(30,30)
axis equal
hold off

ChaChing 发表于 2009-6-14 19:58

好奇, 这用在什样的问题?
页: [1]
查看完整版本: 共享2个绘制立方体的程序