生活随笔
收集整理的這篇文章主要介紹了
根据空间中不共面的四个点坐标,求构成任意四面体的内外球
小編覺得挺不錯的,現在分享給大家,幫大家做個參考.
海倫公式:
四面體體積公式
六條邊分別為a,b,c,a1,b1,c1。
a,b,c,a1,b1,c1,其中a與a1,b與b1,c與c1互為對邊,那么有三棱錐(四面體)的體積公式為:
V=1/12sqrt(4a2b2c2-a2D2-b2E2c2F2+DEF),sqrt表示開根號,a2表示平方
D=b2+c2-a12,E=a2+c2-b12, F=a2+b2-c1**2
內切球半徑公式
R = (3*V)/S s為四面體面積
最小外接球
四個點到球心的距離相等
代碼如下:
import math
import numpy
as np
from scipy
.linalg
import solve
def nball(x1
,y1
,z1
,x2
,y2
,z2
,x3
,y3
,z3
,x4
,y4
,z4
):try:a
= math
.sqrt
((x1
- x2
) ** 2 + (y1
- y2
) ** 2 + (z1
- z2
) ** 2)b
= math
.sqrt
((x1
- x3
) ** 2 + (y1
- y3
) ** 2 + (z1
- z3
) ** 2)c
= math
.sqrt
((x1
- x4
) ** 2 + (y1
- y4
) ** 2 + (z1
- z4
) ** 2)a1
= math
.sqrt
((x3
- x4
) ** 2 + (y3
- y4
) ** 2 + (z3
- z4
) ** 2)b1
= math
.sqrt
((x2
- x4
) ** 2 + (y2
- y4
) ** 2 + (z2
- z4
) ** 2)c1
= math
.sqrt
((x2
- x3
) ** 2 + (y2
- y3
) ** 2 + (z2
- z3
) ** 2)print('六條邊長',[a
,b
,c
,a1
,b1
,c1
])p1
= round((a1
+ b1
+ c1
) / 2, 3) s1
= round(math
.sqrt
(p1
* (p1
- a1
) * (p1
- b1
) * (p1
- c1
)), 3) p2
= round((a
+ b
+ c1
) / 2, 3)s2
= round(math
.sqrt
(p2
* (p2
- a
) * (p2
- b
) * (p2
- c1
)), 3)p3
= round((b
+c
+a1
) / 2, 3)s3
= round(math
.sqrt
(p3
* (p3
- a1
) * (p3
- b
) * (p3
- c
)), 3)p4
= round((a
+ b1
+ c
) / 2, 3)s4
= round(math
.sqrt
(p4
* (p4
- a
) * (p4
- b1
) * (p4
- c
)), 3)S
=s1
+s2
+s3
+s4
print('四面體表面積',round(S
,3))D
= b
** 2 + c
** 2 - a1
** 2E
= a
** 2 + c
** 2 - b1
** 2F
= a
** 2 + b
** 2 - c1
** 2sun
=math
.sqrt
(4*(a
** 2)*(b
** 2)*(c
** 2) - (a
** 2)*(D
** 2) - (b
** 2)*(E
** 2) - (c
** 2)*(F
** 2) + D
*E
*F
)V
= (1/12)*sun
"""# 用線性代數和等體積法求得四面體的體積A1 = x2 * (y3 * z4 - y4 * z3) - x3 * (y2 * z4 - y4 * z2) + x4 * (y2 * z3 - y3 * z2)A2 = x1 * (y3 * z4 - y4 * z3) - x3 * (y1 * z4 - y4 * z1) + x4 * (y1 * z3 - y3 * z1)A3 = x1 * (y2 * z4 - y4 * z2) - x2 * (y1 * z4 - y4 * z1) + x4 * (y1 * z2 - y2 * z1)A4 = x1 * (y2 * z3 - y3 * z2) - x2 * (y1 * z3 - y3 * z1) + x3 * (y1 * z2 - y2 * z1)v = (A1 - A2 + A3 - A4)/6"""print('四面體體積',round(V
,3))nR
= (3*V
)/S
print('內切球半徑',round(nR
,3))narea
=4*3.14*nR
**2V
=(4/3)*3.14*nR
**3print('內切球表面積',round(narea
,3))print('內切球體積',round(V
,3))except:print('輸入的點不能構成四面體')
def wball(x1
,y1
,z1
,x2
,y2
,z2
,x3
,y3
,z3
,x4
,y4
,z4
):try:a
=str(2*x1
-2*x2
)+"x+"+str(2*y1
-2*y2
)+"y+"+str(2*z1
-2*z2
)+"z="+str(x1
**2-x2
**2+y1
**2-y2
**2+z1
**2-z2
**2)b
= str(2 * x1
- 2 * x3
) + 'x+'+str(2 * y1
- 2*y3
)+ 'y+'+str(2 * z1
- 2 * z3
) + 'z=' + str(x1
** 2 - x3
** 2 + y1
** 2 - y3
** 2 + z1
** 2 - z3
** 2)c
= str(2 * x1
- 2 * x4
) + 'x+'+str(2 * y1
- 2 * y4
) + 'y+'+str(2 * z1
- 2 * z4
) + 'z=' + str(x1
** 2 - x4
** 2 + y1
** 2 - y4
** 2 + z1
** 2 - z4
** 2)clist
=[a
.replace
('+-','-'),b
.replace
('+-','-'),c
.replace
('+-','-')]print('化簡后的三元一次方程為:')for each
in clist
:print(each
)a1
= np
.array
([[float(2 * x1
- 2 * x2
),float(2*y1
-2*y2
),float(2*z1
-2*z2
)],[float(2 * x1
- 2 * x3
),float(2 * y1
- 2*y3
),float(2 * z1
- 2 * z3
)],[float(2 * x1
- 2 * x4
),float(2 * y1
- 2 * y4
),float(2 * z1
- 2 * z4
)]])b1
= np
.array
([float(x1
**2-x2
**2+y1
**2-y2
**2+z1
**2-z2
**2),float(x1
** 2 - x3
** 2 + y1
** 2 - y3
** 2 + z1
** 2 - z3
** 2),float(x1
** 2 - x4
** 2 + y1
** 2 - y4
** 2 + z1
** 2 - z4
** 2)])x
= solve
(a1
, b1
)print('外接球心坐標為','('+str(round(x
[0],3))+','+str(round(x
[1],3))+','+str(round(x
[2],3))+')')R
=math
.sqrt
((x1
-x
[0])**2+(y1
-x
[1])**2+(z1
-x
[2])**2)print('外接球半徑',round(R
,3))area
=4*3.14*R
**2print('外接球表面積',round(area
,4))V
=(3/4)*3.14*R
**3print('外接球體積',round(V
,4))except:print('輸入的點不能構成四面體')def main():x1
= float(input('輸入第一個點的x值:'))y1
= float(input('輸入第一個點的y值:'))z1
= float(input('輸入第一個點的z值:'))x2
= float(input('輸入第二個點的x值:'))y2
= float(input('輸入第二個點的y值:'))z2
= float(input('輸入第二個點的z值:'))x3
= float(input('輸入第三個點的x值:'))y3
= float(input('輸入第三個點的y值:'))z3
= float(input('輸入第三個點的z值:'))x4
= float(input('輸入第四個點的x值:'))y4
= float(input('輸入第四個點的y值:'))z4
= float(input('輸入第四個點的z值:'))nball
(x1
,y1
,z1
,x2
,y2
,z2
,x3
,y3
,z3
,x4
,y4
,z4
)print('+'*14)wball
(x1
, y1
, z1
, x2
, y2
, z2
, x3
, y3
, z3
, x4
, y4
, z4
)if __name__
=="__main__":main
()
運行結果
以(6,0,3),(2,3,5),(3,4,-1),(0,0,0)四個點為測試用例.。
結果如下:
輸入第一個點的x值:0
輸入第一個點的y值:0
輸入第一個點的z值:0
輸入第二個點的x值:3
輸入第二個點的y值:4
輸入第二個點的z值:-1
輸入第三個點的x值:2
輸入第三個點的y值:3
輸入第三個點的z值:5
輸入第四個點的x值:6
輸入第四個點的y值:0
輸入第四個點的z值:3
六條邊長 [5.0990195135927845, 6.164414002968976, 6.708203932499369, 5.385164807134504, 6.4031242374328485, 6.164414002968976]
四面體表面積 60.609
四面體體積 23.5
內切球半徑 1.163
內切球表面積 16.994
內切球體積 6.589
++++++++++++++
化簡后的三元一次方程為:
-6.0x-8.0y+2.0z=-26.0
-4.0x-6.0y-10.0z=-38.0
-12.0x+0.0y-6.0z=-45.0
外接球心坐標為 (2.883,1.521,1.734)
外接球半徑 3.692
外接球表面積 171.2274
外接球體積 118.5404
總結
以上是生活随笔為你收集整理的根据空间中不共面的四个点坐标,求构成任意四面体的内外球的全部內容,希望文章能夠幫你解決所遇到的問題。
如果覺得生活随笔網站內容還不錯,歡迎將生活随笔推薦給好友。