日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 编程语言 > python >内容正文

python

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

發布時間:2023/12/9 python 31 豆豆
生活随笔 收集整理的這篇文章主要介紹了 任意两平面求夹角|Python练习系列[11] 小編覺得挺不錯的,現在分享給大家,幫大家做個參考.

代碼演示視頻

完整代碼和注釋如下

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]的全部內容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網站內容還不錯,歡迎將生活随笔推薦給好友。