# 求三维坐标系内面与面之间的夹角 # 给定bcd三点确定一个面 # 再给定一个点a,求abc面与bcd面组成的夹角 # cos夹角=(X*Y)/|X||Y| # X=ABxBC,Y=BCxCD 叉乘
import math
# 定义三维点类并定义运算方法
class Point3d:
def __init__(self, x, y, z):
self.x = x
self.y = y
self.z = z
# 叉乘
def Cross(A, B):
newvector = Point3d(A.y * B.z - A.z * B.y, A.x * B.z - A.z * B.x, A.x * B.y - A.y * B.x)
return newvector
# 点乘
def Dot(A, B):
result = A.x * B.x+ A.y * B.y+A.z * B.z
return result
# 求模长度
def Modle(A):
result = math.sqrt(A.x ** 2 + A.y ** 2 + A.z ** 2)
return result
# 向量
def Vector(A, B):
result = Point3d(B.x - A.x, B.y - A.y, B.z - A.z)
return result
# 夹叫余弦
def Thecos(A, B):
result = Dot(A, B)/(Modle(A)*Modle(B))
return result
b = Point3d(2, 4, 6)
c = Point3d(1, 5, 3)
d = Point3d(6, 8, 10)
a = Point3d(18, 7, -11)
AB = Vector(b, a)
BC = Vector(c, b)
CD = Vector(d, c)
X = Cross(AB, BC)
Y = Cross(BC, CD)
Thecos(X,Y)
print(Thecos(X, Y))