2023年4月5日水曜日

定速 回転 

 #  1個の球体の 軌道回転 成功


import bpy

from mathutils import Vector

import math


radius = 60  # 軌道半径

speed = 1.0  # 回転速度

distance_per_frame = 0.2  # 移動する距離

current_angle = 0.0  # 現在の角度


# 球体を作成する

bpy.ops.mesh.primitive_uv_sphere_add(radius=1, location=(radius, 0, 0))

sphere = bpy.context.active_object

sphere.name = "Sphere"


# 毎フレーム呼び出される関数

def animate_spheres(scene):

    global current_angle

    global sphere


    # 球体を回転する

    sphere.rotation_euler[2] += speed


    # 次の位置を計算する

    current_angle += distance_per_frame / radius

    if current_angle > 2 * math.pi:

        current_angle -= 2 * math.pi

    x = radius * math.cos(current_angle)

    y = radius * math.sin(current_angle)

    z = 0

    location = Vector((x, y, z))


    # 球体の位置を更新する

    sphere.location = location


# フレーム更新のコールバック関数を登録する

bpy.app.handlers.frame_change_pre.append(animate_spheres)




複数だと

描画が 飛びすぎる


import bpy
import math
from mathutils import Vector

# 回転速度を設定する
zion_speed_round = 1.0

# 半径を設定する
radius = 60

# 移動する距離を指定する
distance_per_frame = 0.2

# 16個の球体を作成する
spheres = []
for i in range(16):
    angle = 2 * i * math.pi / 16
    x = radius * math.cos(angle)
    y = radius * math.sin(angle)
    z = -60
    location = Vector((x, y, z))
    sphere_radius = 1
    bpy.ops.mesh.primitive_uv_sphere_add(location=location, radius=sphere_radius)
    obj = bpy.context.active_object
    obj.name = "Sphere_" + str(i) # オブジェクトに名前を付ける
    spheres.append(obj)

# フレーム更新のコールバック関数を定義する
def animate_spheres(scene):
    # 現在のフレーム数から球体の角度を計算する
    angle = (scene.frame_current * zion_speed_round) % (2 * math.pi)
    for i, sphere in enumerate(spheres):
        # 次のフレームでの角度を計算する
        next_angle = ((scene.frame_current + 1) * zion_speed_round) % (2 * math.pi)
        # 次のフレームでの位置を計算する
        x = radius * math.cos(next_angle)
        y = radius * math.sin(next_angle)
        z = 0
        location = Vector((x, y, z))
        # 球体の位置を更新する
        sphere.location = location
        # 球体を回転する
        angle = next_angle - i * 2 * math.pi / 16
        sphere.rotation_euler[2] += angle

# フレーム更新のコールバック関数を登録する
bpy.app.handlers.frame_change_pre.append(animate_spheres)






改良中 y=-30 中心 円周への球体36個

できた y= -30 中心で z=0平面移動  import bpy import math zion_collection_name = "線路レール 観察者" # コレクションを作成する col = bpy.data.collections.new(zio...