• 検索結果がありません。

第 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