如何与CurvedPolygon相交以计算相交面积

问题描述 投票:0回答:1

我正在使用贝塞尔曲线包(https://github.com/dhermes/bezier)从贝塞尔曲线创建CurvedPolygon。现在,我想将我的CurvedPolygon与另一个多边形相交,但到目前为止还不知道如何进行相交。

也许还有另一种方式,所以我也陈述了我的最终目标。这是要计算(仅部分)CurvedPolygon的面积。类似于下图中0.4标记的左侧区域(= 0.08):

enter image description here

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))
python bezier
1个回答
0
投票

似乎目前无法使用dhermes / bezier包将两个CurvedPolygon相交。

但是在我的用例中,可以遍历CurvedPolygon的节点,并使用specialize函数切出不需要的片段:

curve.specialize(start, end)

© www.soinside.com 2019 - 2024. All rights reserved.