0
0

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

「三角錐(Tetrahedron)の体積の求め方を教えて下さい。」をAI先生に聞きました。

Last updated at Posted at 2025-04-14

ChatGPT先生へ

質問リスト

・質問リストの追番は無視して下さい。1個ずつです。途中の回答表示は省略しています。

# 質問リスト
1. 三角錐の体積の求め方を教えて下さい。
2. 図を描いて説明して下さい。
3. 上記をsympy のソースコードで。
4. 興味あります。
5. 正面から
6. 保存したい。
7. sympy のソースコードで、積分を使って体積をシンボリックの変数のままで、結果も出力して下さい。
8. 私の質問をMarkdown形式でリスト化して出力して。Markdown形式でリストからアスタリスクは削除して。1行目に、# 質問リスト の文字を出力して。追番を追加して。本質問も含めて下さい。

図を描いて説明して下さい。

???

f1d6921f-5d62-42c6-8bc9-28a131698056.png
上記をsympy のソースコードで。

from sympy import symbols, Rational, Eq, solve

# 記号の定義
b, h_b, H = symbols('b h_b H')  # b: 底辺, h_b: 底面の高さ, H: 錐の高さ

# 底面積(△の面積)
base_area = Rational(1, 2) * b * h_b

# 三角錐の体積公式
volume = Rational(1, 3) * base_area * H

# 結果を表示
print("底面積 =", base_area)
print("体積 =", volume)

実行結果:

# 数値代入して計算
volume_val = volume.subs({b: 6, h_b: 4, H: 10})
print("数値代入後の体積 =", volume_val)

実行すると、数値代入後の体積 = 40 が出ます。

よし、それなら matplotlib を使って三角錐の図を描いてみよう。以下は、三角錐の立体図を簡単に表示する Python コード(SymPy + Matplotlib 使用)です:

import matplotlib.pyplot as plt
from mpl_toolkits.mplot3d.art3d import Poly3DCollection
import numpy as np

# 頂点の定義(適当な座標)
A = np.array([0, 0, 0])
B = np.array([4, 0, 0])
C = np.array([2, 3, 0])
D = np.array([2, 1, 5])

# 三角錐の面
faces = [
    [A, B, C],
    [A, B, D],
    [B, C, D],
    [C, A, D]
]

# 描画
fig = plt.figure()
ax = fig.add_subplot(111, projection='3d')

# 面の描画
poly3d = [face for face in faces]
ax.add_collection3d(Poly3DCollection(poly3d, facecolors='skyblue', edgecolors='k', linewidths=1, alpha=0.6))

# 点のラベル
for point, name in zip([A, B, C, D], ['A', 'B', 'C', 'D']):
    ax.text(*point, name, fontsize=12)

# 軸設定
ax.set_xlim(0, 5)
ax.set_ylim(0, 5)
ax.set_zlim(0, 6)
ax.set_xlabel('X')
ax.set_ylabel('Y')
ax.set_zlabel('Z')
ax.set_title('正面から見た三角錐')

# 正面からの視点(z 軸を上に、x 軸を左右に、y 軸が奥行きになる視点)
ax.view_init(elev=10, azim=-90)  # elev: 上下角度, azim: 水平角度

plt.show()
import matplotlib.pyplot as plt
from mpl_toolkits.mplot3d.art3d import Poly3DCollection
import numpy as np

# 頂点の定義
A = np.array([0, 0, 0])
B = np.array([4, 0, 0])
C = np.array([2, 3, 0])
D = np.array([2, 1, 5])

# 三角錐の面
faces = [
    [A, B, C],
    [A, B, D],
    [B, C, D],
    [C, A, D]
]

# 描画
fig = plt.figure()
ax = fig.add_subplot(111, projection='3d')

# 面の描画
poly3d = [face for face in faces]
ax.add_collection3d(Poly3DCollection(poly3d, facecolors='skyblue', edgecolors='k', linewidths=1, alpha=0.6))

# ラベル
for point, name in zip([A, B, C, D], ['A', 'B', 'C', 'D']):
    ax.text(*point, name, fontsize=12)

# 軸設定
ax.set_xlim(0, 5)
ax.set_ylim(0, 5)
ax.set_zlim(0, 6)
ax.set_xlabel('X')
ax.set_ylabel('Y')
ax.set_zlabel('Z')
ax.set_title('正面から見た三角錐')

# 正面からの視点
ax.view_init(elev=10, azim=-90)

# 画像として保存(例: PNG形式)
plt.savefig("triangular_pyramid_front.png", dpi=300, bbox_inches='tight')  # 高解像度で保存
plt.show()

ついでに、sympy のソースコードで、積分を使って体積をシンボリックの変数のままで、結果も出力して下さい。

了解!では、三角錐の体積を 積分を使って求める SymPy のコードを、シンボリック変数のまま計算・出力する形で紹介します。

from sympy import symbols, integrate, Rational

# 変数定義
x, y, z = symbols('x y z')
b, h_b, H = symbols('b h_b H', positive=True)  # b: 底辺, h_b: 底面高さ, H: 錐の高さ

# z の上限は錐の高さに比例(x, y による傾斜あり)
# 底面の三角形を x: [0, b], y: [0, h_b*(1 - x/b)] にすると、ピラミッド形になる

# z の上面:線形に減衰するように仮定(高さ H に比例)
z_top = H * (1 - x / b - y / h_b)

# 積分:dz dy dx の順で三重積分
volume = integrate(
    integrate(
        integrate(1, (z, 0, z_top)),
    (y, 0, h_b * (1 - x / b))),
(x, 0, b))

# 結果出力
print("積分による体積(シンボリック) =")
print(volume.simplify())

結果(出力):

積分による体積(シンボリック) =
b*h_b*H/6

Gemini先生へ

copilot先生へ

いつもの? sympyの実行環境と 参考のおすすめです。

(テンプレート)

いつもと違うおすすめです。

wikipedia

0
0
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
0
0

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?