Rect2
Прямоугольник с дробными координатами: границы, пересечения и размеры.
Rect2 — структура C# с начальной вершиной Position и полным размером Size. End = Position + Size. Стороны параллельны осям; тип не хранит поворот. Присваивание копирует значение, методы Abs(), Grow(), Expand() и Merge() возвращают новый прямоугольник.
HasPoint() включает Position и исключает End: Position.X <= x < End.X и Position.Y <= y < End.Y. Поэтому прямоугольники с общей стороной не делят одни и те же точки. Для положительных размеров Intersects() исключает простое касание, а Intersection() при касании возвращает default, не сохраняя место контакта. Expand(point) может поместить point на End; после этого HasPoint(point) всё ещё может вернуть false.
Используйте одну систему координат для прямоугольника и точек. Для отрицательного Size сначала вызовите Abs(); HasArea() требует положительных размеров. В C# нет преобразования этого типа в bool: выбирайте явную проверку под задачу.
Координаты и размеры имеют тип float. Перед геометрическими тестами обеспечьте конечность координат прямоугольника и входных точек: эти тесты не валидируют числа автоматически. IsFinite() проверяет NaN и бесконечности. Intersects(other, includeBorders: true) учитывает касание сторон и углов. Transform2D * Rect2 возвращает охватывающий прямоугольник преобразованных вершин; результат остаётся параллельным осям.
using Reckfell;
public static class RectangleExamples
{
public static bool Validate()
{
var bounds = new Rect2(0, 0, 2, 2);
var neighbor = new Rect2(2, 0, 2, 2);
bool excludesEnd = !bounds.HasPoint(bounds.End);
bool touches = bounds.Intersects(neighbor, includeBorders: true);
bool overlaps = bounds.Intersects(neighbor);
var cells = new Rect2I(0, 0, 2, 2);
var cell = new Vector2I(2, 1);
bool expandStillExcludes = !cells.Expand(cell).HasPoint(cell);
Rect2I withCell = cells.Merge(new Rect2I(cell, Vector2I.One));
return excludesEnd && touches && !overlaps
&& expandStillExcludes && withCell.HasPoint(cell)
&& withCell.Size == new Vector2I(3, 2);
}
}Объявления сверены с C# SDK 1.0.0. Раскройте имя, чтобы увидеть сигнатуры и описание.
Конструкторы4
Rect24 перегрузки
public Rect2(Vector2 position, Vector2 size);Создаёт прямоугольник из Position и полного Size, а не из двух углов. Значения сохраняются напрямую: отрицательные размеры не нормализуются. default(Rect2) имеет нулевую позицию и размер.
| Имя | Тип | По умолчанию |
|---|---|---|
position | Vector2 | — |
size | Vector2 | — |
positionНачальная вершина.
sizeПолная ширина и высота; не конечная вершина.
public Rect2(Vector2 position, float width, float height);Создаёт прямоугольник из Position и полного Size, а не из двух углов. Значения сохраняются напрямую: отрицательные размеры не нормализуются. default(Rect2) имеет нулевую позицию и размер.
| Имя | Тип | По умолчанию |
|---|---|---|
position | Vector2 | — |
width | float | — |
height | float | — |
positionНачальная вершина.
widthПолный размер по X.
heightПолный размер по Y.
public Rect2(float x, float y, Vector2 size);Создаёт прямоугольник из Position и полного Size, а не из двух углов. Значения сохраняются напрямую: отрицательные размеры не нормализуются. default(Rect2) имеет нулевую позицию и размер.
| Имя | Тип | По умолчанию |
|---|---|---|
x | float | — |
y | float | — |
size | Vector2 | — |
xX начальной вершины.
yY начальной вершины.
sizeПолная ширина и высота; не конечная вершина.
public Rect2(float x, float y, float width, float height);Создаёт прямоугольник из Position и полного Size, а не из двух углов. Значения сохраняются напрямую: отрицательные размеры не нормализуются. default(Rect2) имеет нулевую позицию и размер.
| Имя | Тип | По умолчанию |
|---|---|---|
x | float | — |
y | float | — |
width | float | — |
height | float | — |
xX начальной вершины.
yY начальной вершины.
widthПолный размер по X.
heightПолный размер по Y.
Свойства4
AreaСвойство
public float Area { get; }Вычисляет Size.X * Size.Y без нормализации. Две отрицательные компоненты тоже дают положительное произведение; для проверки положительных размеров используйте HasArea().
EndСвойство
public Vector2 End { get; set; }Конечная вершина Position + Size. Присваивание меняет Size на value - Position, не меняя Position. HasPoint() исключает правую и нижнюю границы с этими координатами.
PositionСвойство
public Vector2 Position { get; set; }Начальная вершина. Присваивание сохраняет Size и переносит End на ту же величину. Система координат выбирается вызывающим кодом.
SizeСвойство
public Vector2 Size { get; set; }Полная ширина и высота: End = Position + Size. Присваивание сохраняет Position. Отрицательные компоненты не исправляются; для нормализации используйте Abs().
Методы22
AbsRect2
public Rect2 Abs();Возвращает копию с Position = покомпонентный минимум прежних Position и End и Size = модуль прежнего Size. Нулевые компоненты остаются нулевыми. Исходное значение не меняется.
Rect2Копия с неотрицательными размерами.
Enclosesbool
public bool Encloses(Rect2 b);Проверяет полное включение Position и End прямоугольника b с включёнными границами. Равный прямоугольник включён; нулевой прямоугольник на End тоже может быть включён, хотя HasPoint(End) возвращает false. Это разные проверки. Используйте неотрицательные размеры обоих прямоугольников.
| Имя | Тип | По умолчанию |
|---|---|---|
b | Rect2 | — |
bВключаемый прямоугольник в той же системе координат.
booltrue, если все границы b находятся внутри включённых границ этого прямоугольника.
Equals2 перегрузки
public bool Equals(Rect2 other);Сравнивает Position и Size точно, без нормализации, допуска или проверки перекрытия. NaN-компонента не равна копии; +0 и -0 равны.
| Имя | Тип | По умолчанию |
|---|---|---|
other | Rect2 | — |
otherДругой прямоугольник для точного сравнения.
booltrue при точном равенстве.
public override bool Equals(object? obj);Сравнивает Position и Size точно, без нормализации, допуска или проверки перекрытия. Для obj принимается только упакованный Rect2; null и другой тип дают false. NaN-компонента не равна копии; +0 и -0 равны.
| Имя | Тип | По умолчанию |
|---|---|---|
obj | object | — |
objОбъект для сравнения; допускается null.
booltrue при точном равенстве.
ExpandRect2
public Rect2 Expand(Vector2 to);Возвращает минимальную копию, границы которой охватывают прежние границы и to. Если точка расширяет правую или нижнюю сторону, она становится частью End и всё ещё исключена HasPoint(). Метод не добавляет запас автоматически. Если требуется попадание точки строго внутрь, задайте необходимый запас явно.
| Имя | Тип | По умолчанию |
|---|---|---|
to | Vector2 | — |
toТочка в системе координат прямоугольника; граница End результата может совпасть с ней.
Rect2Новый прямоугольник с расширенными при необходимости границами.
GetCenterVector2
public Vector2 GetCenter();Вычисляет Position + Size * 0.5f в системе координат прямоугольника. Нечётный размер сохраняет дробную половину; Transform2D объекта не применяется.
Vector2Координаты центра с дробной половиной размера.
GetHashCodeint
public override int GetHashCode();Возвращает HashCode.Combine(Position, Size). Точно равные значения имеют одинаковый хеш, но совпадение хешей не доказывает равенство. По умолчанию Dictionary<Rect2, T> использует точный Equals(), не приближённые сравнения. Не сохраняйте хеш как постоянный идентификатор или контрольную сумму между запусками.
intХеш текущих Position и Size.
GetSupportVector2
public Vector2 GetSupport(Vector2 direction);Выбирает вершину замкнутой оболочки: положительная компонента direction выбирает соответствующую компоненту End, иначе Position. Нормализация не нужна; нулевое направление возвращает Position. Вершина на End может быть исключена HasPoint(), что не отменяет её роль опорной точки.
| Имя | Тип | По умолчанию |
|---|---|---|
direction | Vector2 | — |
directionНаправление в системе координат прямоугольника; длина не меняет выбор при тех же знаках.
Vector2Выбранная вершина в координатах прямоугольника.
GrowRect2
public Rect2 Grow(float by);Возвращает копию с Position - Vector2.One * by и Size + Vector2.One * (2 * by). Отступ применяется с каждой из четырёх сторон, а не один раз к полному размеру. Отрицательный отступ уменьшает область. Ограничения до нуля нет: чрезмерное уменьшение создаёт отрицательный Size.
| Имя | Тип | По умолчанию |
|---|---|---|
by | float | — |
byОтступ указанной стороны или каждой стороны, в единицах прямоугольника.
Rect2Новый прямоугольник; исходный не меняется.
GrowIndividualRect2
public Rect2 GrowIndividual(float left, float top, float right, float bottom);Возвращает копию с Position = Position - (left, top) и Size = Size + (left + right, top + bottom). Порядок аргументов: слева, сверху, справа, снизу. Отрицательный отступ уменьшает область. Ограничения до нуля нет: чрезмерное уменьшение создаёт отрицательный Size.
| Имя | Тип | По умолчанию |
|---|---|---|
left | float | — |
top | float | — |
right | float | — |
bottom | float | — |
leftОтступ слева.
topОтступ сверху.
rightОтступ справа.
bottomОтступ снизу.
Rect2Новый прямоугольник; исходный не меняется.
GrowSideRect2
public Rect2 GrowSide(Side side, float by);Возвращает копию, изменяя только сторону Side.Left, Side.Top, Side.Right или Side.Bottom. Для левой и верхней стороны меняется также Position. Неизвестное значение Side оставляет копию прежней. Отрицательный отступ уменьшает область. Ограничения до нуля нет: чрезмерное уменьшение создаёт отрицательный Size.
| Имя | Тип | По умолчанию |
|---|---|---|
side | Side | — |
by | float | — |
sideSide.Left, Side.Top, Side.Right или Side.Bottom.
byОтступ указанной стороны или каждой стороны, в единицах прямоугольника.
Rect2Новый прямоугольник; исходный не меняется.
HasAreabool
public bool HasArea();Возвращает Size.X > 0 && Size.Y > 0. Это проверка положительных размеров; Area > 0 не заменяет её при отрицательных компонентах.
booltrue только при положительных ширине и высоте.
HasPointbool
public bool HasPoint(Vector2 point);Для конечных координат: Проверяет Position.X <= point.X < End.X и Position.Y <= point.Y < End.Y. Левая и верхняя границы включены, правая и нижняя исключены. При нулевой ширине или высоте точек внутри нет. Для отрицательного Size сначала вызовите Abs(). Метод не отбрасывает NaN автоматически и может вернуть true для такой точки. Проверяйте IsFinite() у прямоугольника или бокса и у входной точки отдельно.
| Имя | Тип | По умолчанию |
|---|---|---|
point | Vector2 | — |
pointТочка в системе координат прямоугольника.
booltrue, если точка попадает в полуоткрытую область прямоугольника.
IntersectionRect2
public Rect2 Intersection(Rect2 b);Сначала вызывает Intersects(b) с его обычными правилами, затем обрезает общие границы. При раздельных прямоугольниках и простом касании положительных прямоугольников возвращает default(Rect2), то есть нулевой прямоугольник в начале координат. Место касания в этом результате не сохраняется. Нормализуйте отрицательные размеры через Abs() до вызова.
| Имя | Тип | По умолчанию |
|---|---|---|
b | Rect2 | — |
bПрямоугольник с неотрицательным Size в той же системе координат.
Rect2Общая область либо default при неуспешном Intersects(b).
Intersectsbool
public bool Intersects(Rect2 b, bool includeBorders = false);Проверяет интервалы по X и Y. Для положительных размеров касание только стороной или углом даёт false при includeBorders = false и true при includeBorders = true. Проверки HasArea() внутри нет: вырожденный прямоугольник строго внутри другого может дать true. Оба прямоугольника должны иметь неотрицательный Size и одну систему координат.
| Имя | Тип | По умолчанию |
|---|---|---|
b | Rect2 | — |
includeBorders | bool | false |
bДругой прямоугольник в той же системе координат.
includeBordersfalse по умолчанию; true учитывает касание сторон и углов. Не меняет правила HasPoint().
boolРезультат сравнения интервалов по двум осям.
IsEqualApproxbool
public bool IsEqualApprox(Rect2 other);Сравнивает Position и Size покомпонентно через Mathf.IsEqualApprox(). В текущей float-SDK точное равенство принимается сразу; иначе требуется abs(a - b) < max(0.000001, 0.000001 * abs(a)), где a — компонента этого прямоугольника. Порядок может влиять на результат на границе допуска; проверка не транзитивна. Она не заменяет равенство ключей Dictionary и не проверяет конечность: одинаковые бесконечности проходят сравнение.
| Имя | Тип | По умолчанию |
|---|---|---|
other | Rect2 | — |
otherВторой прямоугольник для проверки допуска.
booltrue, если проходят все четыре сравнения.
IsFinitebool
public bool IsFinite();Проверяет все четыре компоненты Position и Size на NaN и бесконечность. Нулевые или отрицательные размеры могут быть конечными: это не замена HasArea().
booltrue, если все четыре компоненты конечны.
MergeRect2
public Rect2 Merge(Rect2 b);Возвращает минимальный прямоугольник, охватывающий оба исходных. Промежуток между раздельными областями тоже входит в результат. Не меняет исходные значения. Оба прямоугольника должны иметь неотрицательный Size и одну систему координат.
| Имя | Тип | По умолчанию |
|---|---|---|
b | Rect2 | — |
bПрямоугольник, границы которого нужно включить.
Rect2Новый охватывающий прямоугольник.
ToString2 перегрузки
public override string ToString();Возвращает Position.ToString(format) + ", " + Size.ToString(format), с двумя векторами в круглых скобках. Числа используют InvariantCulture. Это диагностический текст, не формат сохранения или JSON. Эквивалентен ToString(null).
stringСтрока Position и Size.
public string ToString(string? format);Возвращает Position.ToString(format) + ", " + Size.ToString(format), с двумя векторами в круглых скобках. Числа используют InvariantCulture. Это диагностический текст, не формат сохранения или JSON. Формат применяется ко всем четырём компонентам; неверный формат может вызвать FormatException.
| Имя | Тип | По умолчанию |
|---|---|---|
format | string | — |
formatЧисловой формат .NET, например "F2" для двух знаков после точки; null выбирает формат по умолчанию.
stringСтрока Position и Size.
op_Equalitybool
public static bool operator ==(Rect2 left, Rect2 right);Сравнивает Position и Size точно, без нормализации, допуска или проверки перекрытия. NaN-компонента не равна копии; +0 и -0 равны.
| Имя | Тип | По умолчанию |
|---|---|---|
left | Rect2 | — |
right | Rect2 | — |
leftЛевый прямоугольник.
rightПравый прямоугольник.
booltrue при точном равенстве.
op_Inequalitybool
public static bool operator !=(Rect2 left, Rect2 right);Сравнивает Position и Size точно, без нормализации, допуска или проверки перекрытия. Оператор != возвращает отрицание этого сравнения. NaN-компонента не равна копии; +0 и -0 равны.
| Имя | Тип | По умолчанию |
|---|---|---|
left | Rect2 | — |
right | Rect2 | — |
leftЛевый прямоугольник.
rightПравый прямоугольник.
booltrue при неравенстве.