计算所有线两两之间的夹角(使用矩阵比使用for循环快的多)
def buildAngleMat(lines):
#计算所有线两两之间的夹角(使用矩阵比使用for循环快的多)
N = len(lines)
vector = np.empty((N, 2))
vector[:,0] = lines[:,2] - lines[:,0]
vector[:,1] = lines[:,3] - lines[:,1] #计算向量
LMat = np.sqrt(np.sum(vector**2, axis=1)).reshape(1, -1) #两列平方相加为一列开方
LMat = LMat.T.dot(LMat)
DMat = vector.dot(vector.T)
cosAngleMat = DMat/LMat
angle = np.abs(np.arccos(cosAngleMat)/np.pi*2) #归一化到0-1 越接近1越垂直
thr = 0.3
angleMat = 1 - (1-angle)/thr
angleMat[angleMat<0] = 0
angleMat = np.tril(angleMat, k=-1) #矩阵对角线以上和对角线以下是重复的。只保留上三角
算得一个矩阵,表示线两两之间的角度得分,得分越高越接近垂直