Rect2¶
使用浮点坐标的2D轴对齐边界框。
描述¶
Rect2内置Variant类型表示2D空间中的轴对齐矩形。它由其position和size定义,即Vector2。它经常用于快速重叠测试(参见intersects())。虽然Rect2本身是轴对齐的,但它可以与Transform2D组合来表示旋转或倾斜的矩形。
对于整数坐标,使用Rect2i。与Rect2等效的3D是AABB。
注意:不支持size的负值。对于负大小,大多数Rect2方法无法正常工作。使用abs()获取具有非负大小的等效Rect2。
注意:在布尔上下文中,如果position和size都为零(等于Vector2.ZERO),则Rect2的计算结果为false。否则,它总是计算为true。
属性¶
构造函数¶
方法¶
abs() const |
|
get_area() const |
|
get_center() const |
|
get_support(direction: Vector2) const |
|
grow_individual(left: float, top: float, right: float, bottom: float) const |
|
has_area() const |
|
intersection(b: Rect2) const |
|
intersects(b: Rect2, include_borders: bool = false) const |
|
is_equal_approx(rect: Rect2) const |
|
is_finite() const |
|
运算符¶
operator !=(right: Rect2) |
|
operator *(right: Transform2D) |
|
operator ==(right: Rect2) |
属性说明¶
终点。这通常是矩形的右下角,相当于位置+大小。设置此点会影响size。
Vector2 position = Vector2(0, 0) 🔗
原点。这通常是矩形的左上角。
Vector2 size = Vector2(0, 0) 🔗
矩形的宽度和高度,从position开始。设置此值也会影响end点。
注意:建议将宽度和高度设置为非负值,因为i3D中的大多数方法都假设position是左上角,end是右下角。要获得具有非负大小的等效矩形,请使用abs()。
构造函数说明¶
构造一个Rect2,其position和size设置为Vector2.ZERO。
构造一个Rect2作为给定Rect2的副本。
从Rect2i构造一个Rect2。
Rect2 Rect2(position: Vector2, size: Vector2)
通过position和size构造Rect2。
Rect2 Rect2(x: float, y: float, width: float, height: float)
方法说明¶
返回一个与该矩形等效的 Rect2,其宽度和高度被修改为非负值,并且其 position 为矩形的左上角。
var rect = Rect2(25, 25, -100, -50)
var absolute = rect.abs() # absolute is Rect2(-75, -25, 100, 50)
var rect = new 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)
var rect = new Rect2(0, 0, 5, 2);
rect = rect.Expand(new Vector2(10, 0)); // rect is Rect2(0, 0, 10, 2)
rect = rect.Expand(new Vector2(-5, 5)); // rect is Rect2(-5, 0, 15, 5)
返回矩形的面积。这相当于size. x*size.y。另请参见has_area()。
返回矩形的中心点。这与位置+(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)
var a = new Rect2(4, 4, 8, 8).Grow(4); // a is Rect2(0, 0, 16, 16)
var b = new 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 🔗
返回此矩形的副本,其left、top、right和bottom的边扩展给定的量。相反,负值缩小边。另请参阅grow()和grow_side()。
Rect2 grow_side(side: int, amount: float) const 🔗
返回此矩形的副本,其side扩展了给定的amount(参见Side常量)。相反,负amount缩小矩形。另请参见grow()和grow_individual()。
如果此矩形的宽度和高度为正,则返回true。另请参见get_area()。
bool has_point(point: Vector2) const 🔗
如果矩形包含给定的point,则返回true。按照惯例,右边缘和下边缘的点不包括**。
注意:此方法对于负size的Rect2不可靠。首先使用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)
var rect1 = new Rect2(0, 0, 5, 10);
var rect2 = new 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_borders是true。
bool is_equal_approx(rect: Rect2) const 🔗
如果此矩形和rect近似相等,则返回true,方法是在position和size上调用Vector2.is_equal_approx()。
如果该矩形的值是有限的,则返回true,方法是在position和size上调用Vector2.is_finite()。
返回一个Rect2,它将此矩形和b包围在边缘周围。另请参阅encloses()。
运算符说明¶
bool operator !=(right: Rect2) 🔗
如果两个矩形的position或size不相等,则返回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) 🔗
如果矩形的position和size分别完全相等,则返回true。
注:由于浮点精度误差,考虑改用is_equal_approx(),这样更可靠。