2016-10-13 15 views
1

xyz座標をランダム化した3種類の異なるポリゴンを生成するスクリプトを作成しました。現在のコードはそれらを必要に応じて生成しますが、それは常にそれぞれ40個です。forループを使ってポリゴンの乱数とXYZ値を生成する

次のステップは、random number generatorとして整数を使用して、各ポリゴンタイプの乱数を生成することです。これには、ifステートメント、else-ifステートメント、およびelseステートメントを含むforループが必要です。コードは前述の引数で実行されます(私はそれらをキャンセルしたので)。ただし、1種類のポリゴン(トーラスはトリガーできません)を行うだけです。

私は2つのことについて懐疑的だ:

1:int $rng=rand(1,4);が正しくrandom numbersように動作するように1-4の範囲を作成するために指定している場合。

2:forのループがif-elseのループの場合は、最初のすべての図形の乱数を取得する必要があります。

This is a desired result I'm trying to get. This is the most recently-executed result of the code.

int $num = 40 ; 
int $rng = rand(1, 4) ; 

for ($i = 1; $i <= $num; $i++) { 

    if ($rng == 1) { 

     polySphere -r 1 -sx 20 -sy 20 -ax 0 1 0 -cuv 2 -ch 1 ; 
     int $xpos = rand(-20, 100) ; 
     int $ypos = rand(20, 80) ; 
     int $zpos = rand(20, 50) ; 
     move -r $xpos $ypos $zpos ; 
     print ($i + "sphere \n") ; 
    } 

    else if ($rng == 4) { 

     polyTorus -r 1 -sx 20 -sy 20 -ax 0 1 0 -cuv 2 -ch 1 ; 
     int $xpos = rand(-20, 100) ; 
     int $ypos = rand(20, 80) ; 
     int $zpos = rand(20, 50) ; 
     move -r $xpos $ypos $zpos ;   
     print ($i + "torus \n");  
    } 

    else { 

     polyCube -w 1 -h 1 -d 1 -sx 1 -sy 1 -sz 1 -ax 0 1 0 -cuv 4 -ch 1 ; 
     int $xpos = rand(-20, 100) ; 
     int $ypos = rand(20, 80) ; 
     int $zpos = rand(20, 50) ; 
     move -r $xpos $ypos $zpos ; 
     print ($i + "cube \n") ; 
    }  
} 

答えて

0

かわりにランダム1を毎回選ぶの40倍を、それ以外の場合は、ランダムな形状を選ぶだろうとそれを作成するforループ内$rngを配置する必要があります。

この場合、ifelseの代わりにswitchを使用して、異なるケースを判別できます。また、同じことをしているので、すべてのケースでポジションの取得と移動を繰り返す必要はありません。それらを削除すると、スクリプトの膨大さが少なくなります。ここで

はMELの例です:

int $num = 40; 

for ($i = 0; $i < $num; $i++) { 
    int $rng = rand(0, 3); 

    float $xpos = rand(-20, 100); 
    float $ypos = rand(20, 80); 
    float $zpos = rand(20, 50); 

    switch ($rng) { 
     case 0: 
      polySphere -r 1 -sx 20 -sy 20 -ax 0 1 0 -cuv 2 -ch 1; 
      print ($i+1 + ": sphere \n"); 
      break; 
     case 1: 
      polyTorus -r 1 -sx 20 -sy 20 -ax 0 1 0 -cuv 2 -ch 1; 
      print ($i+1 + ": torus \n"); 
      break; 
     case 2: 
      polyCube -w 1 -h 1 -d 1 -sx 1 -sy 1 -sz 1 -ax 0 1 0 -cuv 4 -ch 1; 
      print ($i+1 + ": cube \n"); 
      break; 
    } 

    move -r $xpos $ypos $zpos; 
} 

等の面では、ここで私はあなたが言語は、より柔軟で大きなコミュニティを持っている代わりとして拾うお勧めのPythonで同じコードだ、とあります学習するのがはるかに簡単です:

import random 
import maya.cmds as cmds 

num = 40 

for i in range(40): 
    rng = random.randint(0, 3) 

    xpos = random.uniform(-20, 100) 
    ypos = random.uniform(20, 80) 
    zpos = random.uniform(20, 50) 

    if rng == 0: 
     cmds.polySphere(r=1, sx=20, sy=20, ax=[0, 1, 0], cuv=2, ch=1) 
     print "{0}: sphere \n".format(i+1) 
    elif rng == 1: 
     cmds.polyTorus(r=1, sx=20, sy=20, ax=[0, 1, 0], cuv=2, ch=1) 
     print "{0}: torus \n".format(i+1) 
    else: 
     cmds.polyCube(w=1, h=1, d=1, sx=1, sy=1, sz=1, ax=[0, 1, 0], cuv=4, ch=1) 
     print "{0}: cube \n".format(i+1) 

    cmds.move(xpos, ypos, zpos, r=True) 

インデントと書式設定を忘れないでください。あなたのコードはそれのために現時点では読みにくいです:)

関連する問題