2023年6月21日水曜日

20230622 光円錐

 




blendeer python でスクリプト書き出す








000を中心に 半径1のトーラス マイナー半径 0.02 を z=-1に描く

0、0、0.1を中心に 半径1-0.01のトーラス マイナー半径 0.02 を z=ー0.9に描く

0、0、0.2を中心に 半径1-0.02のトーラス マイナー半径 0.02 を z=ー0.8に描く


これを繰り返し z=0 まで トーラスを複数描く


import bpy

import math


center_x = 0.0

center_y = 0.0

minor_radius = 0.02

z = -1.0

z_increment = 0.1

num_toruses = 11


for i in range(num_toruses):

    major_radius = 1.0 - (i * 0.1)

    bpy.ops.mesh.primitive_torus_add(

        align='WORLD',

        location=(center_x, center_y, z),

        rotation=(0, 0, 0),

        major_radius=major_radius,

        minor_radius=minor_radius,

        major_segments=48,

        minor_segments=12

    )


    torus_obj = bpy.context.object

    bpy.context.view_layer.objects.active = torus_obj

    bpy.ops.object.origin_set(type='ORIGIN_CENTER_OF_MASS', center='BOUNDS')


    z += z_increment






今度は 

z=0から Z=1に トーラスを11個描く

半径が 0から 0.1ずつ大きくする


この11個のトーラスに future torus 0.0 から 1.0の連番で名前を付ける



import bpy

import math


center_x = 0.0

center_y = 0.0

minor_radius = 0.02

z = 0.0

z_increment = 1.0 / 10.0  # Zの増分を計算

num_toruses = 11


for i in range(num_toruses):

    major_radius = i * 0.1  # 半径を0から0.1ずつ増加させる

    bpy.ops.mesh.primitive_torus_add(

        align='WORLD',

        location=(center_x, center_y, z),

        rotation=(0, 0, 0),

        major_radius=major_radius,

        minor_radius=minor_radius,

        major_segments=48,

        minor_segments=12

    )


    torus_obj = bpy.context.object

    bpy.context.view_layer.objects.active = torus_obj

    bpy.ops.object.origin_set(type='ORIGIN_CENTER_OF_MASS', center='BOUNDS')


    # トーラスに名前を付ける

    torus_obj.name = "FutureTorus" + str(round(major_radius, 1))


    z += z_increment








今度は 

z=0から Z=-1に トーラスを11個描く

半径が 0から 0.1ずつ大きくする

この11個のトーラスに past torus -0.0 から -1.0 の連番で名前を付ける




import bpy

import math


center_x = 0.0

center_y = 0.0

minor_radius = 0.02

z = 0.0

z_decrement = -1.0 / 10.0  # Zの減分を計算

num_toruses = 11


for i in range(num_toruses):

    major_radius = i * 0.1  # 半径を0から0.1ずつ増加させる

    bpy.ops.mesh.primitive_torus_add(

        align='WORLD',

        location=(center_x, center_y, z),

        rotation=(0, 0, 0),

        major_radius=major_radius,

        minor_radius=minor_radius,

        major_segments=48,

        minor_segments=12

    )


    torus_obj = bpy.context.object

    bpy.context.view_layer.objects.active = torus_obj

    bpy.ops.object.origin_set(type='ORIGIN_CENTER_OF_MASS', center='BOUNDS')


    # トーラスに名前を付ける

    torus_obj.name = "PastTorus" + str(round(-major_radius, 1))


    z += z_decrement




コレクション名を 作る


Future torus

Past torus

+5 Future torus

+5 Past torus

-5 Future torus

-5 Past torus


6つ作る



import bpy


collection_names = ["Future torus", "Past torus", "+5 Future torus", "+5 Past torus", "-5 Future torus", "-5 Past torus"]


for collection_name in collection_names:

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

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




 x軸に +5 移動させて 名前を +5 PastTorus で連番に


以下を x軸に +5  移動させて 連番名を +5 Future torus にして

以下を x軸に ー5  移動させて 連番名を -5 Future torus にして




コレクション名

球体群 A


import bpy


collection_name = "球体群 A"


# コレクションを作成

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


# シーンにコレクションを追加

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




-5、0、-1 から 

+5,0,1 を両端とする線分に


球体を 半径 0.03 で 

21個 等間隔で 配置する


import bpy


start_x = -5.0

end_x = 5.0

start_z = -1.0

end_z = 1.0

radius = 0.03

num_spheres = 21


# 線分上の等間隔のポイントを計算

points = [(start_x + (end_x - start_x) * i / (num_spheres - 1), 0, start_z + (end_z - start_z) * i / (num_spheres - 1)) for i in range(num_spheres)]


# 球体を作成し、配置

for i, point in enumerate(points):

    bpy.ops.mesh.primitive_uv_sphere_add(radius=radius, location=point)

    sphere_obj = bpy.context.object

    sphere_obj.name = "A_Sphere_" + str(i)





import bpy

collection_name = "球体群 B"


# コレクションを作成

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


# シーンにコレクションを追加

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











blender python 底面 半径1 高さ1の円錐を描け


import bpy


# Clear existing objects

bpy.ops.object.select_all(action='DESELECT')

bpy.ops.object.select_by_type(type='MESH')

bpy.ops.object.delete()


# Create cone mesh

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


# Set cone as the active object

cone = bpy.context.object

cone.name = "Cone"


# Center the cone's origin

bpy.ops.object.origin_set(type='ORIGIN_CENTER_OF_MASS', center='BOUNDS')


# Apply scale and rotation to the cone

bpy.ops.object.transform_apply(scale=True, rotation=True)


# Select and show the cone

cone.select_set(True)

bpy.context.view_layer.objects.active = cone

bpy.ops.object.shade_smooth()




いま 描画したものを 

z軸に -0.5ずらせ




このオブジェクトに
cone past と名付ける


import bpy


# Clear existing objects

bpy.ops.object.select_all(action='DESELECT')

bpy.ops.object.select_by_type(type='MESH')

bpy.ops.object.delete()


# Create cone mesh

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


# Set cone as the active object

cone = bpy.context.object

cone.name = "cone_past"


# Center the cone's origin

bpy.ops.object.origin_set(type='ORIGIN_CENTER_OF_MASS', center='BOUNDS')


# Apply scale and rotation to the cone

bpy.ops.object.transform_apply(scale=True, rotation=True)


# Shift the cone along the z-axis

cone.location.z -= 0.5


# Select and show the cone

cone.select_set(True)

bpy.context.view_layer.objects.active = cone

bpy.ops.object.shade_smooth()













修正後のコードでは、まず円錐の底面をZ=1に描き、その後円錐の頂点を(0, 0, 0)に描くようになっています。


円錐の頂点の半径0 円錐中心の半径0.5 で z=0.5 円錐底面 半径1で z=0に描く










import bpy




# Clear existing objects


bpy.ops.object.select_all(action='DESELECT')


bpy.ops.object.select_by_type(type='MESH')


bpy.ops.object.delete()




# Create cone mesh


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




# Set cone as the active object


cone = bpy.context.object


cone.name = "cone_past"




# Center the cone's origin


bpy.ops.object.origin_set(type='ORIGIN_CENTER_OF_MASS', center='BOUNDS')




# Apply scale and rotation to the cone


bpy.ops.object.transform_apply(scale=True, rotation=True)




# Shift the cone along the z-axis


cone.location.z -= 0.5




# Select and show the cone


cone.select_set(True)


bpy.context.view_layer.objects.active = cone


bpy.ops.object.shade_smooth()









追加で 

いまの円錐の

z=0平面に 面対称で

円錐を作り

cone future と名付ける

cone future だけ z軸に +1 ズラス







円錐を作る

円錐頂点の位置 0,0,0

円錐底面 中心の位置 0.0.ー1

 

「円錐底面の円」 その中心が 0.0.ー1

つまり z=-1に 半径1の円


円錐頂点の位置 0,0,0 ここ




「円錐の 中心」と

「円錐の底面の中心」を 区別すること


「円錐の 中心」 0,0,ー0.5

「円錐頂点」 0,0,0

「円錐の底面の中心」 0,0.ー1

「円錐の底面」は 半径1の円


Apologies for the confusion. Here's the modified script to create a cone with the following specifications:


Cone center: (0, 0, -0.5)

Cone vertex: (0, 0, 0)

Base center: (0, 0, -1)

Base radius: 1



import bpy


# Clear existing objects

bpy.ops.object.select_all(action='DESELECT')

bpy.ops.object.select_by_type(type='MESH')

bpy.ops.object.delete()


# Define cone parameters

base_radius = 1

cone_height = 0


# Create cone mesh

bpy.ops.mesh.primitive_cone_add(vertices=32, radius1=0, radius2=base_radius, depth=cone_height, location=(0, 0, 0))

cone_obj = bpy.context.object


# Move the cone's base plane to z = +1

cone_obj.location += (0, 0, 0.5)


# Set the cone vertex at (0, 0, 0)

cone_obj.location -= cone_obj.data.vertices[0].co


# Set the cone as the active object

bpy.context.view_layer.objects.active = cone_obj

cone_obj.select_set(True)