hns - 日記自動生成システム - Version 2.19.9

先月 2024年01月 来月
1 2 3 4 5 6
7 8 9 10 11 12 13
14 15 16 17 18 19 20
21 22 23 24 25 26 27
28 29 30 31
Namazu for hns による簡易全文検索
詳しくは 詳細指定/ヘルプを参照して下さい
検索式:

2024年01月26日(金) 旧暦 [n年日記] [更新:"2004/08/09 23:43:33"]

#1 [openscad] SignWaveHill


SignWaveHill-unit.stl Download










// SignWave shaped hill

    Xamp  = 50; // one wave length
    Yamp  = 50; // one wave length
    Zamp  = 20; // amplitude (height)

    delta = 0.5; // ste
    cycle = 1;  // count of waveform

    module SignWaveHill(Xamp, Yamp, Zamp, cycle,  delta) {
    X2 = Xamp/2;
    Y2 = Yamp/2;
        for (        x = [-X2:delta:X2] ){
		for (y = [-Y2:delta:Y2] ){
		 amp = Zamp * cos(cycle/2 * (y / Y2) * 360.0);
                   hull(){
		   z = amp * cos(cycle/2 * (x / X2) * 360.0);
		      translate([x, y, Zamp]){
                      cube([delta, delta, z + Zamp ]);
                      }
                   g = amp * cos(cycle/2  * ((x - delta) / X2) * 360.0);
		      translate([x - delta, y, Zamp]){
                      cube([delta, delta, g + Zamp]);
                }
            }
        }
    }
    }
    
// uncomment gives  3 x 3 cycles    
//     for (x = [-1:1:1] ){
//           for (y = [-1:1:1] ){
//               translate([ x * width * 2, y * length * 2, 0])
		     SignWaveHill(Xamp, Yamp, Zamp, cycle, delta);
//           }
//       }
    


2024年01月27日() 旧暦 [n年日記] [更新:"2004/08/09 23:43:33"]

#1 [openscad] revenge kind of fails (SignWaveHill.scad)








// SignWave shaped hill

    Xamp  = 50; // one wave length
    Yamp  = 50; // one wave length
    Zamp  = 20; // amplitude (height)

    Xcount = 10;
    Ycount = 200;
    pitchX = Xamp/Xcount;
    pitchY = Yamp/Ycount;
    delta = pitchX;


    X2 = Xamp/2;
    Y2 = Yamp/2;
    D2 = delta/2;

// ---------------------------------------------------------------------
 module two_by_two ( amp, seqX, x_angle_pitch, pitchY, D2, x, y, Zamp, PitchX )
 {
    z = amp * cos((seqX      ) * x_angle_pitch - 180);
    g = amp * cos((seqX + 1  ) * x_angle_pitch - 180);
    hull() {
    translate([x        , y, Zamp]){     cube([delta, delta, z + Zamp + 0.1]);    }
    translate([x + delta, y, Zamp]){     cube([delta, delta, g + Zamp + 0.1]);    }
    }
}
// ---------------------------------------------------------------------
    module SignWaveHill(Xamp, Yamp, Zamp, delta) {
    pitchX = Xamp / Xcount;
    y_angle_pitch = 360/Ycount;
    x_angle_pitch = 360/Xcount;

	for (	 seqY = [0:pitchY/2:Ycount  - 1] ){
	    amp = Zamp * cos(seqY * y_angle_pitch - 180);

            for ( seqX = [0:0.5:Xcount - 1] ){

              x = (seqX   ) * pitchX ;
	      y = (seqY   ) * pitchY   - Y2;

     	     two_by_two ( amp, seqX, x_angle_pitch, pitchX, D2, x, y,  Zamp, pitchY );
	      y = (seqY + 0.5 )* pitchY  - Y2;
	     # two_by_two   ( amp, seqX, x_angle_pitch, pitchX, D2, x, y,  Zamp, pitchY );

	     }
	 }
        }	


  SignWaveHill(Xamp, Yamp, Zamp, pitchX);


2024年01月29日(月) 旧暦 [n年日記] [更新:"2024/01/29 07:51:45"]

#1 [openscad] hull() does not work yet

STL model








// SignWave shaped hill


// ---------------------------------------------------------------------
    module SignWaveHill  (Xamp, Yamp, Zamp, delta, Xcount, Ycount, pitchX, pitchY) {
    D2 = delta/2;
    pitchX = Xamp / Xcount;
    y_angle_pitch = 360/Ycount;
    x_angle_pitch = 360/Xcount;

	for (	  seqY = [0:0.5:Ycount - 1] ){
            for ( seqX = [0:0.5:Xcount - 1] ){

              x = (seqX   ) * pitchX ;
              y = (seqY   ) * pitchY       ;
// ---------------------------------------------------------------------------------------------------------
hull(){ // works only on X axis (why ?)
                                                    	        amp = Zamp * cos( seqY         * y_angle_pitch - 180);
                                                            z = amp *        cos((seqX       ) * x_angle_pitch - 180);
     translate([x     , y,      Zamp]){ cube([delta, delta, z + Zamp + 0.1]);    }
// --------------------------------------------------------------------------------------------------------
                                                                amp = Zamp * cos((seqY + 0.5)  * y_angle_pitch - 180);
                                                            z = amp *        cos((seqX      )  * x_angle_pitch - 180);
     translate([x     , y + D2, Zamp]){ cube([delta, delta, z + Zamp + 0.1]);    }
// --------------------------------------------------------------------------------------------------------
                                                                amp = Zamp * cos( seqY         * y_angle_pitch - 180);
                                                            g = amp *        cos((seqX + 0.5 ) * x_angle_pitch - 180);
     translate([x + D2, y,      Zamp]){ cube([delta, delta, g + Zamp + 0.1]);    }

// --------------------------------------------------------------------------------------------------------
                                                                amp = Zamp * cos((seqY + 0.5)  * y_angle_pitch - 180);
                                                            g = amp *        cos((seqX + 0.5 ) * x_angle_pitch - 180);
     translate([x + D2, y + D2, Zamp]){ cube([delta, delta, g + Zamp + 0.1]);    }
}
// ---------------------------------------------------------------------------------------------------------
	     }
	 }
        }	

    Xamp  = 50; // one wave length
    Yamp  = 50; // one wave length
    Zamp  = 20; // amplitude (height)

    Xcount = 50;
    Ycount = 50;

    pitchX = Xamp/Xcount;
    pitchY = Yamp/Ycount;
    delta = pitchX;

    X2 = Xamp/2;
    Y2 = Yamp/2;
    D2 = delta/2;


  SignWaveHill(Xamp, Yamp, Zamp, delta, Xcount, Ycount, pitchX, pitchY);


#2 x 1.4142 version

STL modeld
// SignWave shaped hill


// ---------------------------------------------------------------------
    module SignWaveHill  (Xamp, Yamp, Zamp, delta, Xcount, Ycount, pitchX, pitchY) {
    D2 = delta/2;
    pitchX = Xamp / Xcount;
    y_angle_pitch = 360/Ycount;
    x_angle_pitch = 360/Xcount;

            for ( seqX = [0:0.5:Xcount - 1] ){
	for (	  seqY = [0:0.5:Ycount - 1] ){

              x = (seqX   ) * pitchX ;
              y = (seqY   ) * pitchY       ;
// ---------------------------------------------------------------------------------------------------------
hull(){ // works only on X axis (why ?)
                                                    	        amp = Zamp * cos( seqY         * y_angle_pitch - 180);
                                                            z = amp *        cos((seqX       ) * x_angle_pitch - 180);
     translate([x     , y,      Zamp]){ cube([delta, delta, z + Zamp + 0.1]);    }

                                                                amp = Zamp * cos((seqY + 0.5)  * y_angle_pitch - 180);
                                                            z = amp *        cos((seqX      )  * x_angle_pitch - 180);
     translate([x     , y + D2, Zamp]){ cube([delta, delta, z + Zamp + 0.1]);    }

                                                                amp = Zamp * cos( seqY         * y_angle_pitch - 180);

                                                            g = amp *        cos((seqX + 0.5 ) * x_angle_pitch - 180);
     translate([x + D2, y,      Zamp]){ cube([delta, delta, g + Zamp + 0.1]);    }


                                                                amp = Zamp * cos((seqY + 0.5)  * y_angle_pitch - 180);
                                                            g = amp *        cos((seqX + 0.5 ) * x_angle_pitch - 180);
     translate([x + D2, y + D2, Zamp]){ cube([delta, delta, g + Zamp + 0.1]);    }
}
// ---------------------------------------------------------------------------------------------------------
	     }
	 }
        }	

    Xamp  = 50 * 1.4142; // one wave length
    Yamp  = 50 * 1.4142; // one wave length
    Zamp  = 20; // amplitude (height)

    Xcount = 50;
    Ycount = 50;

    pitchX = Xamp/Xcount;
    pitchY = Yamp/Ycount;
    delta = pitchX;

    X2 = Xamp/2;
    Y2 = Yamp/2;
    D2 = delta/2;

  SignWaveHill(Xamp, Yamp, Zamp, delta, Xcount, Ycount, pitchX, pitchY);


2024年01月30日(火) 旧暦 [n年日記] [更新:"2024/01/30 06:05:18"]

#1 [openscad] Sign Wave by hexagonal placemnet

STL format (one unit)
The left: one unit, count = 100, this is to be used for conversion
the right: 4 x 4 unit, count = 50, this is just for a reference for placement.








R3 = 1.7320508;

module SignWaveHexagonal ( X, Y, Z, count ) {
    Z2 = Z/2;      // cos varies -1 to 1, make it half
    delta = X /count;
    constx = -180; // phase shift to start on bottom
    consty = 0;
    zshift = 1;  // convert amplitude (-1 to +1) to (0, 2)
    bottom = 0.1; // not to give true 0

    for (    seqY = [0:1:count - 1] ){
      for (  seqX = [0:1:count - 1] ){  
        x = (seqX   ) * delta          ;  // location x
        y = (seqY   ) * delta  * R3 / 2;  // location y
        height = Z2 * (cos (seqY / count * 360 + constx )         + zshift )
                    * (cos (seqX / count * 360 + consty / 2 * R3) + zshift ) + bottom;
        translate ([x,y,0]) cube ([delta, delta, height]);
	} 
    }
}

module two_unit (x, y, z, count) {
translate([ x/2, y/2 * R3, 0])  SignWaveHexagonal ( x,  y,  z, count ) ;
                                SignWaveHexagonal ( x,  y,  z, count ) ;
}

n = 0;       // n = 0 gives only one unit, place x pitch 50, y pitch 86.60
count = 100; //  not make too big if n > 1

// n = 0, count = 200 needs 20 minutes to generate STL format

for  (xn  = [0:1:n]){
     x = xn * 50;
     for  (yn  = [0:1:n]){
        y = yn * 50 * R3 * 2;
	  translate([x, y, 0]) two_unit (50,50,20, count);
     }
 }



最近の日記
2024年11月14日
DWL66+ 2018 405 nm
2024年02月19日
another (large, 0.55 x 1.0 m/m) version for contrast curve
2024年02月15日
curved star cone
2024年02月13日
paraboloid with base plane
2024年02月09日
bit map format for contrast curve
以上、4 日分です。
タイトル一覧
カテゴリ分類
Powered by hns-2.19.9, HyperNikkiSystem Project