2023年8月20日日曜日

20230821 幻想の等間隔








blender python



半径1の円周

中心000


半径2の円周

中心000を作る


名付ける

"時間円周 r=1"

半径の長さを使う


円周を トーラスにする

メジャー半径 0.01







トーラス1の円周

(-1,0,0) から(0,1,0)を通過して(1,0,0)を

球体半径 0.03を均等間隔で21個配置する

球体は "torus1 連番”で名付ける




import bpy

import math


# トーラスのパラメータ設定

major_radius = 1.0

minor_radius = 0.01

num_major_segments = 64

num_minor_segments = 64


# トーラスの頂点座標を計算

vertices_torus = []

for i in range(num_major_segments):

    theta_major = 2.0 * math.pi * i / num_major_segments

    for j in range(num_minor_segments):

        theta_minor = 2.0 * math.pi * j / num_minor_segments

        x = (major_radius + minor_radius * math.cos(theta_minor)) * math.cos(theta_major)

        y = (major_radius + minor_radius * math.cos(theta_minor)) * math.sin(theta_major)

        z = minor_radius * math.sin(theta_minor)

        vertices_torus.append((x, y, z))


# トーラスのメッシュを作成

mesh_torus = bpy.data.meshes.new(name="Torus1")

mesh_torus.from_pydata(vertices_torus, [], [])

obj_torus = bpy.data.objects.new("Torus1", mesh_torus)

bpy.context.collection.objects.link(obj_torus)


# 球体を配置する

num_spheres = 21

for i in range(num_spheres):

    u = i / (num_spheres - 1)

    theta = u * math.pi

    x = major_radius * math.cos(theta)

    y = major_radius * math.sin(theta)

    

    bpy.ops.mesh.primitive_uv_sphere_add(radius=0.03, location=(x, y, 0))

    sphere = bpy.context.active_object

    sphere.name = f"torus1_{i+1:02}"  # 連番を含む名前を設定






トーラス2の円周 (-2,0,0) から(0,2,0)を通過して(2,0,0)を 球体半径 0.03を均等間隔で21個配置する 球体は "torus2 連番”で名付ける



import bpy

import math


# トーラスのパラメータ設定

major_radius = 2.0

minor_radius = 0.01

num_major_segments = 64

num_minor_segments = 64


# トーラスの頂点座標を計算

vertices_torus = []

for i in range(num_major_segments):

    theta_major = 2.0 * math.pi * i / num_major_segments

    for j in range(num_minor_segments):

        theta_minor = 2.0 * math.pi * j / num_minor_segments

        x = (major_radius + minor_radius * math.cos(theta_minor)) * math.cos(theta_major)

        y = (major_radius + minor_radius * math.cos(theta_minor)) * math.sin(theta_major)

        z = minor_radius * math.sin(theta_minor)

        vertices_torus.append((x, y, z))


# トーラスのメッシュを作成

mesh_torus = bpy.data.meshes.new(name="Torus2")

mesh_torus.from_pydata(vertices_torus, [], [])

obj_torus = bpy.data.objects.new("Torus2", mesh_torus)

bpy.context.collection.objects.link(obj_torus)


# 球体を配置する

num_spheres = 21

for i in range(num_spheres):

    u = i / (num_spheres - 1)

    theta = u * math.pi

    x = major_radius * math.cos(theta)

    y = major_radius * math.sin(theta)

    

    bpy.ops.mesh.primitive_uv_sphere_add(radius=0.03, location=(x, y, 0))

    sphere = bpy.context.active_object

    sphere.name = f"torus2_{i+1:02}"  # 連番を含む名前を設定








円錐を作る
円錐頂点 000
円錐底面 中心 0,0,-1

円錐の向きを逆にする
円錐の高さ中心 Z=ー0.5







import bpy

# 円錐を作成
bpy.ops.mesh.primitive_cone_add(vertices=32, radius1=0, radius2=1, depth=1, location=(0, 0, -0.5))

# 作成したオブジェクトを取得
cone = bpy.context.active_object

# 円錐を逆さにする(高さ方向のスケールを-1に設定)
cone.scale.z = -1.0

# 名前を設定
cone.name = "円錐 r=1"










import bpy


# 円錐を作成

bpy.ops.mesh.primitive_cone_add(vertices=32, radius1=0, radius2=2, depth=2, location=(0, 0, -1))


# 作成したオブジェクトを取得

cone = bpy.context.active_object


# 円錐を逆さにする(高さ方向のスケールを-1に設定)

cone.scale.z = -1.0


# 名前を設定

cone.name = "円錐 r=2"












21個の球体を作る
球体半径 0.02
均等間隔に配置する

(-2,0,-2)から (2,0,-2)
名前は "t=-2 rail 連番”




import bpy

# 配置する球体の数と半径を設定
num_spheres = 21
radius = 0.02

# 配置範囲の設定
start_x = -2
end_x = 2
z_position = -2

# 球体を配置する間隔を計算
interval = (end_x - start_x) / (num_spheres - 1)

# 球体を配置する
for i in range(num_spheres):
    x = start_x + i * interval
    bpy.ops.mesh.primitive_uv_sphere_add(radius=radius, location=(x, 0, z_position))
    sphere = bpy.context.active_object
    sphere.name = f"t=-2 rail {i+1:02}"  # 連番を含む名前を設定





21個の球体を作る
球体半径 0.02
均等間隔に配置する

(-2,0,-1)から (2,0,-1)
名前は "t=-1 rail 連番”


import bpy


# 配置する球体の数と半径を設定

num_spheres = 21

radius = 0.02


# 配置範囲の設定

start_x = -2

end_x = 2

z_position = -1


# 球体を配置する間隔を計算

interval = (end_x - start_x) / (num_spheres - 1)


# 球体を配置する

for i in range(num_spheres):

    x = start_x + i * interval

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

    sphere = bpy.context.active_object

    sphere.name = f"t=-1 rail {i+1:02}"  # 連番を含む名前を設定





21個の球体を作る
球体半径 0.02
均等間隔に配置する

(-2,0,0)から (2,0,0)
名前は "t=0 rail 連番”




 

 

#  コレクションを作る 重複の場合 作らない

 

import bpy

 

# List of collection names

collection_names = [ 

"21_ r=1",

"21_ r=2",

"均等 Torus",

"線分線路 rail",

"rail t=-2",

"rail t=-1",

"rail t=0",

"途中 制作途中",

"円錐"

 

]

 

# Function to create a new collection if it doesn't exist

def create_collection_if_not_exists(name):

    if name not in bpy.data.collections:

        collection = bpy.data.collections.new(name)

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

 

# Create collections

for name in collection_names:

    create_collection_if_not_exists(name)

 

 

 

 





基本系 配布 001 単位円 torus と xyz軸 円柱

https://drive.google.com/file/d/1adh0pC0n5MUfaPnsQcab8CnTvHu_JqLg/view?usp=drive_link

 

基本系 配布 002 単位2長さ balls

https://drive.google.com/file/d/1vyg5oFWmw_TK8nwp5TmVSfLH94I6rTaY/view?usp=drive_link

 

基本系 配布 003 単位2長さ balls 光時計セット 

https://drive.google.com/file/d/1u2Rn_nVBcewe39Vokua9C5n25cdivyyL/view?usp=drive_link

 

blender 基本系 配布 カタログ 2023 - zionad_mainのブログ https://mokuji000zionad.hatenablog.com/entry/2023/07/31/095208 






以下 ChatGPT との対話 修正記録 と メモ・ノート


ああああああああああああああああああああああああああああああああああああああああああああ