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.quad
和IRect.quad
来获取它们各自的四边形版本。
方法 / 属性 |
简要描述 |
---|---|
用矩阵变换 |
|
用点和矩阵变换 |
|
左上角点 |
|
右上角点 |
|
左下角点 |
|
右下角点 |
|
如果 Quad 是凸集,则为 True |
|
如果 Quad 是空集,则为 True |
|
如果 Quad 与矩形全等,则为 True |
|
最小包含 Rect |
|
最长宽度值 |
|
最长高度值 |
类 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。
- 参数:
fixpoint (point_like) – 点。
matrix (matrix_like) – 矩阵。
- 返回:
一个新的 Quad(如果这是无限 Quad,则无操作)。
- is_convex#
1.16.1 版新增
检查 Quad 的任意两点,连接线上的所有点是否也属于 Quad。
- 类型:
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