2023年3月16日木曜日

円筒

aaa











import bpy
import math
import mathutils

# 円錐の高さと底面半径
height = 300
radius = 300

# 円錐を作成するための頂点と面のリスト
verts = []
faces = []

# 円錐の頂点を作成する
num_verts = 32
angle_step = 2 * math.pi / num_verts
for i in range(num_verts):
    x = radius * math.cos(angle_step * i)
    y = radius * math.sin(angle_step * i)
    z = 0
    verts.append(mathutils.Vector((x, y, z)))
verts.append(mathutils.Vector((0, 0, height))) # 円錐の先端の頂点を追加

# 円錐の面を作成する
num_faces = num_verts
for i in range(num_faces):
    face = [i, (i + 1) % num_verts, num_verts]
    faces.append(face)

# メッシュオブジェクトを作成する
mesh = bpy.data.meshes.new('cone_mesh')
mesh.from_pydata(verts, [], faces)

# オブジェクトを作成して、メッシュを割り当てる
obj = bpy.data.objects.new('cone_object', mesh)
bpy.context.scene.collection.objects.link(obj)

# 3Dビューポートを更新する
bpy.context.view_layer.update()










0,0,0 から 0,0,300 で 半径0,5の円筒書いて


0,0,0 から 0,150,300 で 半径0,5の円筒書いて


import bpy
import mathutils

# 円筒の半径
radius = 2

# 円筒の高さ
height = 300

# 円筒の作成
bpy.ops.mesh.primitive_cylinder_add(radius=radius, depth=height)

# オブジェクトを取得
obj = bpy.context.object

# 円筒の位置を設定
obj.location = mathutils.Vector((0, 0, height / 2))

# 円筒を選択状態にする
obj.select_set(True)

# 円筒のスケールを設定
bpy.ops.transform.resize(value=(1, 1, height / (2 * radius)))

# 3Dカーソルの位置を設定
bpy.context.scene.cursor.location = mathutils.Vector((0, 0, height / 2))

# 3Dカーソルを円筒の中心に移動
bpy.ops.object.origin_set(type='ORIGIN_CURSOR')

# 円筒の選択状態を解除
obj.select_set(False)
    


























import bpy
import math
import mathutils

# 円錐の高さと底面半径
height = 300
radius = 300

# 円錐を作成するための頂点と面のリスト
verts = []
faces = []

# 円錐の頂点を作成する
num_verts = 32
angle_step = 2 * math.pi / num_verts
for i in range(num_verts):
    x = radius * math.cos(angle_step * i)
    y = radius * math.sin(angle_step * i)
    z = 0
    verts.append(mathutils.Vector((x, y, z)))
verts.append(mathutils.Vector((0, 0, height))) # 円錐の先端の頂点を追加

# 円錐の面を作成する
num_faces = num_verts
for i in range(num_faces):
    face = [i, (i + 1) % num_verts, num_verts]
    faces.append(face)

# メッシュオブジェクトを作成する
mesh = bpy.data.meshes.new('cone_mesh')
mesh.from_pydata(verts, [], faces)

# オブジェクトを作成して、メッシュを割り当てる
obj = bpy.data.objects.new('cone_object', mesh)
bpy.context.scene.collection.objects.link(obj)

# 3Dビューポートを更新する
bpy.context.view_layer.update()


この円錐表面に 以下の球体中心が通過したら

球体半径0.5 の球体を 0,300,0へ 動かすアニメを作って



import bpy
import random

# タグ名
tag_name = "y zrain_l_line_drops50"

# コレクションを取得する
collection = bpy.data.collections.get(tag_name)

# コレクションが存在しない場合は作成する
if not collection:
    collection = bpy.data.collections.new(tag_name)
    bpy.context.scene.collection.children.link(collection)

# 球体の半径を設定
radius = 5.0

# 球体を表示するかどうかのフラグ
show_sphere = True

for i in range(50):
    # 球体の初期位置と移動先の位置をランダムに設定
    z = random.uniform(-300, 300)
    loc_a_start = (-300, 0, z)
    loc_a_end = (0, 300, 0)

    # 球体Aを作成し、初期位置を設定する
    bpy.ops.mesh.primitive_uv_sphere_add(radius=radius, location=loc_a_start)
    obj_a = bpy.context.object

    # コレクションにオブジェクトを追加する
    collection.objects.link(obj_a)

    if not show_sphere:
        obj_a.hide_render = True

    # アニメーションのフレーム設定を行う
    start_frame = 1  # アニメーションの最初のフレーム
    end_frame_a = int(20 * bpy.context.scene.render.fps)  # 球体Aの移動が終わるフレーム
    bpy.context.scene.frame_start = start_frame  # アニメーションの開始フレームを設定
    bpy.context.scene.frame_end = end_frame_a  # アニメーションの終了フレームを設定

    # キーフレームを設定する
    obj_a.location = loc_a_start  # 球体Aの開始位置を設定
    obj_a.keyframe_insert(data_path="location", frame=start_frame)  # 開始フレームでキーフレームを設定
    obj_a.location = loc_a_end  # 球体Aの終了位置を設定
    obj_a.keyframe_insert(data_path="location", frame=end_frame_a)  # 終了フレームでキーフレームを設定

# アニメーション再生
bpy.ops.screen.animation_play()  # アニメーションを再生







# アニメーション再生時間を5秒延長
bpy.context.scene.frame_end += 5 * bpy.context.scene.render.fps






bbb

連番 007 未来光円錐 過去光円錐 円周中心からの球体放出

aaa 参考 2023年3月26日日曜日 製作 002b 未来光円錐の方向 線路レールで https://ia2023sha.blogspot.com/2023/03/002b.html import bpy import math zion_co...