第 7 章 繰り返しと選択 72
7.9 多肢選択
#if (X < 10) ほげほげ
#end
という記述を書くと、X < 10という条件が成り立っているならば「ほげほげ」が実行されて、
その条件が成り立っていないならば何も実行されない、ということになります。
次のシーンは、x軸に沿って10個の球を並べた列を作っているのですが、x座標が12のもの だけ、y軸の方向へ2だけ移動させています。
シーンの例 doornotdo.pov camera {
location <9, 0, -18>
look_at <9, 0, 0>
angle 70 }
light_source { <-50, 50, -50> color rgb 1.6 }
#declare X = 0;
#while (X < 20) object {
sphere { <X, 0, 0>, 1 } pigment { color rgb 1 }
#if (X = 12)
translate <0, 2, 0>
#end }
#declare X = X + 2;
#end
7.9 多肢選択
7.9.1 多肢選択の基礎
選択の対象となる動作が3個以上あるような選択は、「多肢選択」(multibranch selection)と 呼ばれます。
7.9.2 多肢選択の記述
POV-Rayでは、多肢選択をあらわす記述は、
#switch ( 式 ) 選択肢
••
#end •
と書きます。この記述の中の「式」のところには、何らかの数値を求める式を書きます。そして、
「選択肢」のところには、いくつかの選択肢を書きます。
選択肢としては、次の3種類の記述を書くことができます。
一致選択肢 式の値が一致したときに選択される。
範囲選択肢 式の値が範囲内にあるときに選択される。
デフォルト選択肢 これ以外のどの選択肢も選択されなかったときに選択される。
7.9.3 一致選択肢
一致選択肢は、
#case ( 式 ) 動作の記述
#break
と書きます。この記述の中の「式」のところには、何らかの数値を求める式を書きます。「動作 の記述」のところには、何らかの動作をあらわす記述を書きます。
一致選択肢は、#switchの右側の式の値と、#caseの右側の式の値とが一致したときに選択 される選択肢です。
次のシーンは、x軸に沿って10個の球を並べた列を作っているのですが、x座標が6のもの はz軸を回転軸として90度だけ回転させて、x座標が10のものはy軸の方向へ2だけ移動させ て、x座標が14のものはy軸の方向に2倍だけ拡大しています。
シーンの例 case.pov camera {
location <9, 0, -18>
look_at <9, 0, 0>
angle 70 }
light_source { <-50, 50, -50> color rgb 1.6 }
#declare X = 0;
#while (X < 20) object {
sphere { <X, 0, 0>, 1 } pigment { color rgb 1 }
#switch (X)
#case (6) rotate 90*z
#break
#case (10)
translate <0, 2, 0>
#break
#case (14)
scale <1, 2, 1>
#break
#end }
#declare X = X + 2;
#end
7.9.4 範囲選択肢
範囲選択肢は、
#range ( 式1 , 式2 ) 動作の記述
#break
と書きます。この記述の中の「式1」のところには範囲の下限を求める式、「式2」のところには 範囲の上限を求める式を書きます。「動作の記述」のところには、何らかの動作をあらわす記述 を書きます。
範囲選択肢は、#switchの右側の式の値が、#caseの右側の二つの式によって指定された範囲 の中にあるときに選択される選択肢です(下限または上限と一致する場合も選択されます)。
次のシーンは、x軸に沿って10個の球を並べた列を作っているのですが、x座標が4のもの はy軸の方向に0.5倍だけ拡大して、x座標が6から12までのものはy軸の方向に2倍だけ拡 大して、x座標が14のものはy軸の方向に0.5倍だけ拡大しています。
シーンの例 range.pov camera {
location <9, 0, -18>
look_at <9, 0, 0>
angle 70 }
light_source { <-50, 50, -50> color rgb 1.6 }
7.9. 多肢選択 83
#declare X = 0;
#while (X < 20) object {
sphere { <X, 0, 0>, 1 } pigment { color rgb 1 }
#switch (X)
#case (4)
scale <1, 0.5, 1>
#break
#range (6, 12) scale <1, 2, 1>
#break
#case (14)
scale <1, 0.5, 1>
#break
#end }
#declare X = X + 2;
#end
7.9.5 デフォルト選択肢
デフォルト選択肢は、多肢選択の最後の選択肢として、
#else
動作の記述
と書きます。「動作の記述」のところには、何らかの動作をあらわす記述を書きます。
多肢選択の最後の選択肢としてデフォルト選択肢を書いておくと、これ以外のどの選択肢も選 択されなかった場合、この選択肢が選択されて、その中の「動作の記述」が実行されます。
次のシーンは、x軸に沿って10個の球を並べた列を作っているのですが、球の色を、x座標が 6のものは赤色、x座標が10のものはオレンジ色、x座標が14のものは黄色、その他のものは 水色にしています。
シーンの例 else.pov camera {
location <9, 0, -18>
look_at <9, 0, 0>
angle 70 }
light_source { <-50, 50, -50> color rgb 1.6 }
#declare X = 0;
#while (X < 20) object {
sphere { <X, 0, 0>, 1 }
#switch (X)
#case (6)
pigment { color rgb <1, 0, 0> }
#break
#case (10)
pigment { color rgb <1, 0.5, 0> }
#break
#case (14)
pigment { color rgb <1, 1, 0> }
#break
#else
pigment { color rgb <0, 1, 1> }
#end }
#declare X = X + 2;
#end