import bpy
import math
zion_collection_name = "分布 to x 平行移動sphere"
# コレクションを作成する
col = bpy.data.collections.new(zion_collection_name)
bpy.context.scene.collection.children.link(col)
import bpy
import math
zion_collection_name = "分布 to xy 平行移動sphere"
# コレクションを作成する
col = bpy.data.collections.new(zion_collection_name)
bpy.context.scene.collection.children.link(col)
import bpy
import math
zion_collection_name = "分布 to xyz 平行移動sphere"
# コレクションを作成する
col = bpy.data.collections.new(zion_collection_name)
bpy.context.scene.collection.children.link(col)
import bpy
# 新しいフレーム長さを設定する
new_end_frame = 600
# 現在のフレーム長さを取得する
current_end_frame = bpy.context.scene.frame_end
# フレーム長さを変更する
bpy.context.scene.frame_end = new_end_frame
以下のように、parallel_distanceを(300, 300, 0)に変更することで、x軸とy軸の両方に同じ量だけ平行移動することができます。
python
Copy code
# 平行移動量を指定する
parallel_distance = Vector((300, 300, 0)) # x軸とy軸に平行移動する
# obj.name = "分布 to x 平行移動sphere"
import bpy
import math
import random
from mathutils import Vector
# 速度を指定する
zion_speed = 1.0
# 目標位置を指定する
zion_target = Vector((600, 0, 0)) # x軸とy軸の両方に平行に移動する
# 球体を作成する関数
def create_sphere(location, radius):
bpy.ops.mesh.primitive_uv_sphere_add(location=location, radius=radius, enter_editmode=False)
# アニメーションを設定する関数
def set_animation(obj, start_frame, end_frame, target_location, speed):
distance = (target_location - obj.location).length
duration = distance / speed
for frame in range(start_frame, end_frame+1):
t = (frame - start_frame) / duration
obj.location = obj.location.lerp(target_location, t)
obj.keyframe_insert(data_path="location", frame=frame)
# 球体を作成する
spheres = []
for i in range(100):
phi = random.uniform(0, math.pi)
theta = random.uniform(0, 2*math.pi)
radius = 30
x = radius * math.sin(phi) * math.cos(theta)
y = radius * math.sin(phi) * math.sin(theta)
z = radius * math.cos(phi)
location = Vector((x, y, z))
create_sphere(location, 1.0)
obj = bpy.context.active_object
obj.name = "分布平行移動sphere"
spheres.append(obj)
# アニメーションを設定する
for i, sphere in enumerate(spheres):
start_frame = 1
end_frame = 600
location = sphere.location
target_location = location + zion_target
distance = (target_location - location).length
speed = zion_speed / distance
set_animation(sphere, start_frame, end_frame, target_location, speed)
# obj.name = "分布 to xy 平行移動sphere"
import bpy
import math
import random
from mathutils import Vector
# 速度を指定する
zion_speed = 1.0
# 目標位置を指定する
zion_target = Vector((600, 600, 0)) # x軸とy軸の両方に平行に移動する
# 球体を作成する関数
def create_sphere(location, radius):
bpy.ops.mesh.primitive_uv_sphere_add(location=location, radius=radius, enter_editmode=False)
# アニメーションを設定する関数
def set_animation(obj, start_frame, end_frame, target_location, speed):
distance = (target_location - obj.location).length
duration = distance / speed
for frame in range(start_frame, end_frame+1):
t = (frame - start_frame) / duration
obj.location = obj.location.lerp(target_location, t)
obj.keyframe_insert(data_path="location", frame=frame)
# 球体を作成する
spheres = []
for i in range(100):
phi = random.uniform(0, math.pi)
theta = random.uniform(0, 2*math.pi)
radius = 30
x = radius * math.sin(phi) * math.cos(theta)
y = radius * math.sin(phi) * math.sin(theta)
z = radius * math.cos(phi)
location = Vector((x, y, z))
create_sphere(location, 1.0)
obj = bpy.context.active_object
obj.name = "分布平行移動sphere"
spheres.append(obj)
# アニメーションを設定する
for i, sphere in enumerate(spheres):
start_frame = 1
end_frame = 600
location = sphere.location
target_location = location + zion_target
distance = (target_location - location).length
speed = zion_speed / distance
set_animation(sphere, start_frame, end_frame, target_location, speed)
# obj.name = "分布 to xyz 平行移動sphere"
import bpy
import math
import random
from mathutils import Vector
# 速度を指定する
zion_speed = 1.0
# 目標位置を指定する
zion_target = Vector((600, 600, 600)) # x軸とy軸の両方に平行に移動する
# 球体を作成する関数
def create_sphere(location, radius):
bpy.ops.mesh.primitive_uv_sphere_add(location=location, radius=radius, enter_editmode=False)
# アニメーションを設定する関数
def set_animation(obj, start_frame, end_frame, target_location, speed):
distance = (target_location - obj.location).length
duration = distance / speed
for frame in range(start_frame, end_frame+1):
t = (frame - start_frame) / duration
obj.location = obj.location.lerp(target_location, t)
obj.keyframe_insert(data_path="location", frame=frame)
# 球体を作成する
spheres = []
for i in range(100):
phi = random.uniform(0, math.pi)
theta = random.uniform(0, 2*math.pi)
radius = 30
x = radius * math.sin(phi) * math.cos(theta)
y = radius * math.sin(phi) * math.sin(theta)
z = radius * math.cos(phi)
location = Vector((x, y, z))
create_sphere(location, 1.0)
obj = bpy.context.active_object
obj.name = "分布平行移動sphere"
spheres.append(obj)
# アニメーションを設定する
for i, sphere in enumerate(spheres):
start_frame = 1
end_frame = 600
location = sphere.location
target_location = location + zion_target
distance = (target_location - location).length
speed = zion_speed / distance
set_animation(sphere, start_frame, end_frame, target_location, speed)
bbb