предполагают, чтобы иметь два многоугольников p1 и p2, где p2 полностью находится внутри p1объединить две петли в питона
p1 = [(0, 10), (10, 10), (10, 0), (0, 0)]
p2 = [(2, 6), (6, 6), (6, 2), (2, 2)]
degree_of_contact = 0
xyarrays = [p1,p2]
p1_degree_of_contact = 0
for x,y in xyarrays[0]:
if point_inside_polygon(x,y,xyarrays[1]):
p1_degree_of_contact += 1
p2_degree_of_contact = 0
for x,y in xyarrays[1]:
if point_inside_polygon(x,y,xyarrays[0]):
p2_degree_of_contact += 1
degree_of_contact = p1_degree_of_contact + p2_degree_of_contact
где point_inside_polygon должен принимать решение, если точка находится внутри (True, False в противном случае) многоугольник, где poly - список пар (x, y), содержащий координаты вершин многоугольника. Алгоритм называется «Ray Casting метод
я хотел бы объединить в элегантный способ (линия кодирования сохранить) обе петли в одном
С Я думаю, что ваша работа уместна, взгляните на numpy, который встроил поддержку векторов и матриц. Есть хорошие трюки, которые вы можете сделать там (например, векторизованные циклы), которые написаны на C и очень быстрые. для скорости: есть тонны встроенных математических методов, которые должны облегчить вашу жизнь для таких проблемы. http://www.scipy.org/Tentative_NumPy_Tutorial – entropiece