2023年7月14日金曜日

20230715 窓面への投影

 




#3つの円柱 線路レール


# 線路レール円柱

import bpy

import math


# 円柱のパラメータ

radius = 0.005

height = 2.0


# 円柱1を作成して90度回転させる

bpy.ops.mesh.primitive_cylinder_add(radius=radius, depth=height, vertices=32, align='WORLD')

cylinder1 = bpy.context.object

cylinder1.rotation_euler[1] = math.radians(90)

cylinder1.name = "円柱 Y = 0"


# 円柱2を作成してY軸に-1移動させ、90度回転する

bpy.ops.mesh.primitive_cylinder_add(radius=radius, depth=height, vertices=32, align='WORLD')

cylinder2 = bpy.context.object

cylinder2.location[1] = -1.0

cylinder2.rotation_euler[1] = math.radians(90)

cylinder2.name = "円柱 Y = -1"


# 円柱3を作成してY軸に+1移動させ、90度回転する

bpy.ops.mesh.primitive_cylinder_add(radius=radius, depth=height, vertices=32, align='WORLD')

cylinder3 = bpy.context.object

cylinder3.location[1] = 1.0

cylinder3.rotation_euler[1] = math.radians(90)

cylinder3.name = "円柱 Y = +1"





#トーラス 円周

import bpy

import math


# トーラスのパラメータ

major_radius = 1.0

minor_radius = 0.005


# トーラスを作成する

bpy.ops.mesh.primitive_torus_add(

    align='WORLD',

    location=(0, 0, 0),

    major_radius=major_radius,

    minor_radius=minor_radius,

    major_segments=48,

    minor_segments=12

)


# 作成したオブジェクトを選択する

torus = bpy.context.object

torus.select_set(True)

bpy.context.view_layer.objects.active = torus


# Y軸方向に 0単位移動する

bpy.ops.transform.translate(value=(0, 0, 0))


# オブジェクトの選択を解除する

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





# 視線 レール右端

import bpy

import mathutils


# パラメータの設定

num_spheres = 21

sphere_radius = 0.01

start_pos = mathutils.Vector((0, 0, 0))

# end_pos = mathutils.Vector((2, 2, 0))

end_pos = mathutils.Vector((-2, 2, 0))



# 球体を作成する関数

def create_sphere(position):

    bpy.ops.mesh.primitive_uv_sphere_add(radius=sphere_radius, location=position)


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

spacing = (end_pos - start_pos) / (num_spheres - 1)


# 球体を作成して配置する

for i in range(num_spheres):

    position = start_pos + spacing * i

    create_sphere(position)






#窓面 線路レール イメージ長さ

import bpy

import mathutils

import math


# パラメータの設定

start_pos = mathutils.Vector((-1 / math.sqrt(2), 1 / math.sqrt(2), 0))

end_pos = mathutils.Vector((1 / math.sqrt(2), 1 / math.sqrt(2), 0))

cylinder_radius = 0.005


# 線分を円柱として作成する関数

def create_cylinder(start, end, radius):

    bpy.ops.mesh.primitive_cylinder_add(radius=radius, depth=(end - start).length, location=(start + end) / 2)

    cylinder = bpy.context.object

    direction = end - start

    cylinder.rotation_euler = direction.to_track_quat('Z', 'Y').to_euler()

    return cylinder


# 線分を円柱として作成

cylinder = create_cylinder(start_pos, end_pos, cylinder_radius)






コレクションを作る


”線路レール 円柱"

"円周 トーラス"

"視線 rail 右端"

"視線 rail 左端"







blender python で

円柱を描く

円柱半径 0.05

円柱中心軸が -1,0,0から +1,0,0


円柱の両端 その中心が x=-1と X=+1 にしたのに違うぞ


「円柱の両端」が 円になってる

その「円中心」位置が

-1,0,0と

 +1,0,0




円柱を作る

長さ2 

半径 0.05



回転軸を Y軸にして 90度回転させる


import bpy

import math


# 円柱のパラメータ

radius = 0.05

height = 2.0


# 円柱を作成する

bpy.ops.mesh.primitive_cylinder_add(radius=radius, depth=height)


# 作成したオブジェクトを選択する

cylinder = bpy.context.object

cylinder.select_set(True)

bpy.context.view_layer.objects.active = cylinder


# Y軸を中心に90度回転する

bpy.ops.transform.rotate(value=math.radians(90), orient_axis='Y')



円柱を作る

長さ2 

半径 0.05

回転軸を Y軸にして 90度回転させる

円柱を y軸に +1移動させる


import bpy

import math


# 円柱のパラメータ

radius = 0.05

height = 2.0


# 円柱を作成して移動させない

bpy.ops.mesh.primitive_cylinder_add(radius=radius, depth=height)

cylinder1 = bpy.context.object

cylinder1.name = "Cylinder1"


# 円柱を作成してY軸に-1移動させる

bpy.ops.mesh.primitive_cylinder_add(radius=radius, depth=height)

cylinder2 = bpy.context.object

cylinder2.location[1] -= 1.0

cylinder2.name = "Cylinder2"


# 円柱を作成してY軸に+1移動させる

bpy.ops.mesh.primitive_cylinder_add(radius=radius, depth=height)

cylinder3 = bpy.context.object

cylinder3.location[1] += 1.0

cylinder3.name = "Cylinder3"



円柱の複製を作る

円柱をy軸方向に +1移動させる




円柱中心位置 

0,0,-1

0,0,+1




視線作成

blender python 


コレクションを作る

" 視線 線路右端"


球体を21個作る

球体半径 0.01

均等間隔に配置する

0,0,0から 2,2,0



import bpy


# Create a new collection

collection = bpy.data.collections.new("視線 レール右端")

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




import bpy


# Create 21 spheres with a radius of 0.002 and evenly spaced them

for i in range(21):

    x = i * 0.1

    y = i * 0.1

    z = 0

    bpy.ops.mesh.primitive_uv_sphere_add(radius=0.002, location=(x, y, z))

    obj = bpy.context.active_object

    objects.append(obj)

    collection.objects.link(obj)


# Select the collection

bpy.context.view_layer.objects.active = collection.objects[0]

collection.objects[0].select_set(True)

bpy.context.view_layer.update()


# Set the 3D cursor location

bpy.context.scene.cursor.location = (0, 0, 0)


# Align the selected objects to the 3D cursor

bpy.ops.object.align(align_mode='OPT_3', relative_to='OPT_4', align_axis={'X'})






import bpy

import math


# 球体のパラメータ

radius = 0.005

count = 21

distance = 2 / (count - 1)


# 球体の作成と配置

for i in range(count):

    x = i * distance

    for j in range(count):

        y = j * distance

        z = 0

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

        sphere = bpy.context.object

        sphere.name = f"球体{i}-{j}"





円周 

中心 000

半径 1 の


x^2+y=1の


(-1/√2, 1/√2、0)

(1/√2, 1/√2、0)

の線分を 円柱にする

半径 0.005







aaaaaa