2023年4月18日火曜日

正三角形 20230418 tue



import bpy

# コレクションを作成

collection_name = "正三角形"

if collection_name not in bpy.data.collections:

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

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

else:

    zionad_collection = bpy.data.collections[collection_name]







# 座標が (-1, 0, 0), (1, 0, 0), (0, -√3, 0) の正三角形


import bpy
import math

# 頂点座標の設定
v1 = (-1, 0, 0)
v2 = (1, 0, 0)
v3 = (0, -math.sqrt(3), 0)
vertices = [v1, v2, v3]

# メッシュオブジェクトの作成
mesh = bpy.data.meshes.new(name="Triangle")
mesh.from_pydata(vertices, [], [(0, 1, 2)])

# オブジェクトの作成とシーンへの追加
obj = bpy.data.objects.new(name="Triangle", object_data=mesh)
bpy.context.scene.collection.objects.link(obj)










前回のスクリプトを以下のように修正して、中心の正六角形の頂点を (0, -math.sqrt(3), 0) にするようにしました。



正三角形を中心にして隣り合う正三角形を作成し、辺の長さが一致するように配置し、最終的に正六角形を構成する













# 星型 失敗


import bpy
import math
import mathutils

# 正三角形を構成する3つの頂点座標
v1 = mathutils.Vector((-1, 0, 0))
v2 = mathutils.Vector((1, 0, 0))
v3 = mathutils.Vector((0, -math.sqrt(3), 0))

# 中心にある正六角形の頂点座標を計算する
center = mathutils.Vector((0, -math.sqrt(3), 0))
radius = math.sqrt(3)
angle = 2 * math.pi / 6
hexagon_vertices = []
for i in range(6):
    x = center.x + radius * math.cos(i * angle)
    y = center.y + radius * math.sin(i * angle)
    z = center.z
    hexagon_vertices.append(mathutils.Vector((x, y, z)))

# 正六角形を作成する
mesh = bpy.data.meshes.new("HexagonMesh")
hexagon_object = bpy.data.objects.new("HexagonObject", mesh)
hexagon_object.location = center
bpy.context.collection.objects.link(hexagon_object)
mesh.from_pydata(hexagon_vertices, [], [[0, 1, 2], [0, 2, 3], [0, 3, 4], [0, 4, 5], [0, 5, 1], [1, 2, 3, 4, 5]])

# 周囲の5つの正三角形を作成する
triangle_vertices = [v1, v2, v3]
for i in range(5):
    angle = i * 2 * math.pi / 5
    rotation_matrix = mathutils.Matrix.Rotation(angle, 3, 'Z')
    new_vertices = [rotation_matrix @ vertex for vertex in triangle_vertices]
    mesh = bpy.data.meshes.new("TriangleMesh")
    triangle_object = bpy.data.objects.new("TriangleObject", mesh)
    triangle_object.location = center
    triangle_object.rotation_euler = rotation_matrix.to_euler()
    bpy.context.collection.objects.link(triangle_object)
    mesh.from_pydata(new_vertices, [], [[0, 1, 2]])

print("Objects created successfully.")