pymunk.autogeometry 模块

该模块包含自动生成几何图形的功能,例如从图像生成几何图形。

示例::

>>> import pymunk
>>> from pymunk.autogeometry import march_soft
>>> img = [
...     "  xx   ",
...     "  xx   ",
...     "  xx   ",
...     "  xx   ",
...     "  xx   ",
...     "  xxxxx",
...     "  xxxxx",
... ]
>>> def sample_func(point):
...     x = int(point[0])
...     y = int(point[1])
...     return 1 if img[y][x] == "x" else 0

>>> pl_set = march_soft(pymunk.BB(0,0,6,6), 7, 7, .5, sample_func)
>>> print(len(pl_set))
2

线段中的信息现在可用于创建几何体,例如,作为派芒克多边形或线段:

>>> s = pymunk.Space()
>>> for poly_line in pl_set:
...     for i in range(len(poly_line) - 1):
...         a = poly_line[i]
...         b = poly_line[i + 1]
...         segment = pymunk.Segment(s.static_body, a, b, 1)  
...         s.add(segment)
class pymunk.autogeometry.PolylineSet[源代码]

基类:Sequence[List[Vec2d]]

一组多段线。

主要用于智能交通系统 collect_segment() 函数生成几何图形时使用 march_soft()march_hard() 功能。

__init__() None[源代码]

初始化新的多段线集

collect_segment(v0: Tuple[float, float], v1: Tuple[float, float]) None[源代码]

将直线段添加到多段线集中。

线段将开始一条新的多段线,连接另外两条多段线,或者添加到现有多段线或循环现有多段线。这主要是用作直接从 march_soft()march_hard()

参数:
  • v0 ((float,float)) -- 线段起点

  • v1 ((float,float)) -- 线段末尾

pymunk.autogeometry.convex_decomposition(polyline: List[Tuple[float, float]] | List[Vec2d], tolerance: float) List[List[Vec2d]][源代码]

从一条多段线得到近似的凸分解。

返回与原始形状匹配且在公差范围内的凸面Shell线列表。

备注

如果输入是自相交的多边形,则输出可能会过于简化。

参数:
  • polyline ([(float,float)]) -- 要简化的多段线。

  • tolerance (float) -- 值越大,表示可以容忍的误差越大。

返回类型:

[(float,float)]

pymunk.autogeometry.is_closed(polyline: List[Tuple[float, float]] | List[Vec2d]) bool[源代码]

如果第一个顶点等于最后一个顶点,则返回True。

参数:

polyline ([(float,float)]) -- 要简化的多段线。

返回类型:

bool

pymunk.autogeometry.march_hard(bb: BB, x_samples: int, y_samples: int, threshold: float, sample_func: Callable[[Tuple[float, float]], float]) PolylineSet[源代码]

跟踪一个 aliased 图像沿特定阈值的曲线。

将使用采样函数和上下文获取给定数量的样本并将其分布在边界框区域中。

参数:
  • bb (BB) -- 要采样的区域的边界框

  • x_samples (int) -- X中的样本数

  • y_samples (int) -- Y中的样本数

  • threshold (float) -- 值越大,表示可以容忍的误差越大

  • sample_func (func(point: Tuple[float, float]) -> float) -- 将为分布在边界框区域中的x_Samples*y_Samples调用Sample函数,并应返回浮点数。

返回:

多段线使用找到的多段线进行设置。

pymunk.autogeometry.march_soft(bb: BB, x_samples: int, y_samples: int, threshold: float, sample_func: Callable[[Tuple[float, float]], float]) PolylineSet[源代码]

跟踪一个 anti-aliased 图像沿特定阈值的轮廓。

将使用采样函数和上下文获取给定数量的样本并将其分布在边界框区域中。

参数:
  • bb (BB) -- 要采样的区域的边界框

  • x_samples (int) -- X中的样本数

  • y_samples (int) -- Y中的样本数

  • threshold (float) -- 值越大,表示可以容忍的误差越大

  • sample_func (func(point: Tuple[float, float]) -> float) -- 将为分布在边界框区域中的x_Samples*y_Samples调用Sample函数,并应返回浮点数。

返回:

多段线使用找到的多段线进行设置。

pymunk.autogeometry.simplify_curves(polyline: List[Tuple[float, float]] | List[Vec2d], tolerance: float) List[Vec2d][源代码]

返回使用Douglas-Peucker算法简化的多段线的副本。

这在平滑或轻微弯曲的形状上效果很好,但在直边或角形形状上效果不佳。

参数:
  • polyline ([(float,float)]) -- 要简化的多段线。

  • tolerance (float) -- 值越大,表示可以容忍的误差越大。

返回类型:

[(float,float)]

pymunk.autogeometry.simplify_vertexes(polyline: List[Tuple[float, float]] | List[Vec2d], tolerance: float) List[Vec2d][源代码]

返回通过丢弃平坦顶点而简化的多段线的副本。

这在直边或角形形状上效果很好,但在平滑形状上效果不佳。

参数:
  • polyline ([(float,float)]) -- 要简化的多段线。

  • tolerance (float) -- 值越大,表示可以容忍的误差越大。

返回类型:

[(float,float)]

pymunk.autogeometry.to_convex_hull(polyline: List[Tuple[float, float]] | List[Vec2d], tolerance: float) List[Vec2d][源代码]

将多段线的凸包表示为循环多段线。

参数:
  • polyline ([(float,float)]) -- 要简化的多段线。

  • tolerance (float) -- 值越大,表示可以容忍的误差越大。

返回类型:

[(float,float)]