フラクタル

樹木曲線によるフラクタル図形をレンダリングしました

樹木曲線

    参考までに POV-Rayで
    樹木曲線によるフラクタル図形(左側)
の描画方法を載せておきます
  //**********************************************************************************
   #macro YSH(Vcl)
    #local Y=Vcl.x; #local rHa=radians(139+Vcl.z);
    #local CR=Vcl.y*sin(rHa); #local CB=Vcl.y*cos(rHa);
    #local R=Y+CR;
    #local G=Y-(0.299*CR+0.114*CB)/0.587;
    #local B=Y+CB;
    #local Cmax=max(R,G,B);
    #if(Cmax>1) #local Cvec=<R,G,B>/Cmax; #else #local Cvec=<R,G,B>; #end
    rgb Cvec
   #end // macro end
  //**********************************************************************************
   #local Pb = pigment { color YSH(< 0.1 , 0.8 , 290 >) }
  //**********************************************************************************
   #local Th=90;
   #local Bv=<1,Th>; #local Ml=<0.64,Th+25>; #local Mr=<0.56,Th-16>;
   #local Pos=Bv.x*<cos(radians(Bv.y)),sin(radians(Bv.y))>;
   //
   #local L=1;
   #local Nmax=10; #local Sc=1.8*26/L; #local Lw=0.125*pow(5/4,Nmax-1);
   //
   #local N=0;
   #local Base =
    union { cylinder { 0, L*Pos Lw/Sc } sphere { L*Pos Lw/Sc } }
   #local Tree=Base;
   //
   #local N=1; #while(N<Nmax)
   #local Tree =
   union {
    object { Base }
    object { Tree scale (Ml.x) rotate (Ml.y-Th)*z translate L*Pos*0.5 }
    object { Tree scale (Ml.x) rotate (Ml.y-Th)*z translate L*Pos }
    object { Tree scale (Mr.x) rotate (Mr.y-Th)*z translate L*Pos }
   }
   #local N=N+1; #end
   object { Tree texture { Pb } scale Sc translate -56*y-21*x }
  //**********************************************************************************

カオス

円環状カオスのパラメータを増やす改変を行いレンダリングしました

改変円環状カオス

【式】

 改変円環状カオス      W=(x(n),y(n))   (0≦n≦16000)

            x(n+1)=y(n)+Ax(n)+K/(1+x(n)^2)+L
            y(n+1)=-Bx(n)

        A=-0.98 , B=0.99 ,  K=4.5 , L=-4.8 , x(0)=1/2 , y(0)=1/2

          プロット範囲 4<n≦16000

 

       参考までに POV-Rayによる
       改変円環状カオス の描画方法を載せておきます

  //*****************************************************************************
      #macro Modified_chaos_C(Nmax,A,B,K,L,P0,Vctl,Lr)
       #local X=P0.x; #local Y=P0.y;
       #local N=0; #while(N<=Nmax)
        //
        #local rC=(sin(mod(Vctl.x*Y,2*pi))+1.2)/2.2;
        #local gC=(cos(mod(Vctl.y*X,2*pi))+1.2)/2.2;
        #local bC=(sin(mod(Vctl.z*X*Y,2*pi))+1.2)/2.2;
        //
        #if(N>4) sphere { <X,Y> Lr pigment { color rgb <rC,gC,bC> } } #end
        //
        #local Xn=X;
        #local X=Y+A*X+K/(1+X*X)+L; #local Y=-B*Xn;
       //
       #local N=N+1; #end
      #end  //  macro end
  //*****************************************************************************
      #local Sc=4.5; #local Tr=<2,-3>; #local Lw=0.4/Sc;
      #local Vctl=<2,4,1>/12;
      #local A=-0.98; #local B=0.99; #local K=4.5; #local L=-4.8;
      union { Modified_chaos_C(16000,A,B,K,L,<1/2,1/2>,Vctl,Lw)
        scale Sc translate Tr }

陰関数曲線

等値面を描画するisosurfaceを利用して
陰関数で定義されたデカルトの卵形線(三焦点)をレンダリングしました

デカルトの卵形線

【式】

 デカルトの卵形線(三焦点)  L1(x,y)+L2(x,y)+L3(x,y)=50N

    ( -116<x<152 , -102<y<126 ) , ( 6≦N<9 step 1/2 )

    L1(x,y)=sqrt( ( x-(-100) )^2 + ( y-(-20) )^2 )
    L2(x,y)=sqrt( ( x-(  60) )^2 + ( y-( 70) )^2 )
    L3(x,y)=sqrt( ( x-( 100) )^2 + ( y-(-30) )^2 )

    P1=( -100  , -20 ) , P2=( 60 , 70 ) , P3=( 100 , -30 )

 

    POV-Rayのiisosurfaceにより デカルトの卵形線(三焦点) を描画する方法
  //********************************************************************************
   #local F0 = finish { phong 1 reflection 0.1 }
   #local Lc =
     texture { pigment { color rgb <0.651, 0.002,0.739> } finish { F0 } } 

  //********************************************************************************
   #declare fnc = function(x,y,z) {
     sqrt(pow(x-(-100),2)+pow(y-(-20),2))
     +sqrt(pow(x-(  60),2)+pow(y-( 70),2))
     +sqrt(pow(x-( 100),2)+pow(y-(-30),2))
   }
   #local Sc=9/13; #local Tr=<-9.5,-8>;
   #local V1=<-116,-102,-1/Sc>; #local V2=<152,126,1/Sc>;
   #local Nrv=<6,9,1/2>;
   #local N=Nrv.x; #while(N<Nrv.y)
    #local K=50*N; 
    #local Vpr=<K,4.907,0>;
    isosurface {
     function { fnc( x-z, y-z, z ) }           // alternative declared function
     contained_by { box { V1, V2 } }                  // container shape
     #if(abs(Vpr.x)>0) threshold Vpr.x #end      // optional threshold value
     #if(abs(Vpr.y)>1.1) max_gradient Vpr.y #end    // maximum gradient
     #if(Vpr.z=0) open #end                 // remove visible container surface
    texture { Lc } scale Sc translate Tr }
   #local N=N+Nrv.z; #end
  //********************************************************************************

包絡線

楕円の焦点に関する垂足曲線となる円群の包絡線を描画しました

楕円の垂足曲線となる包絡線

【式】

  楕円      r(t) = 1/( 1 - e cos t )   ( -π≦t<π )

                     e=1/2

     楕円の焦点に関する垂足曲線は円になります

 

 参考までに POV-Rayで
 垂足曲線となる円群の包絡線を 描画する方法を載せておきます
  //**********************************************************************************
   #macro Epsz(N) #if(N=0) #local N=1e-10; #end N #end
  //**********************************************************************************
   #macro Line_function(Tp,Fn)

     #switch(Fn)
      //envelope of circle
      #case(21) //circle
       #local R=cos(Tp); #local F=R*< cos(Tp), sin(Tp) >; #break
      #case(22) //ellipse
       #local E=1/2;
       #local R=1/Epsz(1-E*cos(Tp)); #local F=R*< cos(Tp), sin(Tp) >; #break
     #end F
    #end
  //**********************************************************************************
    #macr
o Space_line2(Lr,V1,Fn)
     #local P1=Line_function(V1.x,Fn);
     #local Tp=V1.x; #while(Tp<V1.y)
      #local P2=Line_function(Tp+V1.z,Fn);
      cylinder { P1, P2, Lr }
      #if(Tp<V1.y-V1.z) sphere { P2, Lr } #end #local P1=P2;
     #local Tp=Tp+V1.z; #end
    #end
  //**********************************************************************************
    #macro Envelope_circle(Typ,Lr,V1,Vc,Fn)
     #local Ctyp=asc(strupr(Typ))-asc("A")+1;
     #local Tp=V1.x; #while(Tp<V1.y)
      #local P=Line_function(Tp,Fn);
      #switch(Ctyp)
       #case(16) //Pedal(diameter)
                 #local Cr=(P-Vc)/2;
                 #local Mjr=vlength(Cr); #local Cp=Vc+Cr; #break
       #case(18) //Radius
                 #local Mjr=vlength(P-Vc); #local Cp=P; #break   
      #end  
      torus { Mjr, Lr rotate -90*x translate Cp }
     #local Tp=Tp+V1.z; #end

    #end
  //**********************************************************************************
    #local  Axis2d =
    union {
     quadric{ <0,1,1>,<0,0,0>,<0,0,0>,-1 scale 1/4 } //x
     quadric{ <1,0,1>,<0,0,0>,<0,0,0>,-1 scale 1/4 } //y
    pigment { color rgbt <1,1,0,0.5> } }
  //**********************************************************************************
    #local Lc = pigment { color YSH(< 0.1, 0.8,  40 >) }
    #local F0 = finish { phong 1 reflection 0.1 }
    #local Tc = texture { pigment { color YSH(<0.2, 0.6, 260>) } finish { F0 } }
  //**********************************************************************************
    #local Fn=22;

    #local Sc=38; #local Tr=-20*x;
    union {
     union { Space_line2(0.18/Sc,<-pi,pi,1/15>,Fn) pigment { Lc } }
     union { Envelope_circle("Pedal",0.20/Sc,<-pi,pi,pi/14>,<0,0>,Fn)
                 texture { Tc } }
    scale Sc translate Tr }
    object { Axis2d translate Tr } 
  //**********************************************************************************

フラクタル

シェルピンスキー曲線と呼ばれる
直角二等辺三角形の内側を埋め尽くす平面充填曲線をレンダリングしました

シェルピンスキー曲線

   参考までに
   POV-Rayによる シェルピンスキー曲線 の描画方法を載せておきます
  //**********************************************************************************
   #local L=1; #local Sq2=sqrt(2);
   #local Nmax=10; #local Sc=52/(L*pow(Sq2,Nmax-1)); #local Lw=1.1/5;
   //
   #local N=0;
   #local Base = cylinder { <-L/2,0>,<L/2,0> Lw/Sc } #local Trifill=Base;
   //
   #local N=1; #while(N<Nmax)
   #if(mod(N,2)=1) //odd
    #local A=pow(2,div(N,2))-1; #local B=pow(2,div(N+2,2))-1;
    #local Trh=B/2+A*Sq2/2; #local Trv=A+B*Sq2/2;
   #else //even
    #local Trh=B/2+B*Sq2/2; #local Trv=B+B*Sq2/2;
   #end
   #local Trifill =
   union {
    object { Base } 
    sphere { <-L/2,0> Lw/Sc }
    object { Trifill translate < Trh,0>*L rotate -135*z translate <-L/2,0> }
    sphere { < L/2,0> Lw/Sc }
    object { Trifill translate <-Trh,0>*L rotate  135*z translate < L/2,0> }
   translate Trv*L*y }
   #local N=N+1; #end
   object { Trifill pigment { color rgb <1,0,1> } scale Sc translate -42*y }
  //**********************************************************************************