2023年3月30日木曜日

成功 x軸方向への 分布 平行移動 球体

aaa


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

連番 007 未来光円錐 過去光円錐 円周中心からの球体放出

aaa 参考 2023年3月26日日曜日 製作 002b 未来光円錐の方向 線路レールで https://ia2023sha.blogspot.com/2023/03/002b.html import bpy import math zion_co...