完整代码和注释如下

import math#引入math模块 计算角度用

class point(object):#定义空间点类

"""docstring for point"""

def __init__(self,x,y,z,name):

self.x = x

self.y = y

self.z = z

self.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]#向量AB

AC=[C.x-A.x,C.y-A.y,C.z-A.z]#向量AC

B1,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-degree

return 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求平面n个两两间距离_任意两平面求夹角|Python练习系列[11]相关推荐

  1. 求两条轨迹间的hausdorff距离_高中数学:求轨迹方程的几种常用方法

    由已知条件求动点轨迹方程是解析几何的基本问题之一,也是解析几何的重点.轨迹方程的常用方法可归纳为以下四种. 一.普通法 例1. 求与两定点距离的比为1:2的点的轨迹方程. 分析:设动点为P,由题意,则 ...

  2. 线性代数中两个向量相乘_加两个向量| Python的线性代数

    线性代数中两个向量相乘 Prerequisite: Linear Algebra | Defining a Vector 先决条件: 线性代数| 定义向量 In the python code, we ...

  3. python输入数字比大小_Python练习实例47 | 比较任意两个数字的大小

    比较任意两个数字的大小,这个问题相对来说很简单,很多人在学习if条件语句的时候,都会拿这个问题来练手. 我们今天不来特别难的内容,也来拿这个问题练练手吧! 小黄人.jpg 下面请看代码: # 两个数字 ...

  4. word如何调整字间距离_大篇幅文字如何排版才能赏心悦目?

    盆友们是不是经常头疼字数多的文章不知道怎么排版, 担心自己精心撰写的文章粉丝读一半就关掉了. 如何能让读者读起来更爽,又不用使用复杂的排版技巧呢?这其中可是大有门道滴! 今天三儿就教你如何用基础工具来 ...

  5. python接口自动化测试框架实战从设计到开发_【B0753】[java视频教程]Python接口自动化测试框架设计到开发完整版视频教程 it教程...

    Java视频教程名称:Python接口自动化测试框架设计到开发完整版视频教程   java自学网[javazx.com]  Python视频教程   it教程 Java自学网收集整理 java论坛&q ...

  6. python怎么安装打开文件不存在怎么办呢_如果文件不存在,Python中的open()不会创建文件...

    16 个答案: 答案 0 :(得分:712) 您应该open使用w+模式: file = open('myfile.dat', 'w+') 答案 1 :(得分:112) 以下方法的优点是,即使在路上引 ...

  7. unity3d 求两个点长度_三年级上册求组合图形周长专项练习,附答案

    周长是指封闭图形一周的长度. 先画图,再计算. 数学解题方法:平移法和等量代换法. 三年级上册数学第七单元<认识四边形>三年级上册数学第七单元<长方形和正方形的特点和关系> 三 ...

  8. python合并两个有序列表_合并两个有序链表(Python3)

    提出问题:将两个有序链表合并为一个新的有序链表并返回.新链表是通过拼接给定的两个链表的所有节点组成的. 示例: 输入:1->2->4, 1->3->4 输出:1->1-& ...

  9. python 将两幅图拼接_清华王教授典藏的python电子书,整整10个G拿去不谢

    终于拿到!清华王教授典藏的电子书,整整10个G! 兄弟,毫无套路! 无偿获取方式: 1.点赞+评论 2.关注小编,私信"Python"(点开头像就能看到私信按钮啦). Python ...

  10. python装饰器两层和三层_我终于弄懂了Python的装饰器(三)

    此系列文档: 三.装饰器应该在何时发挥作用? 现在有个大问题: 我可以使用装饰器做什么? 装饰器看起来很酷而且功能强大,但是展示一个实际的例子会更清晰. 使用的场景有1000种可能性.但是经典用法: ...

最新文章

  1. Windows Server 2012 文件服务器群集
  2. 个人博客网站的设计与实现_新手建立个人博客网站后如何提高回访率?
  3. Bash Cookbook 学习笔记 【中级】
  4. ibm收购red hat_IBM将收购Red Hat:面向Java的初衷
  5. 【渝粤题库】陕西师范大学202961 教育社会学 作业(高起本、专升本)
  6. 悄悄地进村,打枪的不要——KyuuBackground(原 ItaBackgroundKyuu)改造完成
  7. Ajax动态滚动加载数据
  8. 微型计算机上的射箭成为什么,《说文解字》第429课:“谢”字里为什么有一个“射箭”的“射”...
  9. 余沧海没有自知之明?
  10. W7系统dns辅服务器异常,win7dns服务器异常原因及解决方法
  11. 【Lintcode】1132. Valid Triangle Number
  12. 抑郁症可以学计算机吗,AI能从人的话语中察觉到抑郁症吗?目前还为时过早
  13. 28BYJ-48步进电机
  14. 用Python制作生日蛋糕、生日快乐,生日祝福代码
  15. 我他妈的怎么成了酷抠族!
  16. 前端常用js方法工具封装
  17. 【LeetCode】1427、字符串的左右移
  18. 华为项目管理的精髓干货!可收藏
  19. Processing编程入门-02——添加图片 小游戏
  20. Android NNAPI - Paddle - TensorFlow - PyTorch ArgMax and ArgMin 的定义与计算过程

热门文章

  1. windows10 将user用户名目录修改为英文
  2. 地图编辑器怎样炼成的
  3. 网络传输的七层协议(包括tcp协议和udp协议的区别)
  4. 浅析《数据安全能力成熟度模型》
  5. 计算机组成原理 学后感,【计算机组成原理实验心得体会】_计算机组成原理实验心得_计算机组成原理实验感想...
  6. 2010.3.13郊野公园小记,以及参观托驼峰航线纪念碑
  7. SourceTree拉取代码出现错误
  8. 至强服务器性能排行,至强cpu天梯图,至强服务器cpu排行-
  9. android系统存储空间不足怎么办,手机内存不足怎么办?手机内存不足如何清理?...
  10. 处理9path图片边缘的小黑点