将列表转换为序列以创建一个sympy多边形

3
我希望能够将一组点转换为sympy多边形。文档表示需要使用一个点序列,但我不知道如何进行转换。请注意,文本中包含HTML标签,请务必保留原有的格式。
from sympy import Point2D, Polygon

# this works
p1 = Polygon(Point2D(0,0), Point2D(1,0), Point2D(1,1), Point2D(0,1))
print(p1.area)

# this fails at the Polygon call
points=[]
points.append(Point2D(0,0))
points.append(Point2D(0,1))
points.append(Point2D(1,1))
points.append(Point2D(1,0))
t = tuple(points)
p = Polygon(t)

当出现故障时,我会得到这个。
Traceback (most recent call last):
  File "t_polygon.py", line 14, in <module>
    p = Polygon(t)
  File "C:\Program Files (x86)\Python\Lib\site-packages\sympy\geometry\polygon.py", line 126, in __new__
    vertices = [Point(a, dim=2, **kwargs) for a in args]
  File "C:\Program Files (x86)\Python\Lib\site-packages\sympy\geometry\polygon.py", line 126, in <listcomp>
    vertices = [Point(a, dim=2, **kwargs) for a in args]
  File "C:\Program Files (x86)\Python\Lib\site-packages\sympy\geometry\point.py", line 157, in __new__
    raise ValueError('Nonzero coordinates cannot be removed.')
ValueError: Nonzero coordinates cannot be removed.

2
Try p = Polygon(*t) - 7stud
2
是的!我也可以跳过对 tuple() 的调用,直接使用 p = Polygon(*points) - ColonelFazackerley
1个回答

7

不要这样写:

t = tuple(points)
p = Polygon(t)

你需要写:

t = tuple(points)
p = Polygon(*t)  

我不知道 * 是解包操作符。现在我更聪明了。 - ColonelFazackerley

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接