形状に沿ったランダム配置

背景向けの、細かいオブジェクトをマップの形状に沿ってランダムに配置するスクリプトをつくってみました。

distribution_00

複製したいオブジェクト選択してスクリプトを実行すると・・・

 

distribution_01

背景モデル上にランダムに配置していきます。

 

ポリゴンの面積に比例して一様に分布させます。背景モデルがどんな形をしていても問題ありません。コリジョンの計算もしないので計算も軽いかと思います。

背景モデラーならたくさんあるオブジェクトを手作業で配置するなんて嫌ですよね?あらかじめバラ撒いてから修正するほうが楽なはずです。前回と同じように累積して乱数を分布させますが、今回のほうがわかりやすいのではないかと思います。スクリプトは3段階のステップで処理しています。

①個々のポリゴンフェースの面積を調べる

②面積比からランダムにポリゴンフェースを選ぶ

③該当するポリゴンフェース内の座標をランダムで得る

triangle_space

はじめに対象モデルのポリゴンフェースをリスト化して、面積を計算していきます。面積は外積の長さの半分で求まります。

 

accumulate_graph

面積のリストが出来たら、今度は累積面積のリストをつくります。なぜかというと、乱数を面積比で振り分けるためです。図を見てもらえるとわかると思いますが、累積グラフの縦軸はうまく面積比の差で分かれていますよね。ここに乱数を振り分ければ該当するフェースを得ることが出来ます。たとえば、フェースの合計面積は93なので、0から93の間で乱数を取ります。もし40が出たら、31から51までの3番のフェースということになります。幅の広さで、0番のフェースは当たりにくいし、逆に4番のフェースは当たりやすいのがわかると思います。

 

triangle_position

該当するフェースが見つかったら今度はその三角形内の座標を求めます。三角形のエッジ(ベクトル)の係数に乱数を掛けて求めます。係数の合計が1以上になった場合は三角形の外側(図の平行四辺形の片側、薄い三角形内)に出てしまうので、そこは値を反転させて調整します。

これでポリゴンの大きさにかかわらずオブジェクトをモデル表面上にランダムに配置できるはずです。ちなみに、四角ポリゴンは三角ポリゴンが2枚あるとみなして処理をしています。

 

distribution_03

このような形状でも一発です。

広告

コメントを残す

以下に詳細を記入するか、アイコンをクリックしてログインしてください。

WordPress.com ロゴ

WordPress.com アカウントを使ってコメントしています。 ログアウト / 変更 )

Twitter 画像

Twitter アカウントを使ってコメントしています。 ログアウト / 変更 )

Facebook の写真

Facebook アカウントを使ってコメントしています。 ログアウト / 変更 )

Google+ フォト

Google+ アカウントを使ってコメントしています。 ログアウト / 変更 )

%s と連携中