代码演示视频

完整代码和注释如下

import math#引入math模块 计算角度用
class point(object):#定义空间点类"""docstring for point"""def __init__(self,x,y,z,name):self.x = xself.y = yself.z = zself.name = name
class plane(object):#定义平面类"""docstring for plane"""def __init__(self, A,B,C,name):self.points=[A,B,C]#一个平面三个点self.points_name=[A.name,B.name,C.name]#点的名字self.name = name#平面的名字self.n=[]#平面的法向量def isplane(self):#判断这三个点是否能构成平面coors=[[],[],[]]#三个点的xyz坐标分别放在同一个列表用来比较for _point in self.points:#对于每个点coors[0].append(_point.x)coors[1].append(_point.y)coors[2].append(_point.z)for coor in coors:if coor[0]==coor[1]==coor[2]:#如果三个点的x或y或z坐标相等 则不能构成平面return print('Points:',*self.points_name,'cannot form a plane')def normal(self):#获得该平面的法向量self.isplane()#获得该平面的法向量前提是能构成平面A,B,C=self.points#对应三个点AB=[B.x-A.x,B.y-A.y,B.z-A.z]#向量ABAC=[C.x-A.x,C.y-A.y,C.z-A.z]#向量ACB1,B2,B3=AB#向量AB的xyz坐标C1,C2,C3=AC#向量AC的xyz坐标self.n=[B2*C3-C2*B3,B3*C1-C3*B1,B1*C2-C1*B2]#已知该平面的两个向量,求该平面的法向量的叉乘公式def angle(self,P2):#两个平面的夹角x1,y1,z1=self.n#该平面的法向量的xyz坐标x2,y2,z2=P2.n#另一个平面的法向量的xyz坐标cosθ=((x1*x2)+(y1*y2)+(z1*z2))/(((x1**2+y1**2+z1**2)**0.5)*((x2**2+y2**2+z2**2)**0.5))#平面向量的二面角公式degree=math.degrees(math.acos(cosθ))if degree>90:#二面角∈[0°,180°] 但两个平面的夹角∈[0°,90°]degree=180-degreereturn print('平面',self.name,P2.name,'的夹角为'+str(round(degree,5))+'°')#round(数值,四舍五入位数) math.degrees(弧度)将弧度转换为角度 math.acos(数值)返回该数值的反余弦弧度值#测试
print('-'*25)
A=point(0,0,1,'A')#六个点
B=point(1,0,1,'B')
C=point(1,1,0,'C')
P1=plane(A,B,C,'P1')#p1平面
D=point(0,1,1,'D')
E=point(1,1,1,'E')
F=point(0.5,0,0,'F')
P2=plane(D,E,F,'P2')#p2平面
P1.normal()#求平面p1 p2的法向量
P2.normal()
P1.angle(P2)#求平面p1 p2的夹角print('-'*25)
G=point(2,0,0,'G')#六个点
H=point(0,0,0,'H')
I=point(0,3,3**0.5,'I')
P3=plane(G,H,I,'P3')#p3平面
J=point(2/3,4/3,0,'J')
K=point(0,0,0,'K')
L=point(0,3,3**0.5,'L')
P4=plane(J,K,L,'P4')#p4平面
P3.normal()#分别求平面p3 p4的法向量
P4.normal()
P3.angle(P4)#求平面p3 p4的夹角print('-'*25)
M=point(0,1,0,'M')#六个点
N=point(0,0,0,'N')
O=point(1,1,1,'O')
P5=plane(M,N,O,'P5')#p1平面
Q=point(0,0,2,'Q')
R=point(0,0,0,'R')
S=point(1,1,1,'S')
P6=plane(Q,R,S,'P6')#p2平面
P5.normal()#求平面p1 p2的法向量
P6.normal()
P5.angle(P6)#求平面p1 p2的夹角print('-'*25)
T=point(12.6,-1,63,'T')#六个点
U=point(0,7,8,'U')
V=point(11,9,83.2,'V')
P7=plane(T,U,V,'P7')#p1平面
W=point(45,2,13,'W')
X=point(9,10,-56,'X')
Y=point(0.5,-7,1,'Y')
P8=plane(W,X,Y,'P8')#p2平面
P7.normal()#求平面p1 p2的法向量
P8.normal()
P7.angle(P8)#求平面p1 p2的夹角

任意两平面求夹角|Python练习系列[11]相关推荐

  1. python四叶玫瑰数,任意位数自幂数寻找|Python练习系列[4]

    自幂数是指一个n位数,它的每个位上的数字的n次幂之和等于它本身 自幂数包括:独身数.水仙花数.四叶玫瑰数.五角星数.六合数.北斗七星数.八仙数.九九重阳数.十全十美数 任意位数自幂数寻找完整代码和注释 ...

  2. python打印圆形_任意空实心圆形打印|Python练习系列[8]

    练习内容:空实心圆形 勾股定理 完整代码和注释如下 def circle(r): #空心圆 hollow_quarter_circle_rd=[[' 'for x in range(r*2+1)]fo ...

  3. Python 计算任意两向量之间的夹角

    如图所示,我们要计算任意两个向量之间的夹角. (图中的坐标数字是估计值,随手给定) python代码如下 import math AB = [1,-3,5,-1] CD = [4,1,4.5,4.5] ...

  4. Python编程基础:已知三角形的两边长及其夹角,求第三边长

    代码如下: import matha = float(input("输入三角形的第一条边长:")) b = float(input("输入三角形的第二条边长:" ...

  5. python绘制四边形_python shapely.geometry.polygon任意两个四边形的IOU计算实例

    在目标检测中一个很重要的问题就是NMS及IOU计算,而一般所说的目标检测检测的box是规则矩形框,计算IOU也非常简单,有两种方法: 1. 两个矩形的宽之和减去组合后的矩形的宽就是重叠矩形的宽,同比重 ...

  6. python图片截取斜四边形_python shapely.geometry.polygon任意两个四边形的IOU计算实例...

    在目标检测中一个很重要的问题就是NMS及IOU计算,而一般所说的目标检测检测的box是规则矩形框,计算IOU也非常简单,有两种方法: 1. 两个矩形的宽之和减去组合后的矩形的宽就是重叠矩形的宽,同比重 ...

  7. python中geometry_python shapely.geometry.polygon任意两个四边形的IOU计算实例

    在目标检测中一个很重要的问题就是NMS及IOU计算,而一般所说的目标检测检测的box是规则矩形框,计算IOU也非常简单,有两种方法: 1. 两个矩形的宽之和减去组合后的矩形的宽就是重叠矩形的宽,同比重 ...

  8. 两个向量之间的夹角公式_Python 计算任意两向量之间的夹角方法

    如图所示,我们要计算任意两个向量之间的夹角. (图中的坐标数字是估计值,随手给定) python代码如下 import math AB = [1,-3,5,-1] CD = [4,1,4.5,4.5] ...

  9. 点积应用-求两个向量夹角

    之前,由点积求两条直线的夹角,只知道会用,不知道原量,今天看计算机图形学,才知道其原量,待记录如下: 点积最重要的应用时计算两个向量的夹角,或者两条直线的夹角.图给出了二维的情况,其中向量b和向量c与 ...

最新文章

  1. [转]Python 命令行参数和getopt模块详解
  2. Tomcat8配置tomcat-users.xml配置
  3. 安卓高手之路之PackageManagerservice(二)
  4. 一种在网络层清理机器假死时TCP连接的方案介绍
  5. Leetcode 剑指 Offer 40. 最小的k个数 (每日一题 20210825)
  6. 计算机网络管理考核办法,开滦医院计算机网络管理考核细则
  7. SuperMap注册流程记录
  8. SAP UI5 未来发展的趋势之一:拥抱 TypeScript
  9. NoSQL和传统数据库的区别
  10. 在JS方法中返回多个值的三种方法
  11. HDU1106 排序【字符串+整数+排序】
  12. opencv 多边形近似物体形状
  13. windows下python访问ipv6报错
  14. date类型在日期增加或者减少几天
  15. 第5章第16节:案例:制作一份漂亮的翻页动画 [PowerPoint精美幻灯片实战教程]
  16. 未明学院:12个惊艳的数据可视化经典案例
  17. nn.Squential与nn.ModuleList区别
  18. 第四章第九节数据资产盘点-数据资产目录分类
  19. 视频工厂分享vlog拍摄技巧
  20. 01背包问题,多重背包问题-分组背包问题-完全背包问题-总结-内含4种经典背包问题

热门文章

  1. 前端性能优化之优化图片
  2. 【小白笔记】常见网页访问状态码及网页请求
  3. 一个列子演示java中软引用的回收时机
  4. 有传言任天堂可能会很快推出N64 Classic Mini
  5. mesh 协调器 路由器_双模网络协调器、双模路由器、双模mesh组网系统及其方法与流程...
  6. android github轮播图,Android使用开源框架ANDROID-IMAGE-INDICATOR实现图片轮播部署
  7. See You Again
  8. B2C商城APP开发方案及流程
  9. bzoj4864 [BeiJing 2017 Wc]神秘物质
  10. 鸟哥的Linux私房菜学习心得-基础操作