用Python,已知两条线段的顶点坐标,求两条线的夹角

图片说明

如图所示的两条线,求它们的夹角,小白不会,求解决!!!

#两条线段的夹角的计算
#向量思维
import math
import numpy as np

#得到向量的坐标以及向量的模长
class Point(object):
    def __init__(self, x1, y1, x2, y2):
        self.x1 = x1
        self.y1 = y1
        self.x2 = x2
        self.y2 = y2

    def vector(self):
        c = (self.x1 - self.x2, self.y1 - self.y2)
        return c

    def length(self):
        d = math.sqrt(pow((self.x1 - self.x2), 2) + pow((self.y1 - self.y2), 2))
        return d

#计算向量夹角
class Calculate(object):
    def __init__(self, x, y, m, n):
        self.x = x
        self.y = y
        self.m = m
        self.n = n

    def Vector_multiplication(self):
        self.mu = np.dot(self.x, self.y)
        return self.mu

    def Vector_model(self):
        self.de = self.m * self.n
        return self.de

    def cal(self):
        result = Calculate.Vector_multiplication(self) / Calculate.Vector_model(self)
        return result

if __name__ == '__main__':

    first_point = Point(1, 2, 3, 2)
    two_point = Point(3, 5, 4, 2)
    ca = Calculate(first_point.vector(), two_point.vector(), first_point.length(), two_point.length())
    print('两向量的夹角', ca.cal())

余弦定理
角度a = arc cos (a1*a2/|a1|*|a2|)

先算斜率 再把斜率转换为角度 之后分类讨论