裏 RjpWiki

Julia ときどき R, Python によるコンピュータプログラム,コンピュータ・サイエンス,統計学

算額(その1348)

2024年10月11日 | Julia

算額(その1348)

岐阜県垂井町 西法寺 令和6年(2024)
http://www.wasan.jp/gifu/saihoji.html

キーワード:三角錐,内接球,外接球,半径,中心座標
#Julia, #SymPy, #算額, #和算

三辺の長さが 8, 9, 9 の四面体 OABC がある。体積,外接球の半径,内接球の半径はいかほどか。

6 辺の長さが与えられているので,そのうちの一辺(AB)が x 軸上にあり,かつ片方の始点(A)が原点になるように座標を割り当て,頂点座標を求める。
その後は,算額(その214)に従って,解を得る。

include("julia-source.txt");

using SymPy
@syms x1, y1, x2, y2, z2
eq1 = x2^2 + y2^2 + z2^2 - 8^2
eq2 = (x2 - 9)^2 + y2^2 + z2^2 - 9^2
eq3 = (x2 - x1)^2 + (y2 - y1)^2 + z2^2 - 9^2
eq4 = x1^2 + y1^2 - 9^2
eq5 = (x1 - 9)^2 + y1^2 - 8^2
(x01, y01, x02, y02, z02) = solve([eq1, eq2, eq3, eq4, eq5], (x1, y1, x2, y2, z2))[4]  # 4 of 4

   (49/9, 8*sqrt(65)/9, 32/9, 128*sqrt(65)/585, 56*sqrt(65)/65)

x1, y1, z1 = 0, 0, 0
x2, y2, z2 = 9, 0, 0
x3, y3, z3 = x01.evalf(), y01.evalf(), 0
x4, y4, z4 = x02.evalf(), y02.evalf(), z02.evalf();

(x1, y1, z1) |> println
(x2, y2, z2) |> println
(x3, y3, z3) |> println
(x4, y4, z4) |> println

   (0, 0, 0)
   (9, 0, 0)
   (5.44444444444444, 7.16645133182093, 0)
   (3.55555555555556, 1.76404955860208, 6.94594513699567)

以下のプログラムにより,表面積,外接球の半径,内接球の半径を得る。

using LinearAlgebra

三角錐の体積を計算する関数
function tetrahedron_volume(x1, y1, z1, x2, y2, z2, x3, y3, z3, x4, y4, z4)
   M = [
       x1 y1 z1 1;
       x2 y2 z2 1;
       x3 y3 z3 1;
       x4 y4 z4 1
   ]
   return abs(det(M)) / 6
end

外接球の半径と中心を計算する関数
function circumsphere(x1, y1, z1, x2, y2, z2, x3, y3, z3, x4, y4, z4)
   A = [
       x1 y1 z1 1;
       x2 y2 z2 1;
       x3 y3 z3 1;
       x4 y4 z4 1
   ]

   Dx = [
       x1^2 + y1^2 + z1^2 y1 z1 1;
       x2^2 + y2^2 + z2^2 y2 z2 1;
       x3^2 + y3^2 + z3^2 y3 z3 1;
       x4^2 + y4^2 + z4^2 y4 z4 1
   ]

   Dy = [
       x1^2 + y1^2 + z1^2 x1 z1 1;
       x2^2 + y2^2 + z2^2 x2 z2 1;
       x3^2 + y3^2 + z3^2 x3 z3 1;
       x4^2 + y4^2 + z4^2 x4 z4 1
   ]

   Dz = [
       x1^2 + y1^2 + z1^2 x1 y1 1;
       x2^2 + y2^2 + z2^2 x2 y2 1;
       x3^2 + y3^2 + z3^2 x3 y3 1;
       x4^2 + y4^2 + z4^2 x4 y4 1
   ]

   D = [
       x1^2 + y1^2 + z1^2 x1 y1 z1;
       x2^2 + y2^2 + z2^2 x2 y2 z2;
       x3^2 + y3^2 + z3^2 x3 y3 z3;
       x4^2 + y4^2 + z4^2 x4 y4 z4
   ]

   # 外接球の中心座標
   x_center = 0.5 * det(Dx) / det(A)
   y_center = -0.5 * det(Dy) / det(A)
   z_center = 0.5 * det(Dz) / det(A)

   # 外接球の半径
   radius = sqrt(x_center^2 + y_center^2 + z_center^2 - det(D) / det(A))

   return x_center, y_center, z_center, radius
end

内接球の半径と表面積を計算する関数
function insphere_radius(x1, y1, z1, x2, y2, z2, x3, y3, z3, x4, y4, z4)
   # 各面の面積を求める
   area1 = 0.5 * norm(cross([x2 - x1, y2 - y1, z2 - z1], [x3 - x1, y3 - y1, z3 - z1]))
   area2 = 0.5 * norm(cross([x2 - x1, y2 - y1, z2 - z1], [x4 - x1, y4 - y1, z4 - z1]))
   area3 = 0.5 * norm(cross([x3 - x1, y3 - y1, z3 - z1], [x4 - x1, y4 - y1, z4 - z1]))
   area4 = 0.5 * norm(cross([x3 - x2, y3 - y2, z3 - z2], [x4 - x2, y4 - y2, z4 - z2]))

   # 表面積(4 面の合計)
   total_area = area1 + area2 + area3 + area4
   volume = tetrahedron_volume(x1, y1, z1, x2, y2, z2, x3, y3, z3, x4, y4, z4)

   # 内接球の半径
   radius = 3 * volume / total_area

   return total_area, radius
end;

三角錐の体積
volume = tetrahedron_volume(x1, y1, z1, x2, y2, z2, x3, y3, z3, x4, y4, z4)
println("三角錐の体積: $volume")

外接球の中心と半径
x_center, y_center, z_center, circ_radius = circumsphere(x1, y1, z1, x2, y2, z2, x3, y3, z3, x4, y4, z4)
println("外接球の中心: ($x_center, $y_center, $z_center)")
println("外接球の半径: $circ_radius")

内接球の半径と表面積
total_area, in_radius = insphere_radius(x1, y1, z1, x2, y2, z2, x3, y3, z3, x4, y4, z4)
println("表面積: $total_area")
println("内接球の半径: $in_radius")

   三角錐の体積: 74.6666666666667
   外接球の中心: (4.50000000000000, 2.23262522260575, 1.73648628424892)
   外接球の半径: 5.31507290636732
   表面積: 128.996123972777
   内接球の半径: 1.73648628424892

四面体の表面積は 74.6666666666667 = 224/3,外接円の半径は 5.31507290636732,内接円の半径は 1.73648628424892 である。


コメント    この記事についてブログを書く
  • X
  • Facebookでシェアする
  • はてなブックマークに追加する
  • LINEでシェアする
« 算額(その1347) | トップ | 算額(その1349) »
最新の画像もっと見る

コメントを投稿

ブログ作成者から承認されるまでコメントは反映されません。

Julia」カテゴリの最新記事