当方の「Script!3D」を使って立体を作ろう話その20。
今回は、半球(ドーム)の作図命令です。半球は球を半分にカットしたものです。
半球の作図
DOME n,sp,r,f1,f
原点・作図基準平面は、変換マトリックスとなります。
n : (out) 登録された最終図形要素番号(1〜)
sp: 分割数(3-1000)
r : 半径[mm] (>0)
f1: 底面の表示 0:しない 1:する
f : 表裏逆フラグ 0:外側が表面 1:内側が表面
まずは簡単例です。
// 半球作図テスト01
#VAR
 sp = 12   ;*分割数
 n
#DRAW
 PEN 71
 DOME n,sp,50,1,0
実行します。
20090303a

ひっくり返して底面を非表示にして内側を表にすると半球形の穴が描けます。
// 半球作図テスト02
#VAR
 sp = 12   ;*分割数
 w1
 n
#DRAW
 CAL w1 = PI  // Z軸を下向きにします
 ROXMATR w1

 PEN 72
 DOME n,sp,50,0,1
実行します。
20090303b


半球を円環状に配置してみます。
// 半球作図テスト03
#VAR
 sp = 12   ;*分割数
 sr = 50   ;*半球の半径
 nr =300   ;*円状半径
 nx = 16   ;*並べる数
 i
 ia
 ix
 iy
 iz
 n
#DRAW
 PEN 73
 CAL ia = 0
 CAL i = 0
 #WHILE (i < nx)
  CAL ix = nr*Cos(ia)
  CAL iy = nr*Sin(ia)
  CAL iz = 0
  MATRIXO ix,iy,iz
  DOME n,sp,sr,1,0
  CAL ia = ia + 2.0*PI/nx
  CAL i = i + 1
 #END
実行します。
20090303c


さて次に,UFOモドキを作図してみます。
// 半球作図テスト04 UFO?
#VAR
 sp = 12   ;*分割数
 sr = 50   ;*半球の半径
 nr = 80   ;*円状半径
 r1 =150   ;*スカート半径下
 r2 =100   ;*スカート半径上
 r3 = 20   ;*窓球半径
 nm = 12   ;*窓球の数
 h1 = 40   ;*スカート高さ
 h2 = 80   ;*本体高さ
 h3 = 60   ;*屋根高さ
 i
 ia
 ix
 iy
 iz
 n
 w1
#DRAW
 // ----- 下部 -----
 CAL w1 = PI
 ROXMATR w1
 PEN 2
 CAL ia = 0
 CAL i = 0
 #WHILE (i < 3)
  CAL ix = nr*Cos(ia)
  CAL iy = nr*Sin(ia)
  CAL iz = 0
  MATRIXO ix,iy,iz
  DOME n,sp,sr,0,0
  CAL ia = ia + 2.0*PI/3
  CAL i = i + 1
 #END
 // ----- スカート -----
 INIMATR
 PEN 80
 CTUBE n,sp,r1,h1, r2,0,0, 1,0,0
 // ----- 本体 -----
 MATRIXO 0,0,h1
 PEN 81
 CYLIND n,sp,r2,h2, 0,0,0
 // ----- 窓 -----
 PEN 4
 CAL ia = 0
 CAL i = 0
 #WHILE (i < nm)
  CAL ix = (r2-0.5*r3)*Cos(ia)  // 窓球は少し中に入れます
  CAL iy = (r2-0.5*r3)*Sin(ia)
  CAL iz = h1 + h2/2
  MATRIXO ix,iy,iz
  SPHERE n,sp,r3,0
  CAL ia = ia + 2.0*PI/nm
  CAL i = i + 1
 #END
 // ----- 屋根 -----
 CAL w1 = h1 + h2
 MATRIXO 0,0,w1
 PEN 82
 CCONE n,sp,r2,h3, 0,0, 0,0
実行します。
20090303d

変数値はご自由に指定して下さい。
単純な3D図形でも、色々と組み合わせていくと複雑な図形を作る事は出来ると思います。まぁ、完成形に持っていかなくても、粗めに作っておいて、スケッチアップ等へデータを渡し、そちらで完成形を作る、というパターンでも良いと思います。