Last updated: March 2008. Kajiyama             [ 目次に戻る ]

平面曲線・空間曲線・空間曲面の数式モデラー



1. モデラーの画面と対話しながら数式を作り、POV-Rayのデータとして出力する


CurSur4Pov(拡大する)


ダウンロード

2. モデラーが翻訳したシーン記述のプログラム

//////////////////////
//  C:\Users\0yamakawa\Desktop\Fool2.pov
//  This  file  was  generated  using  Parametric  Curves  and
//  Surfaces  for  POV-Ray  Ver.1.07
//  Copyright  (C)  2002-2004  by  Satoshi  Asada
//  曲線,曲面の描画のための  POV-Ray  シーン・ファイル作成
//
//  Trefoil  Torus  Knot
//////////////////////

#include  "colors.inc"
global_settings{assumed_gamma    2.2}
//  座標軸の設定
#declare  Rate        =  2;            //  Head  の半径比
#declare  xRadius  =  0.02;      //  x  半径
#declare  NxLen      =  3;            //  x  負の長さ
#declare  PxLen      =  4;            //  x  正の長さ
#declare  HxLen      =  0.2;        //  x  Head  の長さ
#declare  yRadius  =  0.02;      //  y  半径
#declare  NyLen      =  3;            //  y  負の長さ
#declare  PyLen      =  4;            //  y  正の長さ
#declare  HyLen      =  0.2;        //  y  Head  の長さ
#declare  zRadius  =  0.02;      //  z  半径
#declare  NzLen      =  3;            //  z  負の長さ
#declare  PzLen      =  4;            //  z  正の長さ
#declare  HzLen      =  0.2;        //  z  Head  の長さ
/////  x  軸
#declare  X_Jiku  =  union{
   cylinder  {  <-NxLen,0,0>,  <0,0,0>,  xRadius  }
   cylinder  {  <0,0,0>,  <PxLen,0,0>,  xRadius    }
   cone  {  <PxLen,  0,  0>,  Rate*xRadius  //  一端の中心と半径
                 <PxLen+HxLen,  0,  0>,  0            //  他端の中心と半径0
   }
   no_shadow
}
/////  y  軸
#declare  Y_Jiku  =  union{
   cylinder  {  <0,  -NyLen,0>,  <0,0,0>,  yRadius  }
   cylinder  {  <0,0,0>,  <0,  PyLen,0>,  yRadius    }
   cone  {  <0,  PyLen,  0>,  Rate*yRadius
                 <0,  PyLen+HyLen,  0>,  0
   }
   no_shadow
}
/////  z  軸
#declare  Z_Jiku  =  union{
   cylinder  {  <0,  0,  -NzLen>,  <0,0,0>,  zRadius  }
   cylinder  {  <0,0,0>,  <0,  0,  PzLen>,  zRadius    }
   cone  {  <0,  0,  PzLen>,  Rate*zRadius
                 <0,  0,  PzLen+HzLen>,  0
   }
   no_shadow
}
#declare  a=1;
#declare  b=3;
//  x,y,z座標関数マクロ定義
#macro  Xfunc()
   (  b+a*cos(uu/2))*cos(uu/3)+a*cos(uu/3)*cos(vv-pi)
#end
#macro  Yfunc()
   a*sin(uu/2)+a*sin(vv-pi)
#end
#macro  Zfunc()
   (  b+a*cos(uu/2))*sin(uu/3)+a*sin(uu/3)*cos(vv-pi)
#end
#declare  umin  =  0;
#declare  umax  =  12*pi;
#declare  vmin  =  0;
#declare  vmax  =  2*pi;
#declare  uiter=  100;//  パラメータ  uu  分割数
#declare  viter=  40;//  パラメータ  vv  分割数
#declare  iu        =  (umax-umin)/uiter;
#declare  iv        =  (vmax-vmin)/viter;
#declare  counter  =  0;
union{
   #declare  uu  =  umin;
   #while  (uu<=umax)
       #declare  vv  =  vmin;
       #while  (vv<=vmax)
           #declare  x1=Xfunc();
           #declare  y1=Yfunc();
           #declare  z1=Zfunc();
           #declare  uu=uu+iu;
           #declare  x2=Xfunc();
           #declare  y2=Yfunc();
           #declare  z2=Zfunc();
           #declare  vv=vv+iv;
           #declare  x3=Xfunc();
           #declare  y3=Yfunc();
           #declare  z3=Zfunc();
           #declare  uu=uu-iu;
           #declare  x4=Xfunc();
           #declare  y4=Yfunc();
           #declare  z4=Zfunc();
           #declare  vv=vv-iv;
           #declare  vv=vv-iv;
           #declare  nx1=Xfunc();
           #declare  ny1=Yfunc();
           #declare  nz1=Zfunc();
           #declare  uu=uu+iu;
           #declare  nx2=Xfunc();
           #declare  ny2=Yfunc();
           #declare  nz2=Zfunc();
           #declare  uu=uu+iu;
           #declare  vv=vv+iv;
           #declare  nx3=Xfunc();
           #declare  ny3=Yfunc();
           #declare  nz3=Zfunc();
           #declare  vv=vv+iv;
           #declare  nx4=Xfunc();
           #declare  ny4=Yfunc();
           #declare  nz4=Zfunc();
           #declare  vv=vv+iv;
           #declare  uu=uu-iu;
           #declare  nx5=Xfunc();
           #declare  ny5=Yfunc();
           #declare  nz5=Zfunc();
           #declare  uu=uu-iu;
           #declare  nx6=Xfunc();
           #declare  ny6=Yfunc();
           #declare  nz6=Zfunc();
           #declare  uu=uu-iu;
           #declare  vv=vv-iv;
           #declare  nx7=Xfunc();
           #declare  ny7=Yfunc();
           #declare  nz7=Zfunc();
           #declare  vv=vv-iv;
           #declare  nx8=Xfunc();
           #declare  ny8=Yfunc();
           #declare  nz8=Zfunc();
           #declare  uu=uu+iu;
//  法線ベクトル計算
           #declare  n1=vcross(<x1-nx1,y1-ny1,z1-nz1>,<x1-nx8,y1-ny8,z1-nz8>);
           #declare  n2=vcross(<x1-  x2,y1-  y2,z1-  z2>,<x1-nx1,y1-ny1,z1-nz1>);
           #declare  n3=vcross(<x1-  x4,y1-  y4,z1-  z4>,<x1-  x2,y1-  y2,z1-  z2>);
           #declare  n4=vcross(<x1-nx8,y1-ny8,z1-nz8>,<x1-  x4,y1-  y4,z1-  z4>);
           #declare  normal1=n1+n2+n3+n4;
           #declare  n1=vcross(<x2-nx2,y2-ny2,z2-nz2>,<x2-  x1,y2-  y1,z2-  z1>);
           #declare  n2=vcross(<x2-nx3,y2-ny3,z2-nz3>,<x2-nx2,y2-ny2,z2-nz2>);
           #declare  n3=vcross(<x2-  x3,y2-  y3,z2-  z3>,<x2-nx3,y2-ny3,z2-nz3>);
           #declare  n4=vcross(<x2-  x1,y2-  y1,z2-  z1>,<x2-  x3,y2-  y3,z2-  z3>);
           #declare  normal2=n1+n2+n3+n4;
           #declare  n1=vcross(<x3-  x2,y3-  y2,z3-  z2>,<x3-  x4,y3-  y4,z3-  z4>);
           #declare  n2=vcross(<x3-nx4,y3-ny4,z3-nz4>,<x3-  x2,y3-  y2,z3-  z2>);
           #declare  n3=vcross(<x3-nx5,y3-ny5,z3-nz5>,<x3-nx4,y3-ny4,z3-nz4>);
           #declare  n4=vcross(<x3-  x4,y3-  y4,z3-  z4>,<x3-nx5,y3-ny5,z3-nz5>);
           #declare  normal3=n1+n2+n3+n4;
           #declare  n1=vcross(<x4-  x1,y4-  y1,z4-  z1>,<x4-nx7,y4-ny7,z4-nz7>);
           #declare  n2=vcross(<x4-  x3,y4-  y3,z4-  z3>,<x4-  x1,y4-  y1,z4-  z1>);
           #declare  n3=vcross(<x4-nx6,y4-ny6,z4-nz6>,<x4-  x3,y4-  y3,z4-  z3>);
           #declare  n4=vcross(<x4-nx7,y4-ny7,z4-nz7>,<x4-nx6,y4-ny6,z4-nz6>);
           #declare  normal4=n1+n2+n3+n4;
           object{
               smooth_triangle{<x1,y1,z1>,  normal1,
                                               <x2,y2,z2>,  normal2,
                                               <x3,y3,z3>,  normal3
               }
               texture{  //  テクスチャ指定
                     pigment  {  color  rgb  <0,0.5,1>  }
                     finish  {  ambient  0.2  specular  0.7  roughness  0.05  }
               }
           }
           object{
               smooth_triangle{<x1,y1,z1>,  normal1,
                                               <x3,y3,z3>,  normal3,
                                               <x4,y4,z4>,  normal4
               }
               texture{  //  テクスチャ指定
                     pigment  {  color  rgb  <0,0.5,1>  }
                     finish  {  ambient  0.2  specular  0.7  roughness  0.05  }
               }
           }
           #declare  vv  =  vv+iv;
     #end
     #declare  uu  =  uu+iu;
     #debug  concat("Looping  on    ",str(counter,4,0),"  of  ",str(uiter,4,0),"\n")
     #declare  counter  =  counter  +  1;
 #end
 scale  0.8  //  スケール値の指定
 rotate  180*x  //  座標軸回り回転
}
object{  X_Jiku  pigment{  color  Blue    }}
object{  Y_Jiku  pigment{  color  Red  }}
object{  Z_Jiku  pigment{  color  Magenta  }}
//  カメラ設定(空間曲線、空間曲面)
camera  {
     location  <10,  10,  -10>
     look_at  <0,0,0>
     angle  30
}
//  光源の指定(必要に応じて,追加,削除)
light_source  {<  10,  40,  20>  color  White}
light_source  {<-50,  40,-20>  color  White}
light_source  {<    0,-40,-50>  color  White}
light_source  {<  10,-40,  20>  color  White}
light_source  {<  20,    0,    0>  color  White}
//light_source  {<  10,-40,-50>  color  White}
//  背景色の指定(一つ指定)
background  {  color  White  }
//background  {  color  DarkSlateGray  }
//background  {  color  Cyan  }

  3. POV-Rayで画像表示する


 Trefoil_Torus_Knot.pov

 


 Kleins_Bottlel.pov

[ 目次に戻る ]