海伦公式:


四面体体积公式

六条边分别为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,b,c,a1,b1,c1a = 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)#a的对边b1 = math.sqrt((x2 - x4) ** 2 + (y2 - y4) ** 2 + (z2 - z4) ** 2)#b的对边c1 = math.sqrt((x2 - x3) ** 2 + (y2 - y3) ** 2 + (z2 - z3) ** 2)#c的对边print('六条边长',[a,b,c,a1,b1,c1])#根据海伦公式求四面体各个面的面积,分别为s1,s2,s3,s4#a1b1c1边构成s1,abc1边构成s2,bca1边构成s3,acb1边构成s4p1 = round((a1 + b1 + c1) / 2, 3)  # 海伦公式的p值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))#a,b,c,a1,b1,c1,其中a与a1,b与b1,c与c1互为对边,那么有三棱锥(四面体)的体积公式为:#V=1/12sqrt(4a**2b**2c**2-a**2D**2-b**2E**2-c**2F**2+DEF),sqrt表示开根号,a**2表示平方#D=b**2+c**2-a1**2,E=a**2+c**2-b1**2, F=a**2+b**2-c1**2D = 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))# 根据等体积法公式1/3*RS=V,求得内切球的半径nR = (3*V)/Sprint('内切球半径',round(nR,3))narea=4*3.14*nR**2#球体的表面积V=(4/3)*3.14*nR**3#球体的体积print('内切球表面积',round(narea,3))print('内切球体积',round(V,3))except:print('输入的点不能构成四面体')
def wball(x1,y1,z1,x2,y2,z2,x3,y3,z3,x4,y4,z4):#四面体的四个顶点在最小外接球的球面上,因此假设球心为(x,y,z),四个顶点到球心的距离相等,联立四条方程,化简为三元一次方程try:#化简后,形如:-6.0x-8.0y+2.0z=-26.0', '-4.0x-6.0y-10.0z=-38.0', '-12.0x+0.0y-6.0z=-45.0'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**2#球体的表面积print('外接球表面积',round(area,4))V=(3/4)*3.14*R**3#球体的体积print('外接球体积',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

根据空间中不共面的四个点坐标,求构成任意四面体的内外球相关推荐

  1. 已知空间中的三点 求三角形面积_【气宇轩昂】解三角形最值问题的四大模型尤其是第四种模型,简直不要太赞哦!!!...

    点击上方蓝色字体"高中数学王晖"关注王晖老师,免费获取各种知识干货和学习经验~~~您的点赞转发是对老师的最大鼓舞~~~ 距高考还有262天 1 三角函数有界性 在三角函数中,正弦函 ...

  2. 嵌入式Linux设备驱动程序:用户空间中的设备驱动程序

    嵌入式Linux设备驱动程序:用户空间中的设备驱动程序 Embedded Linux device drivers: Device drivers in user space Interfacing ...

  3. 使用脑电图慢皮层电位重建3D空间中的手,肘和肩的实际和想象的轨迹

    导读 从神经活动中解码想象运动的运动学的能力对于开发可以帮助行动不便的人的假肢设备至关重要.当前采用脑电图(EEG)等无创记录方法解码实际和想象的手运动轨迹来控制神经运动假体,通常通过应用多维线性回归 ...

  4. python log日志_Python中logging日志的四个等级和使用

    1. logging日志的介绍 在现实生活中,记录日志非常重要,比如:银行转账时会有转账记录:飞机飞行过程中,会有个黑盒子(飞行数据记录器)记录着飞机的飞行过程,那在咱们python程序中想要记录程序 ...

  5. 在 C# 中生成代码的四种方式——包括.NET 5中的Source Generators

    Microsoft在最新的C#版本中引入了Source Generator.这是一项新功能,可以让我们在代码编译时生成源代码.在本文中,我将介绍四种C#中的代码生成方式,以简化我们的日常工作.然后,您 ...

  6. 在3D空间中绘制四边形

    在3D空间中绘制四边形 四边形 GL_QUADS OpenGL的GL_QUADS图元用于绘制四边形,它根据每四个顶点绘制一个四边形. 注意,在使用四边形时,必需记住一个重要规则:一个四边形的四个角必须 ...

  7. 关于如何在空间中建立直角坐标系

    关于如何在空间中建立直角坐标系 前言:以前数学没学好,给现在埋了很多坑,现在来补一下数学基础,编写此文方便以后复习 空间直角坐标系的定义:空间任意选定一点O,过点O作三条互相垂直的数轴Ox,Oy,Oz ...

  8. 【Scikit-Learn 中文文档】四十:数据集加载工具 - 用户指南 | ApacheCN

    中文文档: http://sklearn.apachecn.org/cn/stable/datasets/index.html 英文文档: http://sklearn.apachecn.org/en ...

  9. 在Qt中使用OpenGL(四)

    前言 在Qt中使用OpenGL(一) 在Qt中使用OpenGL(二) 在Qt中使用OpenGL(三) 在之前的文章中,我们通过一个最简单的例子完成了在Qt中使用OpenGL绘图的全过程,然后又使用了纹 ...

最新文章

  1. Django04-2: ORM关系表\字段补充
  2. 5004. boost 源码编译vs2019
  3. 从MVC到前后端分离(REST-个人也认为是目前比较流行和比较好的方式)
  4. bzoj 1798 5039: [Jsoi2014]序列维护(线段树)
  5. [轉]winrar的命令行
  6. 牛逼!9种不同的方法帮助你提高国内访问Github的速度到2MB/s以上...
  7. 大一计算机理论总结,大一计算机理论基础总结论文.doc
  8. [kuangbin带你飞]专题一 简单搜索 - H - Pots
  9. java.lang.IllegalStateException: Max number of active transactions reached:50
  10. 【MIT 6.S081】实验四:traps (实验暂停)
  11. 揭秘淘宝286亿海量图片存储与处理架构
  12. html所有标签大全wps文件,html所有标签及其作用说明.wps
  13. Android 进阶——性能优化之借助adb shell ps /top 指令详细分析进程
  14. python3图片文字识别
  15. 关于web出现此问题:index:25 Uncaught ReferenceError: delFruit is not defined at HTMLImageElement.onclick
  16. Javascript数组部分
  17. RSS Can:将网站信息流转换为 RSS 订阅源(三)
  18. 在win10上安装oracle10g
  19. 解放双手,Windows Admin Center简化服务器管理
  20. 科幻电影是人机与艺术融合的智能系统

热门文章

  1. RecyclerView与ViewPager2
  2. NOI 4.5 动态规划 1980: 陪审团的人选
  3. 阿里插件机制android,Android插件 - 阿里規約 Alibaba Java Coding Guidelines
  4. 人工智能、机器人、编程啥关系?(科普)
  5. ps2021直装版|ps2021中文直装版 v22.0.0.35附安装教程
  6. 移动端GPGPU 架构
  7. Python-Flask入门,静态文件、页面跳转、错误信息、动态网页模板
  8. linux安装宝塔面板命令大全
  9. iPhone手机史上最全的扫盲帖【越狱,解锁,激活,Cydia,基带,裸机】
  10. 经典的卷积网络架构(二)——GoogLeNet [inception v1] 详解