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.")