見出し画像

ChatGPT-4oは3Dモデルを出力できる

以下の記事を読んで私も試してみたけどChatGPT-4oはSTLファイルを出力できます。

Q.土星の3Dモデルを生成し、STLファイル形式で出力してください
A.土星の3DモデルをSTLファイル形式で生成しました。以下のリンクからダウンロードできます。

土星の3Dモデルをダウンロード ​


内部的にはPythonでコードを書いて生成しているようです。

import numpy as np
from math import sin, cos, pi
import trimesh

# Parameters for Saturn and its rings
saturn_radius = 60268  # in kilometers
ring_inner_radius = 74500  # in kilometers
ring_outer_radius = 140220  # in kilometers
saturn_scale = 0.1  # Scaling factor to make the model manageable

# Convert to a manageable size for 3D modeling
saturn_radius *= saturn_scale
ring_inner_radius *= saturn_scale
ring_outer_radius *= saturn_scale

# Function to create a sphere (for Saturn)
def create_sphere(radius, segments):
    vertices = []
    indices = []
    for i in range(segments):
        lat = pi * (-0.5 + float(float(i) / float(segments - 1)))
        for j in range(segments):
            lon = 2 * pi * float(float(j) / float(segments - 1))
            x = radius * cos(lat) * cos(lon)
            y = radius * cos(lat) * sin(lon)
            z = radius * sin(lat)
            vertices.append([x, y, z])
            if i < (segments - 1) and j < (segments - 1):
                a = i * segments + j
                b = a + segments
                c = b + 1
                d = a + 1
                indices.append([a, b, d])
                indices.append([b, c, d])
    return vertices, indices

# Function to create a torus (for Saturn's rings)
def create_torus(inner_radius, outer_radius, ring_segments, side_segments):
    vertices = []
    indices = []
    for i in range(ring_segments):
        theta = 2.0 * pi * i / ring_segments
        cos_theta = cos(theta)
        sin_theta = sin(theta)
        for j in range(side_segments):
            phi = 2.0 * pi * j / side_segments
            cos_phi = cos(phi)
            sin_phi = sin(phi)
            dist = inner_radius + (outer_radius - inner_radius) / 2.0 + (outer_radius - inner_radius) / 2.0 * cos_phi
            x = dist * cos_theta
            y = dist * sin_theta
            z = (outer_radius - inner_radius) / 2.0 * sin_phi
            vertices.append([x, y, z])
            if i < (ring_segments - 1) and j < (side_segments - 1):
                a = i * side_segments + j
                b = a + side_segments
                c = b + 1
                d = a + 1
                indices.append([a, b, d])
                indices.append([b, c, d])
    return vertices, indices

# Create the Saturn sphere
saturn_segments = 32
saturn_vertices, saturn_indices = create_sphere(saturn_radius, saturn_segments)

# Create the rings of Saturn
ring_segments = 64
side_segments = 8
ring_vertices, ring_indices = create_torus(ring_inner_radius, ring_outer_radius, ring_segments, side_segments)

# Combine vertices and faces
vertices = np.array(saturn_vertices + ring_vertices)
indices = np.array(saturn_indices + [[i[0] + len(saturn_vertices), i[1] + len(saturn_vertices), i[2] + len(saturn_vertices)] for i in ring_indices])

# Create the mesh using trimesh
mesh = trimesh.Trimesh(vertices=vertices, faces=indices)

# Save the mesh to STL file
file_path = '/mnt/data/saturn_model.stl'
mesh.export(file_path)

file_path

これはどういうことかというとSTLファイルが出力できるということは3Dプリンタに読み込ませて3Dモデルを作成できるということです。

Fusion360でSTLファイルを開いてみました。

微妙につながっていなかった。

この記事が気に入ったらサポートをしてみませんか?