スキップしてメイン コンテンツに移動

三角錐 底面なし 描画成功 blender 3.4.1 python


blender 3.4.1 python で 底面が半径1の円錐で 底面のない円錐を 冒頭で import math 付け加えて書いて


以下は、Blender 3.4.1でPythonを使用して、半径1の底面を持つ円錐から底面がない円錐を作成する方法の例です。このコードを実行する前に、Blenderで新しいファイルを作成し、Pythonコンソールを開いてください。


import bpy
import math

# 円錐の高さと半径
height = 2.0
radius = 1.0

# 頂点座標を計算する
vertices = []
for i in range(32):
    theta = 2 * math.pi * i / 32
    x = radius * math.cos(theta)
    y = radius * math.sin(theta)
    vertices.append((x, y, 0))
vertices.append((0, 0, height))

# 面を作成する
faces = []
for i in range(32):
    faces.append((i, (i + 1) % 32, 32))

# メッシュを作成する
mesh = bpy.data.meshes.new('Cone')

# メッシュに頂点と面を追加する
mesh.from_pydata(vertices, [], faces)

# メッシュをオブジェクトに変換する
obj = bpy.data.objects.new('Cone', mesh)

# オブジェクトをシーンに追加する
bpy.context.scene.collection.objects.link(obj)





このコードを実行すると、底面が半径1の円錐が作成されます。この円錐の高さと半径は、heightradius変数の値を変更することで調整できます。また、円錐の側面の解像度を変更するには、verticesリストを計算する際に、range関数の引数を調整してください。



円錐の側面の解像度を変更するには、verticesリストを計算する際に、range関数の引数を調整 仕方を詳しく説明して


円錐の側面の解像度を変更するには、円周をどれだけ細かく分割するかを決定することが重要です。解像度が高いほど、円錐の側面がより滑らかになります。ただし、より多くの頂点を使用すると、メッシュがより詳細になり、処理時間が増加するため、適切な値を見つける必要があります。

以下は、側面の解像度をresolution変数で調整する方法の例です。ここでは、resolutionの値を32に設定しています。


import bpy
import math

# 円錐の高さと半径
height = 2.0
radius = 1.0

# 解像度
resolution = 32

# 頂点座標を計算する
vertices = []
for i in range(resolution):
    theta = 2 * math.pi * i / resolution
    x = radius * math.cos(theta)
    y = radius * math.sin(theta)
    vertices.append((x, y, 0))
vertices.append((0, 0, height))

# 面を作成する
faces = []
for i in range(resolution):
    faces.append((i, (i + 1) % resolution, resolution))

# メッシュを作成する
mesh = bpy.data.meshes.new('Cone')

# メッシュに頂点と面を追加する
mesh.from_pydata(vertices, [], faces)

# メッシュをオブジェクトに変換する
obj = bpy.data.objects.new('Cone', mesh)

# オブジェクトをシーンに追加する
bpy.context.scene.collection.objects.link(obj)


ここでは、側面の解像度を調整するために、resolution変数を導入し、その値をrange関数の引数に渡しています。range(resolution)は、resolutionの値に応じて0から31までの範囲を生成し、その値を使用して各頂点の座標を計算しています。また、facesリストを生成する際にも、resolutionの値を使用しています。

したがって、側面の解像度を変更するには、resolution変数の値を調整するだけで済みます。しかし、適切な解像度を見つけるために、いくつかの試行と誤りが必要になるかもしれません。


以下テスト 試み

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


最初に作った 底面なしの円錐スクリプトに 3x3の平面を描いて この平面中心には1x1の穴を作って 底面なしの円錐底面円周に 穴が重なる


以下は、Blender 3.4.1のPython APIを使用して、底面なしの円錐に穴のある平面を追加するスクリプトです。このスクリプトは、最初に作成したスクリプトをベースにしています。

import bpy
import math

# 円錐の高さと半径
height = 2.0
radius = 1.0

# 解像度
resolution = 32

# 頂点座標を計算する
vertices = []
for i in range(resolution):
    theta = 2 * math.pi * i / resolution
    x = radius * math.cos(theta)
    y = radius * math.sin(theta)
    vertices.append((x, y, 0))
vertices.append((0, 0, height))

# 面を作成する
faces = []
for i in range(resolution):
    faces.append((i, (i + 1) % resolution, resolution))

# 平面を作成する
bpy.ops.mesh.primitive_plane_add(size=3)

# 平面を移動する
plane = bpy.context.active_object
plane.location[2] = -height/2

# 穴を作成する
bpy.ops.mesh.primitive_circle_add(radius=0.5, fill_type='NGON')

# 穴を移動する
hole = bpy.context.active_object
hole.location[2] = -height/2 + 0.001
hole.location[0] = hole.location[1] = 1.5

# 重なりをチェックする
bm1 = bmesh.new()
bm1.from_mesh(plane.data)
bm2 = bmesh.new()
bm2.from_mesh(hole.data)
bm1.faces.ensure_lookup_table()
bm2.faces.ensure_lookup_table()
result = bmesh.ops.bisect_plane(
    bm1, 
    geom=bm1.faces[:], 
    plane_co=(0, 0, -height/2), 
    plane_no=(0, 0, 1)
)
for f in result['geom_cut']:
    if hole in f.verts:
        hole.location[2] += 0.001
        break
bm1.to_mesh(plane.data)
bm1.free()

# メッシュを作成する
mesh = bpy.data.meshes.new('Cone')

# メッシュに頂点と面を追加する
mesh.from_pydata(vertices, [], faces)

# メッシュをオブジェクトに変換する
obj = bpy.data.objects.new('Cone', mesh)

# オブジェクトをシーンに追加する
bpy.context.scene.collection.objects.link(obj)


このスクリプトでは、まず円錐の頂点と面を計算する部分は先程のスクリプトと同様です。次に、平面を作成し、位置を円錐の底面と合わせます。その後、穴を作成し、位置を平面の中心に調整します。最後に、平面と穴の重なりをチェックし、穴が円錐の底面円周に重なるように位置を調整します。

なお、穴の位置を微調整する際










togetter.com/t/c2022meetzionad
togetter.com/t/b2022meetzionad




twitter 新着検索 Dürer & 測距儀


aaa
bbb




ccc twitter zionadchat
twitter に追い出されたら 連絡先は Gettr https://gettr.com/user/zionadchat
twitter サブアカウント https://twitter.com/2022zionad

old page いいい
new page いいい

目次 2022の目次 単純トリック hatena zionadchat
いいいいいいいい

このブログの人気の投稿

太陽から 土星

日本語で質問しますので、以下形式で回答してください。 【質問の英訳】 【英訳に対する英語の回答】 【英語の回答の日本語訳】 blender 3.4.1 python スクリプト 書いて 冒頭に import math 挿入 内容は  太陽と土星を描いて 太陽の半径1 土星の半径0.5で 太陽から土星の距離を10で Question: Blender 3.4.1 Python script - write a script that includes "import math" at the beginning and draws the Sun and Saturn with a radius of 1 for the Sun and 0.5 for Saturn, with a distance of 10 from the Sun to Saturn. Answer: Here's a Python script for Blender 3.4.1 that draws the Sun and Saturn with the specified parameters: 太陽と土星の描画 成功 import bpy import math # Set up the scene bpy.ops.object.select_all(action='SELECT') bpy.ops.object.delete() bpy.ops.mesh.primitive_uv_sphere_add(radius=1, location=(0,0,0)) # create Sun sun = bpy.context.selected_objects[0] sun.name = 'Sun' bpy.ops.mesh.primitive_uv_sphere_add(radius=0.5, location=(10,0,0)) # create Saturn saturn = bpy.context.selected_objects[0] saturn.name = 'Saturn' # Create the animation frames = 100 for i in range(frames):     ...

球体で カシオペア座の5つの恒星 その3次元 宇宙内の相対位置を再現して

import bpy from random import randint # 球体を作成する関数 def create_sphere(x, y, z, radius):     bpy.ops.mesh.primitive_uv_sphere_add(location=(x, y, z), radius=radius) # ランダムな座標を返す関数 def random_location():     x = randint(-5, 5)     y = randint(-5, 5)     z = randint(-5, 5)     return (x, y, z) # 5つの球体を作成 for i in range(5):     location = random_location()     create_sphere(location[0], location[1], location[2], 1) ランダムではなく、 カシオペア座の5つの恒星 その3次元 宇宙内の相対位置を再現して カシオペア座の5つの恒星の相対位置を再現するためには、各恒星の座標を知る必要があります。これらの座標を手動で入力することもできますが、以下のように、座標データを使用することもできます。 import bpy # カシオペア座の5つの恒星の座標 coordinates = [(4.23, 56.87, 13.04),                 (3.19, 61.75, -0.28),                 (1.62, 58.75, -18.45),                 (0.11, 59.15, 16.52),                 (1....

Chat GPT で 長方体 cuboid 1x1x10 を描く

今回は  長方体 cuboid 1x1x10 を描く 平行6面体 blender 2023 初歩の初歩 005 ChatGPT で python 書いてもらい 16個の球体を正方形に並べて 描けた  https://togetter.com/li/2088342   blender 3.4.1 python で 透明な長方体を描いて 比率は 1x1x10 とにかく さっきの 冒頭に import math と書いて  先程提供したコードの冒頭にimport mathを追加することは、コードにエラーを引き起こすことはありません。 import bpy の 次の行に import math と書いたら 実行できたので もう一度 書き直して import mathを追加して、透明な長方体を描画するPythonコードを以下に示します。 import bpy import math # 透明なマテリアルを作成 mat = bpy.data.materials.new(name="Transparent") mat.use_nodes = True nodes = mat.node_tree.nodes links = mat.node_tree.links transparent_node = nodes.new(type="ShaderNodeBsdfTransparent") output_node = nodes.new(type="ShaderNodeOutputMaterial") links.new(transparent_node.outputs[0], output_node.inputs[0]) # 長方体を作成 bpy.ops.mesh.primitive_cube_add(size=1) cube = bpy.context.selected_objects[0] cube.scale = (1, 1, 10) # マテリアルを割り当て if cube.data.materials:     # マテリアルがすでに割り当てられている場合は、最初のマテリアルを置換する     cube.data.materials[0] = mat else:     # マテリアルが割り当てら...