Я использую пакет Безье (https://github.com/dhermes/bezier) для создания CurvedPolygon из кривых Безье. Теперь я хочу пересечь свой CurvedPolygon с другим многоугольником, но пока не могу понять, как сделать это пересечение.
Может быть, есть другой способ, поэтому я также сформулирую свою конечную цель. Который должен рассчитать (только часть) площадь CurvedPolygon. Как область слева от отметки 0,4 на следующей диаграмме (= 0,08):
import bezier
import numpy as np
def line_to(frm, to) -> bezier.Curve:
nodes = np.array([
[frm[0], to[0]],
[frm[1], to[1]]
])
bezier_segment = bezier.Curve(nodes, 1)
return bezier_segment
def main():
segments = []
segments.append(line_to((0, 0), (1, 1)))
segments.append(line_to((1, 1), (1, 0)))
segments.append(line_to((1, 0), (0, 0)))
poly = bezier.CurvedPolygon(*segments)
print(abs(poly.area))
segments2 = []
segments2.append(line_to((0.4, 0), (0.4, 1)))
segments2.append(line_to((0.4, 1), (1, 1)))
segments2.append(line_to((1, 1), (1, 0)))
segments2.append(line_to((1, 0), (0.4, 0)))
poly2 = bezier.CurvedPolygon(*segments2)
res = poly.intersect(poly2) # <= this does not work
print(res.area)
if __name__ == '__main__':
main()
Я действительно мог бы использовать некоторые идеи?
Я уже пытался отработать пересечение с линией 0,4, чтобы я мог пропустить сегменты CurvedPolygon, которые мне не нужны. Это не сработало из-за сложных пересечений кривых.
edges = list(edge._nodes for edge in curved_polygon._edges)
# skip unwanted segments
area = _triangle_helpers.compute_area(tuple(edges))