#目次
0.スザンヌを1つ出現させる
1.スザンヌを1列に並べる
2.スザンヌを2次元的に並べる
3.スザンヌを3次元的に並べる
4.サンプルコード
#0.スザンヌを1つ出現させる
前回の記事で紹介したスザンヌを1つ出現させるコードです。
今回はこれを応用していきます。
import bpy
bpy.ops.mesh.primitive_monkey_add(
size=2,
enter_editmode=False,
align='WORLD',
location=(0, 0, 0),
scale=(1, 1, 1)
)
一見長いように見えますが、抽象化して情報を圧縮し記号化していくことで、シンプルに考えることができるという話でした(↓)
===>primitive_monkey_add(□,□,□,□,□)
コードの意味:スザンヌ出現させる。その時に位置とか大きさを変えたりもできる。
※ちなみにimportは、ライブラリ(誰かが作ってくれた便利なコードの集まり)を使えるようにするためのものです。
#1.スザンヌを1列に並べる
◯forループという仕組みを使った反復処理をします。
反復処理を理解するポイントは、
処理を行う回数
と
処理にともなって変化する数値
を別々に考えるということです。
今は、よくわからないと思いますが大丈夫です !!
##1-0.x座標を1ずつずらして配置する
◯ポイントは、処理にともなって変化する数値が1ずつ増えていくところです。
import bpy
# iは、 0→1→2→3→4
for i in range(0,5):
bpy.ops.mesh.primitive_monkey_add(
size=2,
enter_editmode=False,
align='WORLD',
#注目↓
location=(i, 0, 0),
scale=(1, 1, 1)
)
上のコードは記号化(抽象化)すると、
i → 0,1,2,3,4 : ===>primitive_monkey_add(□,□,□,□,□)
のようにかけます。
意味 :
iが処理を繰り返す度に1ずつ増えていく。
iが、0 <= i < 5を満たすならば、スザンヌを出現させる処理を行う。
そしてx座標の値にiの値を代入する。
処理の回数は5回
処理にともなって変化する数値は0→1→2→3→4となります。
これを実行すると下の写真のようになります。なんか可愛い..??
◯Point:range(どこから,どこまで)
反復処理の範囲を決めるために使います。
##1-1.x座標を3ずつずらして配置する(Part1)
◯Pointは、スザンヌのx座標がi * 3と書かれている部分です。
*という記号はかけ算の記号です。
import bpy
# iは、 0→1→2→3→4
for i in range(0,5):
bpy.ops.mesh.primitive_monkey_add(
size=2,
enter_editmode=False,
align='WORLD',
#注目↓
location=(i * 3, 0, 0),
scale=(1, 1, 1)
)
スザンヌのx座標は、i * 3となります。
つまり、
処理の1回目(i = 0) → i * 3 = 0
処理の2回目(i = 1) → i * 3 = 3
処理の3回目(i = 2) → i * 3 = 6
処理の4回目(i = 3) → i * 3 = 9
処理の5回目(i = 4) → i * 3 = 12
##1-2.x座標を3ずつずらして配置する(Part2)
◯ポイントは、range( )の中です。
import bpy
# iは、 0→3→6→9→12
for i in range(0,13,3):
bpy.ops.mesh.primitive_monkey_add(
size=2,
enter_editmode=False,
align='WORLD',
#注目↓
location=(i, 0, 0),
scale=(1, 1, 1)
)
range( )は、range(最初の値,最後の値,ステップ)
のようにして、
最初の数値から最後の数値までの範囲の中で数値を何個飛ばしにするかを決めることができます。
つまり、for i in range(0,13,3):
は、0から3つおきに数値を選んで i に代入していくことをi < 13の範囲で繰り返すということです。
⬇️
0 1 2 3 4 5 6 7 8 9 10 11 12
処理の1回目 → i = 0
処理の2回目 → i = 3
処理の3回目 → i = 6
処理の4回目 → i = 9
処理の5回目 → i = 12
※range(0,5)は実は、range(0,5,1)で、1が省略されていると考えることができますね。
#2.スザンヌを2次元的に並べる
◯ポイントはforループの中に別のforループが入っているところです。
import bpy
# iは、 0→3→6→9→12
for i in range(0,13,3):
for j in range(0,13,3):
bpy.ops.mesh.primitive_monkey_add(
size=2,
enter_editmode=False,
align='WORLD',
#注目↓
location=(i, j, 0),
scale=(1, 1, 1)
)
※ : という記号は条件文はここで終わりだよということを示しています。
記号化(抽象化)すると、
i = 0→3→6→9→12:
j = 0→3→6→9→12:
===>primitive_monkey_add(□,□,□,□,□)
のようにかけます。
これは、
( i , j ) = (0,0),(0,3),(0,6),(0,9),(0,12),
(3,0),(3,3),(3,6),(3,9),(3,12),
(6,0),(6,3),(6,6),(9,9),(12,12),
(9,0),(9,3),(9,6),(9,9),(9,12),
(12,0),(12,3),(12,6),(12,9),(12,12)
ということです。
#3.スザンヌを3次元的に並べる
◯先ほどの応用です。
import bpy
for i in range(0,13,3):
for j in range(0,13,3):
for k in range(0,13,3):
bpy.ops.mesh.primitive_monkey_add(
size=2,
enter_editmode=False,
align='WORLD',
#注目↓
location=(i, j, k),
scale=(1, 1, 1)
)
#4.サンプルコード
◯サンプルコードだけをまとめました。
####4-0.スザンヌを1つだけ出現させるコード
import bpy
bpy.ops.mesh.primitive_monkey_add(
size=2,
enter_editmode=False,
align='WORLD',
location=(0, 0, 0),
scale=(1, 1, 1)
)
####4-1.スザンヌを1列に並べるコード(1ずつずらす)
import bpy
# iは、 0→1→2→3→4
for i in range(0,5):
bpy.ops.mesh.primitive_monkey_add(
size=2,
enter_editmode=False,
align='WORLD',
#注目↓
location=(i, 0, 0),
scale=(1, 1, 1)
)
####4-2.スザンヌを1列に並べるコード(3ずつずらす:Part1)
import bpy
# iは、 0→1→2→3→4
for i in range(0,5):
bpy.ops.mesh.primitive_monkey_add(
size=2,
enter_editmode=False,
align='WORLD',
#注目↓
location=(i * 3, 0, 0),
scale=(1, 1, 1)
)
####4-3.スザンヌを1列に並べるコード(3ずつずらす:Part2)
import bpy
# iは、 0→3→6→9→12
for i in range(0,13,3):
bpy.ops.mesh.primitive_monkey_add(
size=2,
enter_editmode=False,
align='WORLD',
#注目↓
location=(i, 0, 0),
scale=(1, 1, 1)
)
####4-4.スザンヌを2次元的に並べるコード
import bpy
# iは、 0→3→6→9→12
for i in range(0,13,3):
for j in range(0,13,3):
bpy.ops.mesh.primitive_monkey_add(
size=2,
enter_editmode=False,
align='WORLD',
#注目↓
location=(i, j, 0),
scale=(1, 1, 1)
)
####4-5.スザンヌを3次元的に並べるコード
import bpy
for i in range(0,13,3):
for j in range(0,13,3):
for k in range(0,13,3):
bpy.ops.mesh.primitive_monkey_add(
size=2,
enter_editmode=False,
align='WORLD',
#注目↓
location=(i, j, k),
scale=(1, 1, 1)
)
####4-6.円形に並べるコード
import bpy
import math
#変数に数値を代入する
#数値の変更を簡単にするため
n = 12
r = 10.0
for i in range(0, n):
rad = 2 * math.pi * i /n # 角度計算2π i /n
x = r * math.cos(rad) # x座標計算 半径*cosθ
y = r * math.sin(rad) # y座標計算 半径*sinθ
bpy.ops.mesh.primitive_monkey_add(
size=2,
enter_editmode=False,
align='WORLD',
#注目↓
location=(x, y, 0),
scale=(1, 1, 1)
)
####4-7.渦状に並べるコード
import bpy
import math
n = 144
r = 10.0
for i in range(0, n):
rad = 2 * math.pi * i /24 # 角度計算2π i /24
x = (r * i)/10 * math.cos(rad) # x座標計算 半径*cosθ
y = (r * i)/10 * math.sin(rad) # y座標計算 半径*sinθ
bpy.ops.mesh.primitive_monkey_add(
size=2,
enter_editmode=False,
align='WORLD',
#注目↓
location=(x, y, 0),
scale=(1, 1, 1)
)
####4-8.螺旋をつくるコード
import bpy
import math
n = 144
r = 10.0
for i in range(0, n):
rad = 2 * math.pi * i /12 # 角度計算2π i /12
x = r * math.cos(rad) # x座標計算 半径*cosθ
y = r * math.sin(rad) # y座標計算 半径*sinθ
bpy.ops.mesh.primitive_monkey_add(
size=2,
enter_editmode=False,
align='WORLD',
#注目↓
location=(x, y, i),
scale=(1, 1, 1)
)