2023年3月19日日曜日

カメラ 球体 ーー90から-30 電車後端








import bpy
import math

# Create a sphere object
bpy.ops.mesh.primitive_uv_sphere_add(radius=2.0, location=(-90.0, 0.0, 0.0))

# Set start and end frames
start_frame = 1
end_frame = 200
repeat_frames = 240

# Define the start and end positions
start_pos = (-90.0, 0.0, 0.0)
end_pos = (-30.0, 0.0, 0.0)

# Calculate the distance between start_pos and end_pos
distance = abs(math.sqrt((end_pos[0]-start_pos[0])**2 + (end_pos[1]-start_pos[1])**2 + (end_pos[2]-start_pos[2])**2))

# Set the speed multiplier
vvv_velocity = 2.0

# Calculate the velocity required to move the sphere at a constant speed
velocity = distance / (end_frame - start_frame) * vvv_velocity

# Move the sphere from start_pos to end_pos at a constant speed
for i in range(start_frame, end_frame + 1):
    bpy.context.scene.frame_set(i)
    bpy.context.object.location = tuple(s + (e-s)*((i-start_frame)*velocity/distance) for s,e in zip(start_pos, end_pos))
    bpy.context.object.keyframe_insert(data_path="location", index=-1)

# Stop the sphere from moving after reaching the end position
bpy.context.scene.frame_set(end_frame)
bpy.context.object.keyframe_insert(data_path="location", index=-1)

# Add a camera and set its position
cam_data = bpy.data.cameras.new('Camera')
cam = bpy.data.objects.new('Camera', cam_data)
bpy.context.scene.collection.objects.link(cam)
cam.location = (0.0, -30.0, 0.0)

# Add a track constraint to the camera to follow the sphere
track_constraint = cam.constraints.new(type='TRACK_TO')
track_constraint.target = bpy.context.object
track_constraint.track_axis

# Set the current frame to the end_frame
current_frame = end_frame

# Keep the sphere at the end position and repeat the animation
while True:
    current_frame += 1
    
    # Insert a keyframe at the current frame for the sphere's location
    bpy.context.scene.frame_set(current_frame)
    bpy.context.object.location = end_pos
    bpy.context.object.keyframe_insert(data_path="location", index=-1)
    
    # Stop the loop if current_frame reaches repeat_frames
    if current_frame == repeat_frames:
        break
























import bpy
import math

# Create a sphere object
bpy.ops.mesh.primitive_uv_sphere_add(radius=2.0, location=(-90.0, 0.0, 0.0))

# Set start and end frames
start_frame = 1
end_frame = 200
repeat_frame = 240

# Define the start, middle, and end positions
start_pos = (-90.0, 0.0, 0.0)
end_pos = (-30.0, 0.0, 0.0)

# Calculate the distance between start_pos and end_pos
distance = abs(math.sqrt((end_pos[0]-start_pos[0])**2 + (end_pos[1]-start_pos[1])**2 + (end_pos[2]-start_pos[2])**2))

# Set the speed multiplier
vvv_velocity = 2.0

# Calculate the velocity required to move the sphere at a constant speed
velocity = distance / (end_frame - start_frame) * vvv_velocity

# Move the sphere from start_pos to end_pos at a constant speed
for i in range(start_frame, end_frame + 1):
    bpy.context.scene.frame_set(i)
    bpy.context.object.location = tuple(s + (e-s)*((i-start_frame)*velocity/distance) for s,e in zip(start_pos, end_pos))
    bpy.context.object.keyframe_insert(data_path="location", index=-1)

# Stop the sphere from moving after reaching the end position
bpy.context.scene.frame_set(end_frame)
bpy.context.object.keyframe_insert(data_path="location", index=-1)

# Repeat the animation after 5 seconds
for i in range(end_frame+1, repeat_frame+1):
    bpy.context.scene.frame_set(i)
    bpy.context.object.location = end_pos
    bpy.context.object.keyframe_insert(data_path="location", index=-1)





# Add a camera and set its position
cam_data = bpy.data.cameras.new('Camera')
cam = bpy.data.objects.new('Camera', cam_data)
bpy.context.scene.collection.objects.link(cam)
cam.location = (0.0, -30.0, 0.0)

# Add a track constraint to the camera to follow the sphere
track_constraint = cam.constraints.new(type='TRACK_TO')
track_constraint.target = bpy.context.object
track_constraint.track_axis








一定速度 改良型

import bpy
import math

# Create a sphere object
bpy.ops.mesh.primitive_uv_sphere_add(radius=1.0, location=(-60.0, 0.0, 0.0))

# Set start and end frames
start_frame = 1
end_frame = 200
repeat_frame = 240

# Define the start, middle, and end positions
start_pos = (-60.0, 0.0, 0.0)
end_pos = (-30.0, 0.0, 0.0)

# Calculate the distance between start_pos and end_pos
distance = abs(math.sqrt((end_pos[0]-start_pos[0])**2 + (end_pos[1]-start_pos[1])**2 + (end_pos[2]-start_pos[2])**2))

# Calculate the velocity required to move the sphere at a constant speed
velocity = distance / (end_frame - start_frame)

# Move the sphere from start_pos to end_pos at a constant speed
for i in range(start_frame, end_frame + 1):
    bpy.context.scene.frame_set(i)
    bpy.context.object.location = tuple(s + (e-s)*((i-start_frame)*velocity/distance) for s,e in zip(start_pos, end_pos))
    bpy.context.object.keyframe_insert(data_path="location", index=-1)

# Stop the sphere from moving after reaching the end position
bpy.context.scene.frame_set(end_frame)
bpy.context.object.keyframe_insert(data_path="location", index=-1)

# Repeat the animation after 5 seconds
for i in range(end_frame+1, repeat_frame+1):
    bpy.context.scene.frame_set(i)
    bpy.context.object.location = end_pos
    bpy.context.object.keyframe_insert(data_path="location", index=-1)








import bpy
import math

# Create a sphere object
bpy.ops.mesh.primitive_uv_sphere_add(radius=1.0, location=(-60.0, 0.0, 0.0))

# Set start and end frames
start_frame = 1
end_frame = 200
repeat_frame = 240

# Define the start and end positions
start_pos = (-60.0, 0.0, 0.0)
end_pos = (-30.0, 0.0, 0.0)

# Set the speed multiplier
vvv_velocity = 2.0

# Calculate the distance between start_pos and end_pos
distance = abs(math.sqrt((start_pos[0]-end_pos[0])**2 + (start_pos[1]-end_pos[1])**2 + (start_pos[2]-end_pos[2])**2))

# Calculate the time it takes to move from start_pos to end_pos
total_time = int((distance / vvv_velocity) * 10)

# Move the sphere from start_pos to end_pos
for i in range(start_frame, end_frame + 1):
    frame_factor = ((i-start_frame)/total_time)**0.5
    bpy.context.scene.frame_set(i)
    bpy.context.object.location = tuple(s*(1-frame_factor) + e*frame_factor for s,e in zip(start_pos, end_pos))
    bpy.context.object.keyframe_insert(data_path="location", index=-1)

# Repeat the animation after 4 seconds
for i in range(end_frame+1, repeat_frame+1):
    bpy.context.scene.frame_set(i)
    bpy.context.object.location = end_pos
    bpy.context.object.keyframe_insert(data_path="location", index=-1)




# Add a camera and set its position
cam_data = bpy.data.cameras.new('Camera')
cam = bpy.data.objects.new('Camera', cam_data)
bpy.context.scene.collection.objects.link(cam)
cam.location = (0.0, -30.0, 0.0)

# Add a track constraint to the camera to follow the sphere
track_constraint = cam.constraints.new(type='TRACK_TO')
track_constraint.target = bpy.context.object
track_constraint.track_axis

































bbb

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

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