3D-isa

「3D-isa」の編集履歴(バックアップ)一覧はこちら

3D-isa」(2007/12/05 (水) 23:51:00) の最新版変更点

追加された行は緑色になります。

削除された行は赤色になります。

情報工学基礎演習 3D描画用ツール C言語 ソースコード -------------------------------------------------------------------------------------------------------------------- #include<stdio.h> void madotuki(); int menu(); void s_box(double ,double ,double ,double ,double ,double ,double ,double ,double ,double ,int ); int main(){ int n; while(1){ switch(menu()){ case 1: madotuki(); break; case 0: return 0; break; default: break; } } } int menu(){ int n; printf("-----menu----\n"); printf("1:窓付きの建物\n"); printf("0:終了\n"); printf("-------------\n"); scanf("%d",&n); return n; } void madotuki(){ int i,j,k,l,n; double x_l,z_l; double x,z; double c_x,c_z; double x1,z1; double x2,z2; double r,g,b; double kai,len,high,takasa; double h_ta,h_yo; double touka; int mai; printf("窓をはる面がxなら 1 zなら 2"); scanf("%d",&n); printf("対角線の2点を入力(x,z座標)(窓を貼るほうを先に入力)\n"); scanf("%lf %lf",&x1,&z1); scanf("%lf %lf",&x2,&z2); if(x1<x2){ x=x1; x1=x2; x2=x; } if(z1<z2){ z=z1; z1=z2; z2=z; } x_l = x1 - x2; z_l = z1 - z2; c_x=( x1 + x2 )/ 2; c_z=( z1 + z2 )/ 2; printf("建物の階数を入力"); scanf("%lf",&kai); printf("一階あたりの高さを入力"); scanf("%lf",&takasa); printf("窓の高さ 長さを入力"); scanf("%lf %lf",&high,&len); printf("窓の透過度を入力"); scanf("%lf",&touka); if(high > takasa || len > x_l){ printf("窓のほうがでかいね\n"); return ; } printf("%f枚まで貼れます。何枚貼りますか?",(x_l)/len); scanf("%d",&mai); /* 柱の長さ と 壁の設置 */ h_yo= (x_l - mai * len)/(mai + 1); h_ta= (takasa - high)/2; printf("R G Bを入力(壁)"); scanf("%lf %lf %lf",&r,&g,&b); /* うえから 間 窓 最後の間 壁の上 壁の下*/ for(i=0;i<kai;i++){ for(k=1;k<=mai;k++){ s_box((x2 + h_yo*k + len*(k-1))/2 , takasa*i + takasa/2 , z2+0.25 , r , g , b , h_yo , high , 0.5 , 0,n); s_box((x2 + h_yo*k + len*k)/2 , takasa*i + takasa/2 , z2+0.25 , r , g , b , len , high , 0.5 , touka,n); } s_box((x2 + h_yo*k + len*(k-1))/2 , takasa*i + takasa/2 , z2+0.25 , r , g , b , h_yo , high , 0.5 , 0,n); s_box( c_x , takasa*i + h_ta/2,z2+0.25 , r , g , b , x_l , h_ta , 0.5 , 0,n); s_box( c_x , takasa*i + (takasa - high - h_ta)/2 , z2+0.25 , r , g , b , x_l , h_ta , 0.5 , 0,n); s_box( c_x , takasa*(i+1)-0.25 , c_z , r , g , b , x_l , 0.5 , z_l , 0,n); } for(i=0;i<kai;i++){ for(k=1;k<=mai;k++){ s_box((x2 + h_yo*k + len*(k-1))/2 , takasa*i + takasa/2 , z1-0.25 , r , g , b , h_yo , high, 0.5 , 0,n); s_box((x2 + h_yo*k + len*k)/2 , takasa*i + takasa/2 , z1-0.25 , 0 , 1 , 1 , len , high , 0.5 , touka,n); } s_box((x2 + h_yo*k + len*(k-1))/2 , takasa*i + takasa/2 , z1-0.25 , r , g , b , h_yo , high , 0.5 , 0,n); s_box( c_x , takasa*i + h_ta/2,z1-0.25 , r , g , b , x_l , h_ta , 0.5 , 0,n); s_box( c_x , takasa*i + (takasa - high - h_ta)/2 , z1-0.25 , r , g , b , x_l , h_ta , 0.5 , 0,n); } s_box( x1 - 0.25 , (takasa * kai)/2 , c_z , r , g , b , 0.5 , takasa * kai , z_l , 0,n); s_box( x2 - 0.25 , (takasa * kai)/2 , c_z , r , g , b , 0.5 , takasa * kai , z_l , 0,n); } void s_box(double px,double py,double pz,double r,double g,double b,double sx,double sy,double sz,double t,int n){ if(n==1)printf("BOX{ P %f %f %f C %f %f %f S %f %f %f T %f }\n",px,py,pz,r,g,b,sx,sy,sz,t); if(n==2)printf("BOX{ P %f %f %f C %f %f %f S %f %f %f T %f }\n",pz,py,px,r,g,b,sz,sy,sx,t); } ------------------------------------------------------------------------------------------------------------------ 使用マニュアル   煮詰まってきてわけわかんないので適当に実行しながら覚えて
情報工学基礎演習 3D描画用ツール C言語 ソースコード -------------------------------------------------------------------------------------------------------------------- #include<stdio.h> void madotuki(); int menu(); void s_box(double ,double ,double ,double ,double ,double ,double ,double ,double ,double ,int ); int main(){ int n; while(1){ switch(menu()){ case 1: madotuki(); break; case 0: return 0; break; default: break; } } } int menu(){ int n; printf("-----menu----\n"); printf("1:窓付きの建物\n"); printf("0:終了\n"); printf("-------------\n"); scanf("%d",&n); return n; } void madotuki(){ int i,j,k,l,n; double x_l,z_l; double x,z; double c_x,c_z; double x1,z1; double x2,z2; double r,g,b; double kai,len,high,takasa; double h_ta,h_yo; double touka; int mai; printf("窓をはる面がxなら 1 zなら 2"); scanf("%d",&n); printf("対角線の2点を入力(x,z座標)(窓を貼るほうを先に入力)\n"); scanf("%lf %lf",&x1,&z1); scanf("%lf %lf",&x2,&z2); if(x1<x2){ x=x1; x1=x2; x2=x; } if(z1<z2){ z=z1; z1=z2; z2=z; } x_l = x1 - x2; z_l = z1 - z2; c_x=( x1 + x2 )/ 2; c_z=( z1 + z2 )/ 2; printf("建物の階数を入力"); scanf("%lf",&kai); printf("一階あたりの高さを入力"); scanf("%lf",&takasa); printf("窓の高さ 長さを入力"); scanf("%lf %lf",&high,&len); printf("窓の透過度を入力"); scanf("%lf",&touka); if(high > takasa || len > x_l){ printf("窓のほうがでかいね\n"); return ; } printf("%f枚まで貼れます。何枚貼りますか?",(x_l)/len); scanf("%d",&mai); /* 柱の長さ と 壁の設置 */ h_yo= (x_l - mai * len)/(mai + 1); h_ta= (takasa - high)/2; printf("R G Bを入力(壁)"); scanf("%lf %lf %lf",&r,&g,&b); /* うえから 間 窓 最後の間 壁の上 壁の下*/ for(i=0;i<kai;i++){ for(k=1;k<=mai;k++){ s_box((x2 + h_yo*k + len*(k-1))/2 , takasa*i + takasa/2 , z2+0.25 , r , g , b , h_yo , high , 0.5 , 0,n); s_box((x2 + h_yo*k + len*k)/2 , takasa*i + takasa/2 , z2+0.25 , r , g , b , len , high , 0.5 , touka,n); } s_box((x2 + h_yo*k + len*(k-1))/2 , takasa*i + takasa/2 , z2+0.25 , r , g , b , h_yo , high , 0.5 , 0,n); s_box( c_x , takasa*i + h_ta/2,z2+0.25 , r , g , b , x_l , h_ta , 0.5 , 0,n); s_box( c_x , takasa*i + (takasa - high - h_ta)/2 , z2+0.25 , r , g , b , x_l , h_ta , 0.5 , 0,n); s_box( c_x , takasa*(i+1)-0.25 , c_z , r , g , b , x_l , 0.5 , z_l , 0,n); } for(i=0;i<kai;i++){ for(k=1;k<=mai;k++){ s_box((x2 + h_yo*k + len*(k-1))/2 , takasa*i + takasa/2 , z1-0.25 , r , g , b , h_yo , high, 0.5 , 0,n); s_box((x2 + h_yo*k + len*k)/2 , takasa*i + takasa/2 , z1-0.25 , 0 , 1 , 1 , len , high , 0.5 , touka,n); } s_box((x2 + h_yo*k + len*(k-1))/2 , takasa*i + takasa/2 , z1-0.25 , r , g , b , h_yo , high , 0.5 , 0,n); s_box( c_x , takasa*i + h_ta/2,z1-0.25 , r , g , b , x_l , h_ta , 0.5 , 0,n); s_box( c_x , takasa*i + (takasa - high - h_ta)/2 , z1-0.25 , r , g , b , x_l , h_ta , 0.5 , 0,n); } s_box( x1 - 0.25 , (takasa * kai)/2 , c_z , r , g , b , 0.5 , takasa * kai , z_l , 0,n); s_box( x2 - 0.25 , (takasa * kai)/2 , c_z , r , g , b , 0.5 , takasa * kai , z_l , 0,n); } void s_box(double px,double py,double pz,double r,double g,double b,double sx,double sy,double sz,double t,int n){ if(n==1)printf("BOX{ P %f %f %f C %f %f %f S %f %f %f T %f }\n",px,py,pz,r,g,b,sx,sy,sz,t); if(n==2)printf("BOX{ P %f %f %f C %f %f %f S %f %f %f T %f }\n",pz,py,px,r,g,b,sz,sy,sx,t); } ------------------------------------------------------------------------------------------------------------------ 使用マニュアル   煮詰まってきてわけわかんないので適当に実行しながら覚えて s_box(x2 + h_yo*k + len*k + h_yo/2 , takasa*i + takasa/2 , z2+0.25 , r , g , b , h_yo , high , 0.5 , 0,n); s_box(x2 + h_yo*(k+1) + len*k + len/2 , takasa*i + takasa/2 , z2+0.25 , r , g , b , len , high , 0.5 , touka,n); k=0から

表示オプション

横に並べて表示:
変化行の前後のみ表示: