完整**和注釋如下
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:#對於每個點
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求兩個向量的夾角
import numpy as np x np.array 3,5 y np.array 4,2 兩個向量 lx np.sqrt x.dot x ly np.sqrt y.dot y 相當於勾股定理,求得斜線的長度 cos angle x.dot y lx ly 求得cos sita的值再反過來計算...
python 求兩個向量的順時針夾角
以上述舉例,要求 ob vec ob相對 oa vec oa的順時針夾角。注意 這裡使用影象座標系 1 定義求順時針角度的函式 import numpy as np defclockwise angle v1,v2 x1,y1 v1 x2,y2 v2 dot x1 x2 y1 y2 det x1 y...
C 求任意兩整數之和
2019.9.11 作業要求 求出任意兩整數之和 解決方案 1 using system 2using system.collections.generic 3using system.linq 4using system.text 5using system.threading.tasks 67 ...