2023年8月6日日曜日

20230807 円周に 正方形 8枚 貼る















 

 

 

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

 

import bpy

 

# List of collection names

collection_names = [ 

"8つの正面",

 "円板",

"abcdefg",

"abcdefg",

"abcdefg",

"abcdefg"

 

]

 

# 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)

 

 

 

 

 

 







blender python


半径1の円を作る
中心 000
xy平面に 存在する


正方形 辺長さ 2を
8個 作る

正方形の中心位置は
半径1の円周に 等間隔
この正方形は xy平面に平行ではなく
xy平面に 直角 で存在する


BlenderのPythonを使用して、半径1の円を中心(0, 0, 0)に作成し、その円周上に等間隔でXY平面に直角に存在する辺長さ2の正方形を8つ作成する方法を示します


import bpy import math # 半径1の円を作成 radius = 1.0 bpy.ops.mesh.primitive_circle_add(vertices=32, radius=radius, location=(0, 0, 0)) circle = bpy.context.active_object # 8つの正方形を作成 num_squares = 8 angle_step = 360.0 / num_squares for i in range(num_squares): angle_rad = math.radians(i * angle_step) x = math.cos(angle_rad) y = math.sin(angle_rad) # 正方形の中心位置を計算 center = (x * radius, y * radius, 0) # 正方形の辺長さ edge_length = 2.0 # 正方形を作成 bpy.ops.mesh.primitive_plane_add(size=edge_length, location=center) square = bpy.context.active_object # 正方形をXY平面に直角に回転 square.rotation_euler[0] = math.radians(90) # X軸周りの回転 square.rotation_euler[2] = angle_rad # Z軸周りの回転 # 円オブジェクトを選択解除 circle.select_set(False)












正方形が円の接線を含む平面上に存在する






import bpy
import math

# 半径1の円を作成
radius = 1.0
bpy.ops.mesh.primitive_circle_add(vertices=32, radius=radius, location=(0, 0, 0))
circle = bpy.context.active_object

# 8つの正方形を作成
num_squares = 8
angle_step = 360.0 / num_squares

for i in range(num_squares):
    angle_rad = math.radians(i * angle_step)
    x = math.cos(angle_rad)
    y = math.sin(angle_rad)

    # 正方形の中心位置を計算(円周上の接触点)
    center = (x * radius, y * radius, 0)

    # 正方形の辺長さの半分
    half_edge_length = 1.0

    # 正方形を作成
    bpy.ops.mesh.primitive_plane_add(size=2 * half_edge_length, location=center)
    square = bpy.context.active_object

    # 正方形を円に向けて回転させる
    square.rotation_euler[0] = math.radians(90)  # X軸周りの回転
    square.rotation_euler[2] = angle_rad + math.radians(45)  # Z軸周りの回転

# 円オブジェクトを選択解除
circle.select_set(False)





import bpy

# 8角柱を作成
radius = 1.0
depth = 0.1
bpy.ops.mesh.primitive_cylinder_add(vertices=8, radius=radius, depth=depth, location=(0, 0, 0))
cylinder = bpy.context.active_object



8角柱を 半径1の円に外接させて


半径1の円に外接するような8角柱を作成するBlenderのPythonスクリプトを以下に示します。

python
import bpy import math # 半径1の円を作成 radius = 1.0 bpy.ops.mesh.primitive_circle_add(vertices=8, radius=radius, location=(0, 0, 0)) circle = bpy.context.active_object # 8角柱を作成 depth = radius * math.sqrt(2) # 8角柱の高さ(外接するための計算) bpy.ops.mesh.primitive_cylinder_add(vertices=8, radius=radius, depth=depth, location=(0, 0, depth/2)) cylinder = bpy.context.active_object # 円オブジェクトを選択解除 circle.select_set(False)

このスクリプトでは、depth変数に外接するための8角柱の高さを計算しています。8角形(八角形)の外接円の直径は正方形の対角線の長さに等しいため、8角柱の高さは半径1の円の直径(2 * radius)に等しくなります。ただし、円の中心と8角柱の中心が重なるため、8角柱の高さを計算する際に高さの半分(depth/2)を指定しています。











import bpy
import math

# 半径1の円を作成
radius = 1.0
bpy.ops.mesh.primitive_circle_add(vertices=8, radius=radius, location=(0, 0, 0))
circle = bpy.context.active_object

# 8角柱を作成
depth = radius * math.sqrt(2)  # 8角柱の高さ(外接するための計算)
bpy.ops.mesh.primitive_cylinder_add(vertices=8, radius=radius, depth=depth, location=(0, 0, depth/2))
cylinder = bpy.context.active_object

# 円オブジェクトを選択解除
circle.select_set(False)





2枚の正方形の法線が常に2離れるように配置


。円周と接点を持つ接線を含む平面の部分平面が正方形となるような8つの正方形を配置するBlenderのPythonスクリプトを以下に示します。











import bpy
import math

# 半径1の円を作成
radius = 1.0
bpy.ops.mesh.primitive_circle_add(vertices=8, radius=radius, location=(0, 0, 0))
circle = bpy.context.active_object

# 8つの正方形を作成して円周上に配置
num_squares = 8
angle_step = 360.0 / num_squares

for i in range(num_squares):
    angle_rad = math.radians(i * angle_step)
    x = math.cos(angle_rad)
    y = math.sin(angle_rad)

    # 正方形の中心位置を計算(円周上の接触点)
    center = (x * radius, y * radius, 0)
    
    # 正方形を作成して円に向けて配置
    bpy.ops.mesh.primitive_plane_add(size=2, location=center)
    square = bpy.context.active_object

    # 正方形をXY平面に垂直に回転
    square.rotation_euler[1] = math.radians(90)  # Y軸周りの回転
    square.rotation_euler[2] = angle_rad  # Z軸周りの回転

    # 正方形の中心から円周上の正方形の中心まで移動
    square.location.x += x * radius
    square.location.y += y * radius

    # 円オブジェクトを選択解除
    circle.select_set(False)

# 全てのオブジェクトを選択解除
bpy.ops.object.select_all(action='DESELECT')













import bpy
import math

# 画像ファイルのパスを指定してください
image_path = "C:/atest/20230806 赤城神社 tree 切り取り 2.png"

# 半径1の円を作成
radius = 1.0
bpy.ops.mesh.primitive_circle_add(vertices=8, radius=radius, location=(0, 0, 0))
circle = bpy.context.active_object

# 8つの正方形を作成して円周上に配置
num_squares = 8
angle_step = 360.0 / num_squares

for i in range(num_squares):
    angle_rad = math.radians(i * angle_step)
    x = math.cos(angle_rad)
    y = math.sin(angle_rad)

    # 正方形の中心位置を計算(円周上の接触点)
    center = (x * radius, y * radius, 0)
    
    # 正方形を作成して円に向けて配置
    bpy.ops.mesh.primitive_plane_add(size=2, location=center)
    square = bpy.context.active_object

    # 正方形をXY平面に垂直に回転
    square.rotation_euler[1] = math.radians(90)  # Y軸周りの回転
    square.rotation_euler[2] = angle_rad  # Z軸周りの回転

    # 正方形の中心から円周上の正方形の中心まで移動
    square.location.x += x * radius
    square.location.y += y * radius

    # イメージテクスチャを読み込み
    img = bpy.data.images.load(image_path)

    # テクスチャを設定
    mat = bpy.data.materials.new(name="ImageMaterial")
    square.data.materials.append(mat)
    square.active_material.use_nodes = True
    bsdf = square.active_material.node_tree.nodes["Principled BSDF"]
    tex_image = square.active_material.node_tree.nodes.new("ShaderNodeTexImage")
    square.active_material.node_tree.links.new(bsdf.inputs['Base Color'], tex_image.outputs['Color'])
    tex_image.image = img

    # 円オブジェクトを選択解除
    circle.select_set(False)

# 全てのオブジェクトを選択解除
bpy.ops.object.select_all(action='DESELECT')











ノードで -90度回転





画像を90度回転させて8枚の正方形に貼り付けるBlenderのPythonスクリプトを以下に示します。










 

基本系 配布 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 との対話 修正記録 と メモ・ノート


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