2023年4月17日月曜日

20230418 tue 半径 √3のトーラス円周 3つの さっきと いまと ちょっと未来

 



円柱 長さ2を


赤 ミドリ 青で

正三角形の位置だから 半径 √3のトーラス円周 用意




https://chatgpt111blender2023.blogspot.com/2023/04/blog-post_50.html



import bpy

# コレクションを作成

collection_name = "土台"

if collection_name not in bpy.data.collections:

    zionad_collection = bpy.data.collections.new(collection_name)

    bpy.context.scene.collection.children.link(zionad_collection)

else:

    zionad_collection = bpy.data.collections[collection_name]


# 半径 √3の トーラス


import bpy
from math import radians

# トーラスを作成する
bpy.ops.mesh.primitive_torus_add(major_radius=3**(0.5), minor_radius=0.05)

# 回転させる軸を選択する
zion_xyz = 'zana'

if zion_xyz == 'xana':
    # 軸を中心に90度回転させる
    bpy.context.object.rotation_euler[0] = radians(0)
    bpy.context.object.rotation_euler[1] = radians(90)
    bpy.context.object.rotation_euler[2] = radians(0)
    # X軸方向に伸ばす
    bpy.context.object.scale[0] = 1
    bpy.context.object.scale[1] = 1
    bpy.context.object.scale[2] = 1
    
elif zion_xyz == 'yana':
    # 軸を中心に90度回転させる
    bpy.context.object.rotation_euler[0] = radians(90)
    bpy.context.object.rotation_euler[1] = radians(0)
    bpy.context.object.rotation_euler[2] = radians(0)
    # Y軸方向に伸ばす
    bpy.context.object.scale[0] = 3
    bpy.context.object.scale[1] = 3
    bpy.context.object.scale[2] = 3
    
elif zion_xyz == 'zana':
    # Z軸を中心に90度回転させる
    bpy.context.object.rotation_euler[0] = radians(0)
    bpy.context.object.rotation_euler[1] = radians(0)
    bpy.context.object.rotation_euler[2] = radians(0)
    # Z軸方向に伸ばす
    bpy.context.object.scale[0] = 1
    bpy.context.object.scale[1] = 1
    bpy.context.object.scale[2] = 1
    
else:
    print('Invalid rotation axis selected.')

# トーラスを選択する
bpy.context.view_layer.objects.active = bpy.context.selected_objects[0]


# オブジェクト名

bpy.context.object.name = "torus root3 radius"








# 半径 2の トーラス


import bpy
from math import radians

# トーラスを作成する
bpy.ops.mesh.primitive_torus_add(major_radius= 2.0, minor_radius=0.05)

# 回転させる軸を選択する
zion_xyz = 'zana'

if zion_xyz == 'xana':
    # 軸を中心に90度回転させる
    bpy.context.object.rotation_euler[0] = radians(0)
    bpy.context.object.rotation_euler[1] = radians(90)
    bpy.context.object.rotation_euler[2] = radians(0)
    # X軸方向に伸ばす
    bpy.context.object.scale[0] = 1
    bpy.context.object.scale[1] = 1
    bpy.context.object.scale[2] = 1
    
elif zion_xyz == 'yana':
    # 軸を中心に90度回転させる
    bpy.context.object.rotation_euler[0] = radians(90)
    bpy.context.object.rotation_euler[1] = radians(0)
    bpy.context.object.rotation_euler[2] = radians(0)
    # Y軸方向に伸ばす
    bpy.context.object.scale[0] = 3
    bpy.context.object.scale[1] = 3
    bpy.context.object.scale[2] = 3
    
elif zion_xyz == 'zana':
    # Z軸を中心に90度回転させる
    bpy.context.object.rotation_euler[0] = radians(0)
    bpy.context.object.rotation_euler[1] = radians(0)
    bpy.context.object.rotation_euler[2] = radians(0)
    # Z軸方向に伸ばす
    bpy.context.object.scale[0] = 1
    bpy.context.object.scale[1] = 1
    bpy.context.object.scale[2] = 1
    
else:
    print('Invalid rotation axis selected.')

# トーラスを選択する
bpy.context.view_layer.objects.active = bpy.context.selected_objects[0]



#トーラスの位置を変更する
bpy.context.object.location = (0, -3**(0.5), 0)

# オブジェクト名

bpy.context.object.name = "torus 2 radius"








# 電車列車



import bpy

# コレクションを作成

collection_name = "電車列車"

if collection_name not in bpy.data.collections:

    zionad_collection = bpy.data.collections.new(collection_name)

    bpy.context.scene.collection.children.link(zionad_collection)

else:

    zionad_collection = bpy.data.collections[collection_name]







#展望車の先頭 カメラ追跡

import bpy
import math
import mathutils

# 円柱を作成
bpy.ops.mesh.primitive_cylinder_add(radius=0.2, depth=0.1)


# 作成した円柱を選択
cylinder = bpy.context.active_object

# 円柱を移動
start_location = mathutils.Vector((-1, 0, 0))
cylinder.location = start_location

# y軸に90度回転
cylinder.rotation_euler[1] = 1.5708

# オブジェクト名を変更
cylinder.name = "展望車の先頭"

# アニメーション設定
scene = bpy.context.scene
fps = scene.render.fps

# キーフレームの設定
frame_start = 0
frame_end = 600
cylinder.keyframe_insert(data_path="location", frame=frame_start)
cylinder.keyframe_insert(data_path="location", frame=frame_end)

# 速度調整
speed = 0.3  # 1秒あたりの移動距離
frame_count = frame_end - frame_start + 1
for i, fc in enumerate(range(frame_start, frame_end + 1)):
    # 現在のフレーム数から、開始位置を引いた値を1秒あたりの移動距離で乗じる
    location = start_location + mathutils.Vector((i / fps * speed, 0, 0))
    cylinder.location = location
    cylinder.keyframe_insert(data_path="location", frame=fc)

# カメラ設定
zion_camera_name = "展望車 先頭Camera"
bpy.ops.object.camera_add(location=(0, -math.sqrt(3), 0))
zion_camera = bpy.context.active_object
zion_camera.name = zion_camera_name
zion_camera.constraints.new('TRACK_TO')
zion_camera.constraints['Track To'].target = cylinder
zion_camera.constraints['Track To'].track_axis = 'TRACK_NEGATIVE_Z'
zion_camera.constraints['Track To'].up_axis = 'UP_Y'

# 展望車をカメラに追従
for cam in [zion_camera]:
    follow = cam.constraints.new('FOLLOW_PATH')
    follow.target = cylinder
    follow.use_fixed_location = True
    follow.use_curve_follow = True
    follow.forward_axis = 'TRACK_NEGATIVE_Z'
    follow.up_axis = 'UP_Y'



#展望車

import bpy
import math
import mathutils

# 円柱を作成
bpy.ops.mesh.primitive_cylinder_add(radius=0.2, depth=2.0)


# 作成した円柱を選択
cylinder = bpy.context.active_object

# 円柱を移動
start_location = mathutils.Vector((-2, 0, 0))
cylinder.location = start_location

# y軸に90度回転
cylinder.rotation_euler[1] = 1.5708

# オブジェクト名を変更
cylinder.name = "展望車"

# アニメーション設定
scene = bpy.context.scene
fps = scene.render.fps

# キーフレームの設定
frame_start = 0
frame_end = 600
cylinder.keyframe_insert(data_path="location", frame=frame_start)
cylinder.keyframe_insert(data_path="location", frame=frame_end)

# 速度調整
speed = 0.3  # 1秒あたりの移動距離
frame_count = frame_end - frame_start + 1
for i, fc in enumerate(range(frame_start, frame_end + 1)):
    # 現在のフレーム数から、開始位置を引いた値を1秒あたりの移動距離で乗じる
    location = start_location + mathutils.Vector((i / fps * speed, 0, 0))
    cylinder.location = location
    cylinder.keyframe_insert(data_path="location", frame=fc)





#先頭車の先頭 カメラ追跡

import bpy
import math
import mathutils

# 円柱を作成
bpy.ops.mesh.primitive_cylinder_add(radius=0.2, depth=0.1)


# 作成した円柱を選択
cylinder = bpy.context.active_object

# 円柱を移動
start_location = mathutils.Vector((1, 0, 0))
cylinder.location = start_location

# y軸に90度回転
cylinder.rotation_euler[1] = 1.5708

# オブジェクト名を変更
cylinder.name = "先頭車の尻尾"

# アニメーション設定
scene = bpy.context.scene
fps = scene.render.fps

# キーフレームの設定
frame_start = 0
frame_end = 600
cylinder.keyframe_insert(data_path="location", frame=frame_start)
cylinder.keyframe_insert(data_path="location", frame=frame_end)

# 速度調整
speed = 0.3  # 1秒あたりの移動距離
frame_count = frame_end - frame_start + 1
for i, fc in enumerate(range(frame_start, frame_end + 1)):
    # 現在のフレーム数から、開始位置を引いた値を1秒あたりの移動距離で乗じる
    location = start_location + mathutils.Vector((i / fps * speed, 0, 0))
    cylinder.location = location
    cylinder.keyframe_insert(data_path="location", frame=fc)

# カメラ設定
zion_camera_name = "先頭車 尻尾 Camera"
bpy.ops.object.camera_add(location=(0, -math.sqrt(3), 0))
zion_camera = bpy.context.active_object
zion_camera.name = zion_camera_name
zion_camera.constraints.new('TRACK_TO')
zion_camera.constraints['Track To'].target = cylinder
zion_camera.constraints['Track To'].track_axis = 'TRACK_NEGATIVE_Z'
zion_camera.constraints['Track To'].up_axis = 'UP_Y'

# 展望車をカメラに追従
for cam in [zion_camera]:
    follow = cam.constraints.new('FOLLOW_PATH')
    follow.target = cylinder
    follow.use_fixed_location = True
    follow.use_curve_follow = True
    follow.forward_axis = 'TRACK_NEGATIVE_Z'
    follow.up_axis = 'UP_Y'



#先頭車

import bpy
import math
import mathutils

# 円柱を作成
bpy.ops.mesh.primitive_cylinder_add(radius=0.2, depth=2.0)


# 作成した円柱を選択
cylinder = bpy.context.active_object

# 円柱を移動
start_location = mathutils.Vector((2, 0, 0))
cylinder.location = start_location

# y軸に90度回転
cylinder.rotation_euler[1] = 1.5708

# オブジェクト名を変更
cylinder.name = "先頭車"

# アニメーション設定
scene = bpy.context.scene
fps = scene.render.fps

# キーフレームの設定
frame_start = 0
frame_end = 600
cylinder.keyframe_insert(data_path="location", frame=frame_start)
cylinder.keyframe_insert(data_path="location", frame=frame_end)

# 速度調整
speed = 0.3  # 1秒あたりの移動距離
frame_count = frame_end - frame_start + 1
for i, fc in enumerate(range(frame_start, frame_end + 1)):
    # 現在のフレーム数から、開始位置を引いた値を1秒あたりの移動距離で乗じる
    location = start_location + mathutils.Vector((i / fps * speed, 0, 0))
    cylinder.location = location
    cylinder.keyframe_insert(data_path="location", frame=fc)






#客車

import bpy
import math
import mathutils

# 円柱を作成
bpy.ops.mesh.primitive_cylinder_add(radius=0.2, depth=2.0)


# 作成した円柱を選択
cylinder = bpy.context.active_object

# 円柱を移動
start_location = mathutils.Vector((0, 0, 0))
cylinder.location = start_location

# y軸に90度回転
cylinder.rotation_euler[1] = 1.5708

# オブジェクト名を変更
cylinder.name = "客車"

# アニメーション設定
scene = bpy.context.scene
fps = scene.render.fps

# キーフレームの設定
frame_start = 0
frame_end = 600
cylinder.keyframe_insert(data_path="location", frame=frame_start)
cylinder.keyframe_insert(data_path="location", frame=frame_end)

# 速度調整
speed = 0.3  # 1秒あたりの移動距離
frame_count = frame_end - frame_start + 1
for i, fc in enumerate(range(frame_start, frame_end + 1)):
    # 現在のフレーム数から、開始位置を引いた値を1秒あたりの移動距離で乗じる
    location = start_location + mathutils.Vector((i / fps * speed, 0, 0))
    cylinder.location = location
    cylinder.keyframe_insert(data_path="location", frame=fc)