エンドレスな素数遊びですが、今回は素数階段の延長で、オブジェを作ります。
素数が現れたら、右に90度回転し上がっていく階段です。
| 準備するもの |
|
#!/bin/bash
cat <<EOL>/tmp/tmp.py
import bpy,math
bpy.data.materials['Material'].diffuse_color=(0, 0.7, 1)
bpy.data.materials['Material'].emit=0.1
red=bpy.data.materials.new("red")
red.diffuse_color=(1, 0, 0)
yellow=bpy.data.materials.new("yellow")
yellow.diffuse_color=(1,1,0)
green=bpy.data.materials.new("green")
green.diffuse_color=(0,1,0)
bpy.ops.transform.resize(value=(999, 999, 0.5))
pos=bpy.context.object.location
forwards=[(0,2,0),(2,0,0),(0,-2,0),(-2,0,0)]
ups=[(0,2,2),(2,0,2),(0,-2,2),(-2,0,2)]
forward=forwards.pop(0)
forwards.append(forward)
up=ups.pop(0)
ups.append(up)
num=2
while num < 500:
bpy.ops.mesh.primitive_cube_add(location=pos)
bpy.ops.transform.resize(value=(1,1,1))
for i in range(num-1,0,-1):
if i < 2:
bpy.context.object.data.materials.append(red)
bpy.ops.transform.translate(value=up)
forward=forwards.pop(0)
forwards.append(forward)
up=ups.pop(0)
ups.append(up)
break
if (num % i) == 0:
bpy.context.object.data.materials.append(yellow)
bpy.ops.transform.translate(value=forward)
break
pos=bpy.context.object.location
bpy.ops.object.text_add(rotation=(0,0,0),location=pos)
bpy.context.object.data.materials.append(green)
bpy.context.object.data.body="%d" % num
bpy.context.object.data.extrude=0.1
bpy.context.object.data.size=1.0
bpy.context.object.data.align="CENTER"
bpy.ops.transform.translate(value=(0,-0.6,1.1))
num = num + 1
EOL
blender -P /tmp/tmp.py




コメント