Rect2

使用浮点坐标的2D轴对齐边界框。

描述

Rect2内置Variant类型表示2D空间中的轴对齐矩形。它由其positionsize定义,即Vector2。它经常用于快速重叠测试(参见intersects())。虽然Rect2本身是轴对齐的,但它可以与Transform2D组合来表示旋转或倾斜的矩形。

对于整数坐标,使用Rect2i。与Rect2等效的3D是AABB

注意:不支持size的负值。对于负大小,大多数Rect2方法无法正常工作。使用abs()获取具有非负大小的等效Rect2

注意:在布尔上下文中,如果positionsize都为零(等于Vector2.ZERO),则Rect2的计算结果为false。否则,它总是计算为true

属性

Vector2

end

Vector2(0, 0)

Vector2

position

Vector2(0, 0)

Vector2

size

Vector2(0, 0)

构造函数

Rect2

Rect2()

Rect2

Rect2(from: Rect2)

Rect2

Rect2(from: Rect2i)

Rect2

Rect2(position: Vector2, size: Vector2)

Rect2

Rect2(x: float, y: float, width: float, height: float)

方法

Rect2

abs() const

bool

encloses(b: Rect2) const

Rect2

expand(to: Vector2) const

float

get_area() const

Vector2

get_center() const

Vector2

get_support(direction: Vector2) const

Rect2

grow(amount: float) const

Rect2

grow_individual(left: float, top: float, right: float, bottom: float) const

Rect2

grow_side(side: int, amount: float) const

bool

has_area() const

bool

has_point(point: Vector2) const

Rect2

intersection(b: Rect2) const

bool

intersects(b: Rect2, include_borders: bool = false) const

bool

is_equal_approx(rect: Rect2) const

bool

is_finite() const

Rect2

merge(b: Rect2) const

运算符

bool

operator !=(right: Rect2)

Rect2

operator *(right: Transform2D)

bool

operator ==(right: Rect2)


属性说明

Vector2 end = Vector2(0, 0) 🔗

终点。这通常是矩形的右下角,相当于位置+大小。设置此点会影响size


Vector2 position = Vector2(0, 0) 🔗

原点。这通常是矩形的左上角。


Vector2 size = Vector2(0, 0) 🔗

矩形的宽度和高度,从position开始。设置此值也会影响end点。

注意:建议将宽度和高度设置为非负值,因为i3D中的大多数方法都假设position是左上角,end是右下角。要获得具有非负大小的等效矩形,请使用abs()


构造函数说明

Rect2 Rect2() 🔗

构造一个Rect2,其positionsize设置为Vector2.ZERO


Rect2 Rect2(from: Rect2)

构造一个Rect2作为给定Rect2的副本。


Rect2 Rect2(from: Rect2i)

Rect2i构造一个Rect2


Rect2 Rect2(position: Vector2, size: Vector2)

通过positionsize构造Rect2


Rect2 Rect2(x: float, y: float, width: float, height: float)

通过将其position设置为(xy)和将其size设置为(widthheight)来构造Rect2


方法说明

Rect2 abs() const 🔗

返回一个与该矩形等效的 Rect2,其宽度和高度被修改为非负值,并且其 position 为矩形的左上角。

var rect = Rect2(25, 25, -100, -50)
var absolute = rect.abs() # absolute is Rect2(-75, -25, 100, 50)

注意:当size为负数时,建议使用此方法,因为i3D中的大多数其他方法都假定position为左上角,而end为右下角。


bool encloses(b: Rect2) const 🔗

如果此矩形完全包围b矩形,则返回true


Rect2 expand(to: Vector2) const 🔗

如有必要,返回此矩形的一个副本,该副本经过扩展,使其边缘与给定的 to 点对齐。

var rect = Rect2(0, 0, 5, 2)

rect = rect.expand(Vector2(10, 0)) # rect is Rect2(0, 0, 10, 2)
rect = rect.expand(Vector2(-5, 5)) # rect is Rect2(-5, 0, 15, 5)

float get_area() const 🔗

返回矩形的面积。这相当于size. x*size.y。另请参见has_area()


Vector2 get_center() const 🔗

返回矩形的中心点。这与位置+(size/2.0)相同。


Vector2 get_support(direction: Vector2) const 🔗

返回此矩形在给定方向上最远的顶点位置。此点在冲突检测算法中通常称为支撑点。


Rect2 grow(amount: float) const 🔗

返回此矩形在所有边上按给定的 amount 扩展后的副本。如果 amount 为负,则会缩小矩形。另请参阅 grow_individual()grow_side()

var a = Rect2(4, 4, 8, 8).grow(4) # a is Rect2(0, 0, 16, 16)
var b = Rect2(0, 0, 8, 4).grow(2) # b is Rect2(-2, -2, 12, 8)

Rect2 grow_individual(left: float, top: float, right: float, bottom: float) const 🔗

返回此矩形的副本,其lefttoprightbottom的边扩展给定的量。相反,负值缩小边。另请参阅grow()grow_side()


Rect2 grow_side(side: int, amount: float) const 🔗

返回此矩形的副本,其side扩展了给定的amount(参见Side常量)。相反,负amount缩小矩形。另请参见grow()grow_individual()


bool has_area() const 🔗

如果此矩形的宽度和高度为正,则返回true。另请参见get_area()


bool has_point(point: Vector2) const 🔗

如果矩形包含给定的point,则返回true。按照惯例,右边缘和下边缘的点不包括**。

注意:此方法对于sizeRect2不可靠。首先使用abs()获取有效矩形。


Rect2 intersection(b: Rect2) const 🔗

返回此矩形与 b 之间的交集。如果矩形不相交,则返回一个空的 Rect2

var rect1 = Rect2(0, 0, 5, 10)
var rect2 = Rect2(2, 0, 8, 4)

var a = rect1.intersection(rect2) # a is Rect2(2, 0, 3, 4)

注意:如果您只需要知道两个矩形是否重叠,请改用 intersects()


bool intersects(b: Rect2, include_borders: bool = false) const 🔗

如果此矩形与b矩形重叠,则返回true。两个矩形的边缘都被排除在外,除非include_borderstrue


bool is_equal_approx(rect: Rect2) const 🔗

如果此矩形和rect近似相等,则返回true,方法是在positionsize上调用Vector2.is_equal_approx()


bool is_finite() const 🔗

如果该矩形的值是有限的,则返回true,方法是在positionsize上调用Vector2.is_finite()


Rect2 merge(b: Rect2) const 🔗

返回一个Rect2,它将此矩形和b包围在边缘周围。另请参阅encloses()


运算符说明

bool operator !=(right: Rect2) 🔗

如果两个矩形的positionsize不相等,则返回true

注:由于浮点精度误差,考虑改用is_equal_approx(),这样更可靠。


Rect2 operator *(right: Transform2D) 🔗

假设变换基是正交的(即旋转/反射很好,缩放/倾斜不好),将Rect2与给定的Transform2D变换矩阵进行逆变换(相乘)。

rect*转换等价于transform. inverse()*rect。请参阅Transform2D.inverse()

用于通过仿射变换的逆变换(例如缩放)变换。可以使用affine_inverse()*rect代替。参见Transform2D.affine_inverse()


bool operator ==(right: Rect2) 🔗

如果矩形的positionsize分别完全相等,则返回true

注:由于浮点精度误差,考虑改用is_equal_approx(),这样更可靠。