2023年4月2日日曜日

改良中

aaa






はい、zion_zousoku_xを1.0以外の値にすることで、x軸方向の移動速度を調整できます。zion_zousoku_xが1.0より大きければ、x軸方向の移動速度が加速し、1.0より小さければ減速します。例えば、zion_zousoku_x = 2.0とすると、x軸方向の移動速度が2倍になります。








import bpy
import math
import random
from mathutils import Vector

# 速度を指定する
zion_speed = 1.0
zion_zousoku_x = 2.0  # x軸方向の速度を倍率で調整

# 目標位置を指定する
zion_target = Vector((0, -60, 0))

# 平行移動するかどうかを指定する
parallel = False

# 平行移動量を指定する
parallel_distance = Vector((300, 300, 300))  # ここを変更する

# 球体を作成する関数
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 = 0.0001
    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, 0))
    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
    if parallel:
        target_location = location + parallel_distance
    else:
        # 表面に沿って動くように設定する
        normal = location.normalized()
        target_location = location + normal * 60  # 半径30の球体表面に沿って動く
    distance = (target_location - location).length
    # x軸方向の速度を加算する
    speed_x = distance / (zion_speed + zion_zousoku_x)
    speed = zion_speed / distance + zion_zousoku_x / speed_x
    set_animation(sphere, start_frame, end_frame, target_location, speed)












最終地点も 動かしたが 倍率で動かしたので 無効




import bpy
import math
import random
from mathutils import Vector

# 速度を指定する
zion_speed = 1.0
zion_zousoku_x = 1.1

# 目標位置を指定する
zion_target = Vector((0, -60, 0))

# 平行移動するかどうかを指定する
parallel = False

# 平行移動量を指定する
parallel_distance = Vector((300, 300, 300))  # ここを変更する

# 球体を作成する関数
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 = 0.0001
    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, 0))
    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
    if parallel:
        target_location = location + parallel_distance
    else:
        # 表面に沿って動くように設定する
        normal = location.normalized()
        target_location = location + normal * 60  # 半径30の球体表面に沿って動く
    # x軸方向の速度を調整する
    if target_location.x > location.x:
        target_location.x *= zion_zousoku_x
    else:
        target_location.x /= zion_zousoku_x
    distance = (target_location - location).length
    speed = zion_speed / distance 
    set_animation(sphere, start_frame, end_frame, target_location, speed)

# 最終位置のx成分も調整する
if not parallel:
    for sphere in spheres:
        location = sphere.location
        if location.x > 0:
            sphere.location.x *= zion_zousoku_x
        else:
            sphere.location.x /= zion_zousoku_x













bbb

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

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