Quad#

表示平面中的四边形数学形状(也称为“quadrilateral”或“tetragon”),定义为四个 Point 对象的序列 ul, ur, ll, lr(方便地称为左上、右上、左下、右下)。

Quad 可以作为文本搜索方法(Page.search_for())的结果获得,并且用于定义文本标记注解(参见例如 Page.add_squiggly_annot() 等方法),以及在几种绘制方法中(如 Page.draw_quad() / Shape.draw_quad(), Page.draw_oval()/ Shape.draw_quad())。

注意

  • 如果矩形的角通过旋转、缩放或平移 Matrix 进行变换,则结果 Quad 是矩形的(= 与矩形全等),即其所有角再次包含 90 度角。属性 Quad.is_rectangular 检查一个 Quad 是否可以被认为是此类操作的结果。

  • 这并非适用于所有矩阵:例如,剪切矩阵产生平行四边形,而不可逆矩阵产生“退化”的四边形,如三角形或直线。

  • 属性 Quad.rect 获取包含它的矩形。反之,矩形现在具有属性 Rect.quadIRect.quad 来获取它们各自的四边形版本。

方法 / 属性

简要描述

Quad.transform()

用矩阵变换

Quad.morph()

用点和矩阵变换

Quad.ul

左上角点

Quad.ur

右上角点

Quad.ll

左下角点

Quad.lr

右下角点

Quad.is_convex

如果 Quad 是凸集,则为 True

Quad.is_empty

如果 Quad 是空集,则为 True

Quad.is_rectangular

如果 Quad 与矩形全等,则为 True

Quad.rect

最小包含 Rect

Quad.width

最长宽度值

Quad.height

最长高度值

类 API

class Quad#
__init__(self)#
__init__(self, ul, ur, ll, lr)#
__init__(self, quad)#
__init__(self, sequence)#

重载构造函数:“ul”、“ur”、“ll”、“lr”代表 point_like 对象(四个角),“sequence”是包含四个 point_like 对象的 Python 序列。

如果指定了“quad”,构造函数会创建一个新的副本。

不带参数时,创建一个由 Point(0, 0) 的 4 个副本组成的 quad。

transform(matrix)#

通过使用矩阵变换每个角来修改四边形。

参数:

matrix (matrix_like) – 矩阵。

morph(fixpoint, matrix)#

(1.17.0 版新增) 使用 point_like 作为固定点,通过 matrix-like“变形”Quad。

参数:
返回:

一个新的 Quad(如果这是无限 Quad,则无操作)。

rect#

包含 Quad 的最小矩形,由下图中蓝色区域表示。

_images/img-quads.jpg
类型:

Rect

ul#

左上角点。

类型:

Point

ur#

右上角点。

类型:

Point

ll#

左下角点。

类型:

Point

lr#

右下角点。

类型:

Point

is_convex#
  • 1.16.1 版新增

检查 Quad 的任意两点,连接线上的所有点是否也属于 Quad。

_images/img-convexity.png
类型:

bool

is_empty#

如果包含面积为零,则为 True,这意味着至少有三个角在同一条线上。如果为 False,Quad 可能仍然是退化的或者根本不像四边形(三角形、平行四边形、梯形等)。

类型:

bool

is_rectangular#

如果所有角都是 90 度,则为 True。这意味着 Quad 是凸的且不为空。

类型:

bool

width#

顶部和底部最长边的长度。

类型:

float

height#

左侧和右侧最长边的长度。

类型:

float

备注#

此类遵循序列协议,因此也可以通过索引处理组件。另请参阅 在 PyMuPDF 中使用 Python 序列作为参数

代数和包含性检查#

从 v1.19.6 开始,Quad 可以像其他几何对象一样用于代数表达式——相应的限制已被解除。特别是,现在可以进行以下所有包含性检查组合

{Point | IRect | Rect | Quad} in {IRect | Rect | Quad}

请注意以下有趣的细节

对于矩形,只有其左上角点属于它。从 v1.19.0 开始,矩形被定义为“开放”,其底部和右侧边缘不属于它——包括相应的角。但对于 Quad,不存在“开放性”的概念,因此我们有以下有点令人惊讶的含义

>>> rect.br in rect
False
>>> # but:
>>> rect.br in rect.quad
True

本软件按“现状”提供,不提供任何明示或暗示的保证。本软件根据许可分发,未经许可条款明确授权,不得复制、修改或分发。请参考 artifex.com 的许可信息,或联系 Artifex Software Inc., 39 Mesa Street, Suite 108A, San Francisco CA 94129, United States 获取更多信息。