2023年4月8日土曜日

ニュートン ball 速度規定を 基準にする distance_per_frame = 0.1

 



# 斜め上 スタート


import bpy

from math import sin, cos, pi


zion_object_name = "幻想 斜め 速度"


# 設定可能な変数

start_pos = (0, 0, 30)  # 開始位置

end_pos = (-30, 0, 0)  # 終了位置

radius = 2.0  # 半径

animation_frames = 600  # アニメーションの再生時間(フレーム数)


sokudo_chousei =1.41

distance_per_frame = 0.1 * sokudo_chousei  # 1フレームあたりに進む距離


# 球体を作成する

bpy.ops.mesh.primitive_uv_sphere_add(radius=radius, enter_editmode=False, align='WORLD', location=start_pos)

sphere = bpy.context.object

sphere.name = zion_object_name  # オブジェクトの名前を変更


# アニメーションを再生するたびに呼び出される関数

def animate_sphere(scene):

    global sphere, distance_per_frame


    # 現在のフレームにおける球体の位置を計算する

    frame = scene.frame_current

    pos_x = start_pos[0] - ((start_pos[0] - end_pos[0]) / animation_frames) * frame

    pos_y = start_pos[1] - ((start_pos[1] - end_pos[1]) / animation_frames) * frame

    pos_z = start_pos[2] - ((start_pos[2] - end_pos[2]) / animation_frames) * frame

    sphere.location = (pos_x, pos_y, pos_z)


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

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


# アニメーションの再生時間を設定する

bpy.context.scene.frame_end = animation_frames


# スクリプトを実行する前にフレームを初期化する

bpy.context.scene.frame_set(0)






 # 水平地面


import bpy

from math import sin, cos, pi


zion_object_name = "リアル水平 速度"


# 設定可能な変数

start_pos = (0, 0, 0)  # 開始位置

end_pos = (-30, 0, 0)  # 終了位置

radius = 2.0  # 半径

animation_frames = 600  # アニメーションの再生時間(フレーム数)


sokudo_chousei =1.0

distance_per_frame = 0.1 * sokudo_chousei  # 1フレームあたりに進む距離


# 球体を作成する

bpy.ops.mesh.primitive_uv_sphere_add(radius=radius, enter_editmode=False, align='WORLD', location=start_pos)

sphere = bpy.context.object

sphere.name = zion_object_name  # オブジェクトの名前を変更


# アニメーションを再生するたびに呼び出される関数

def animate_sphere(scene):

    global sphere, distance_per_frame


    # 現在のフレームにおける球体の位置を計算する

    frame = scene.frame_current

    pos_x = start_pos[0] - ((start_pos[0] - end_pos[0]) / animation_frames) * frame

    pos_y = start_pos[1] - ((start_pos[1] - end_pos[1]) / animation_frames) * frame

    pos_z = start_pos[2] - ((start_pos[2] - end_pos[2]) / animation_frames) * frame

    sphere.location = (pos_x, pos_y, pos_z)


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

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


# アニメーションの再生時間を設定する

bpy.context.scene.frame_end = animation_frames


# スクリプトを実行する前にフレームを初期化する

bpy.context.scene.frame_set(0)






#  リアル斜め 速度 


import bpy

from math import sin, cos, pi


zion_object_name = "リアル斜め 速度 "


# 設定可能な変数

start_pos = (0, 0, 30)  # 開始位置

end_pos = (-30, 0, 0)  # 終了位置

radius = 2.0  # 半径

animation_frames = 600  # アニメーションの再生時間(フレーム数)


sokudo_chousei =1.0

distance_per_frame = 0.1 * sokudo_chousei  # 1フレームあたりに進む距離


# 球体を作成する

bpy.ops.mesh.primitive_uv_sphere_add(radius=radius, enter_editmode=False, align='WORLD', location=start_pos)

sphere = bpy.context.object

sphere.name = zion_object_name  # オブジェクトの名前を変更


# アニメーションを再生するたびに呼び出される関数

def animate_sphere(scene):

    global sphere, distance_per_frame


    # 現在のフレームにおける球体の位置を計算する

    frame = scene.frame_current

    pos_x = start_pos[0] - ((start_pos[0] - end_pos[0]) / animation_frames) * frame

    pos_y = start_pos[1] - ((start_pos[1] - end_pos[1]) / animation_frames) * frame

    pos_z = start_pos[2] - ((start_pos[2] - end_pos[2]) / animation_frames) * frame

    sphere.location = (pos_x, pos_y, pos_z)


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

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


# アニメーションの再生時間を設定する

bpy.context.scene.frame_end = animation_frames


# スクリプトを実行する前にフレームを初期化する

bpy.context.scene.frame_set(0)






 









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

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