【问题标题】:Using symbols in sympy with Polygon在 sympy 中使用 Polygon 中的符号
【发布时间】:2022-01-05 07:35:54
【问题描述】:

我正在尝试确定 pt 是否在多边形内。 pt 必须作为符号输入,因为它与代码的其他部分集成。但是,我意识到我无法评估结果。我有一个“NoneType”。我的代码是:

import numpy as np
from sympy import Symbol, Piecewise, lambdify, And, Ne
from sympy import Point, Polygon

x1, y1 = Symbol('x1'), Symbol('y1')
x2, y2 = Symbol('x2'), Symbol('y2')

xp, yp = Symbol('xp'), Symbol('yp')

p1, p2, p3, p4 = map(Point, [(0, 0), (5, 0), (5, 5), (0,5)])

poly = Polygon(p1, p2, p3, p4)

isEnclosed = poly.encloses_point(Point(xp, yp))
isi = lambdify([xp,yp], isEnclosed, "numpy")

xp_act = 2
yp_act = 1

is_act=isi(xp_act,yp_act)

print(is_act)

有人可以帮忙吗? 谢谢!

【问题讨论】:

  • 我认为lambidify 没有任何用处。但是,如果您想坚持下去,请显示 full error, with traceback!
  • poly.encloses_point(Point(xp, yp)) 返回None,它不会创建数学表达式来测试xp,yp 是否在多边形内。对于任意多边形,你不能只写一个简单的表达式。

标签: python sympy symbols


【解决方案1】:

您的isEnclosed,如@JohanCpoints out, isNone. Wrapping that in lambdify` 不会改变这一点。

In [30]: isEnclosed = poly.encloses_point(Point(xp, yp))
In [31]: isEnclosed
In [32]: isi = lambdify([xp,yp], isEnclosed, "numpy")
In [33]: isi(2,1)

help(isi) 显示:

_lambdifygenerated(xp, yp)
    Created with lambdify. Signature:
    
    func(xp, yp)
    
    Expression:
    
    None
    
    Source code:
    
    def _lambdifygenerated(xp, yp):
        return None

使用特定的数字对:

In [35]: isEnclosed = poly.encloses_point(Point(2,1))
In [36]: isEnclosed
Out[36]: True
In [37]: isEnclosed = poly.encloses_point(Point(2,100))
In [38]: isEnclosed
Out[38]: False

lambdify 不仅仅是一个包装器,它可以让你用数组“调用”一个 sympy 表达式。它尝试将表达式转换为 python/numpy 函数。它可以处理 numpy 等价的事情。这个poly 模块没有这样的等价物。

【讨论】:

  • 好的,我明白了。谢谢!
【解决方案2】:

如果您想要一个允许您输入 x 和 y 值并获得结果的函数,您可以这样做:

>>> p = Polygon((0, 0), (5, 0), (5, 5), (0,5))
>>> isin = lambda x, y: p.encloses_point((x,y))
>>> isin(1,1)
True
>>> isin(-1,-1)
False

这对你有用吗?

【讨论】:

  • 是的,它工作!我会看看我是否可以在代码中以某种方式使用这种形式的表达。谢谢!
猜你喜欢
  • 1970-01-01
  • 2012-08-23
  • 2019-10-07
  • 1970-01-01
  • 2016-01-06
  • 1970-01-01
  • 1970-01-01
  • 2015-01-26
  • 1970-01-01
相关资源
最近更新 更多