def feasibleVector(self,all_vectors,touching_edges):
     '''
     该段代码需要重构,过于复杂
     '''
     res_vector=[]
     # print("\nall_vectors:",all_vectors)
     for vector in all_vectors:
         feasible=True
         # print("\nvector:",vector,"\n")
         for touching in touching_edges:
             vector1=[]
             vector2=[]
             # 判断方向并进行转向
             if touching["stationary_start"]==True:
                 vector1=touching["vector1"]
             else:
                 vector1=[-touching["vector1"][0],-touching["vector1"][1]]
             if touching["orbiting_start"]==True:
                 vector2=touching["vector2"]
             else:
                 vector2=[-touching["vector2"][0],-touching["vector2"][1]]
             vector12_product=GeoFunc.crossProduct(vector1,vector2) # 叉积,大于0在左侧,小于0在右侧,等于0平行
             vector_vector1_product=GeoFunc.crossProduct(vector1,vector) # 叉积,大于0在左侧,小于0在右侧,等于0平行
             vector_vector2_product=GeoFunc.crossProduct(vector2,vector) # 叉积,大于0在左侧,小于0在右侧,等于0平行
             # 最后两种情况
             if touching["type"]==4 and (vector_vector1_product*vector12_product)<0:
                 feasible=False
             if touching["type"]==5 and (vector_vector2_product*(-vector12_product))>0:
                 feasible=False
             # 正常的情况处理
             if vector12_product>0:
                 if vector_vector1_product<0 and vector_vector2_product<0:
                     feasible=False
             if vector12_product<0:
                 if vector_vector1_product>0 and vector_vector2_product>0:
                     feasible=False
             # 平行情况,需要用原值逐一判断
             if vector12_product==0:
                 inter=GeoFunc.newLineInter(touching["edge1"],touching["edge2"])
                 if inter["geom_type"]=="LineString":
                     if inter["length"]>0.01:
                         # 如果有相交,则需要在左侧
                         if (touching["orbiting_start"]==True and vector_vector2_product<0) or (touching["orbiting_start"]==False and vector_vector2_product>0):
                             feasible=False
                 else:
                     # 如果方向相同,且转化直线也平行,则其不能够取a的方向
                     if touching["orbiting_start"]==True != touching["stationary_start"]==False and vector_vector1_product==0:
                         if touching["vector1"][0]*vector[0]>0: # 即方向相同
                             feasible=False
         if feasible==True:
             res_vector=vector
             break
     return res_vector
 def newLineInter(line1,line2):
     vec1=GeoFunc.lineToVec(line1)
     vec2=GeoFunc.lineToVec(line2)
     vec12_product=GeoFunc.crossProduct(vec1,vec2)
     Line1=LineString(line1)
     Line2=LineString(line2)
     inter={
         "length":0,
         "geom_type":None
     }
     # 只有平行才会有直线重叠
     if vec12_product==0:
         # copy避免影响原值
         new_line1=GeoFunc.copyPoly(line1)
         new_line2=GeoFunc.copyPoly(line2)
         if vec1[0]*vec2[0]<0 or vec1[1]*vec2[1]<0:
             new_line2=GeoFunc.reverseLine(new_line2)
         # 如果存在顶点相等,则选择其中一个
         if GeoFunc.almostEqual(new_line1[0],new_line2[0]) or GeoFunc.almostEqual(new_line1[1],new_line2[1]):
             inter["length"]=min(Line1.length,Line2.length)
             inter["geom_type"]='LineString'
             return inter
         # 排除只有顶点相交情况
         if GeoFunc.almostEqual(new_line1[0],new_line2[1]):
             inter["length"]=new_line2[1]
             inter["geom_type"]='Point'
             return inter
         if GeoFunc.almostEqual(new_line1[1],new_line2[0]):
             inter["length"]=new_line1[1]
             inter["geom_type"]='Point'
             return inter
         # 否则判断是否包含
         line1_contain_line2_pt0=GeoFunc.almostContain(new_line1,new_line2[0])
         line1_contain_line2_pt1=GeoFunc.almostContain(new_line1,new_line2[1])
         line2_contain_line1_pt0=GeoFunc.almostContain(new_line2,new_line1[0])
         line2_contain_line1_pt1=GeoFunc.almostContain(new_line2,new_line1[1])
         # Line1直接包含Line2
         if line1_contain_line2_pt0 and line1_contain_line2_pt1:
             inter["length"]=Line1.length
             inter["geom_type"]='LineString'
             return inter
         # Line2直接包含Line1
         if line1_contain_line2_pt0 and line1_contain_line2_pt1:
             inter["length"]=Line2.length
             inter["geom_type"]='LineString'
             return inter
         # 相互包含交点
         if line1_contain_line2_pt0 and line2_contain_line1_pt1:
             inter["length"]=LineString([line2[0],line1[1]]).length
             inter["geom_type"]='LineString'
             return inter
         if line1_contain_line2_pt1 and line2_contain_line1_pt0:
             inter["length"]=LineString([line2[1],line1[0]]).length
             inter["geom_type"]='LineString'
             return inter                
     return inter