2018年
3月
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

setup diary

2007|12|
2008|01|02|03|04|05|06|07|08|09|10|11|12|
2009|01|02|03|04|05|06|07|08|09|10|11|12|
2010|01|02|03|04|05|06|07|08|09|10|11|12|
2011|01|02|03|04|05|06|07|08|09|10|11|12|
2012|01|02|03|04|05|06|07|08|10|11|12|
2013|01|02|03|04|05|06|07|08|09|10|11|12|
2014|01|02|03|04|06|08|11|
2015|01|02|03|04|05|06|07|08|10|11|12|
2016|01|02|03|04|05|06|07|08|09|10|11|12|
2017|01|02|03|04|05|06|07|08|09|10|11|12|
2018|01|02|03|04|05|06|07|08|09|10|11|12|
2019|01|02|03|04|05|06|07|08|09|10|11|12|
2020|01|02|03|04|05|06|07|08|09|10|11|12|
2021|01|02|03|04|05|06|07|08|09|10|11|12|
2022|01|02|03|04|05|06|07|08|09|10|11|12|
2023|01|02|03|04|05|06|07|08|09|10|11|

2018-03-07 povrayでネジを描画

_ 関数の等値面を使って

以前povrayでネジを書こうと思って、うまく行かずに挫折したことがある。いろいろと調べてみたら、ようやく書き方が分かったので、メモをしておくことにする。ポイントは、等値面を描くisosurfaceと、螺旋を作る関数f_helix1を使うことである。M3のネジを書くソースは以下のような感じになった。

#include "colors.inc"
#include "shapes.inc"
#include "textures.inc"
#include "functions.inc"
#declare Screw=
isosurface {
  function{
    f_helix1(x,y,z,
        1,    // number of helixes, (1 = single helix, 2 = double helix etc.)
        2*2*pi, // For number N of turns per heigth of y = 1 unit, use N*2*pi
        0.62, // minor radius,
        0.62, // major radius,
        1,    // shape parameter, 
        0.0,  // cross section type, (0.0 to 1.0 = square ... rounded to circle
              //                 over 2.0 to 3.0 = rounded to diamond and concave diamond
        45     // cross section rotation angle
      )
  }
  contained_by {box {<-1.5,-5,-1.5>,<1.5,5,1.5>}}
  rotate x*90
  texture {Brass_Texture}
}
background{ color rgb <0,0,0> }
camera {
  location <0, 20, 0>
  sky <0,0,1>
  look_at 0
}
light_source { <20, 10, 0> color White }
object{Screw}

ピッチを表すパラメーターは、1あたりのラジアンで表す。 shape parameterは、ネジ山の角度を表すパラメーターであり、1のときは45度になる。cross section typeは0にすると、尖った理想的なネジになる。しかし、minor radiusとmajor radiusの意味がよく分かっていない。minorを小さくすると、ネジの中央に穴があいてしまう。minorとmajorを等しくすると、穴があかない。その条件の下では、majorがネジの半径にはならないので、適切な値を探して指定した。これはおそらくf_helix1の性質によるものだと思うが、この関数型が分からないので、細かいことは不明である。でも、まずは書けたから一歩前進かな。