如何从Sympy Polygon中提取坐标作为列表



在将给定多边形拆分为两个多边形后,我得到了一个Sympy多边形。我想知道如何提取上多边形或下多边形的坐标,作为像polycard一样的坐标列表。

from sympy import Polygon, Line
polycord=[(0, 0),
(100, 0),
(100, 300),
(0, 300),
(0, 0)]
T_sec= Polygon(*polycord)
t = T_sec.cut_section(Line((0, 200), slope=0))
upper_segment, lower_segment = t
poly_up=upper_segment
poly_up  # how to express this as a list like polycord

谢谢。

在这种情况下,您可以在多边形的顶点上调用tuple

from sympy import Polygon, Line
polycord = [(0, 0),
(100, 0),
(100, 300),
(0, 300),
(0, 0)]
T_sec = Polygon(*polycord)
upper_segment, lower_segment = T_sec.cut_section(Line((0, 200), slope=0))
uppercord = [tuple(v) for v in upper_segment.vertices]
# [(100, 200), (100, 300), (0, 300), (0, 200)]
lowercord = [tuple(v) for v in lower_segment.vertices]
# [(0, 0), (100, 0), (100, 200), (0, 200)]

请注意,在更一般的情况下,坐标可以是符号的(例如,包含分数(,也可以是3D的。

这里有一个更通用的方法:


from sympy import Polygon, Line, N
polycord = [(0, 0),
(100, 0),
(100, 300),
(0, 300),
(0, 0)]
T_sec = Polygon(*polycord)
upper_segment, lower_segment = T_sec.cut_section(Line((0, 200), slope=7))
uppercord = [tuple([N(vi) for vi in v]) for v in upper_segment.vertices]
lowercord = [tuple([N(vi) for vi in v]) for v in lower_segment.vertices]
# [(14.2857142857143, 300.0), (0, 300.0), (0, 200.0)]
# [(0, 0), (100.0, 0), (100.0, 300.0), (14.2857142857143, 300.0), (0, 200.0)]

最新更新