reckfellENGINE

Rect2

Прямоугольник с дробными координатами: границы, пересечения и размеры.

На этой странице
struct Rect2ReckfellSharpНаследует ValueType

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 возвращает охватывающий прямоугольник преобразованных вершин; результат остаётся параллельным осям.

C#
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 перегрузки
# Rect2 · 1/4
C#
public Rect2(Vector2 position, Vector2 size);

Создаёт прямоугольник из Position и полного Size, а не из двух углов. Значения сохраняются напрямую: отрицательные размеры не нормализуются. default(Rect2) имеет нулевую позицию и размер.

Параметры
ИмяТипПо умолчанию
positionVector2—
sizeVector2—
position

Начальная вершина.

size

Полная ширина и высота; не конечная вершина.

# Rect2 · 2/4
C#
public Rect2(Vector2 position, float width, float height);

Создаёт прямоугольник из Position и полного Size, а не из двух углов. Значения сохраняются напрямую: отрицательные размеры не нормализуются. default(Rect2) имеет нулевую позицию и размер.

Параметры
ИмяТипПо умолчанию
positionVector2—
widthfloat—
heightfloat—
position

Начальная вершина.

width

Полный размер по X.

height

Полный размер по Y.

# Rect2 · 3/4
C#
public Rect2(float x, float y, Vector2 size);

Создаёт прямоугольник из Position и полного Size, а не из двух углов. Значения сохраняются напрямую: отрицательные размеры не нормализуются. default(Rect2) имеет нулевую позицию и размер.

Параметры
ИмяТипПо умолчанию
xfloat—
yfloat—
sizeVector2—
x

X начальной вершины.

y

Y начальной вершины.

size

Полная ширина и высота; не конечная вершина.

# Rect2 · 4/4
C#
public Rect2(float x, float y, float width, float height);

Создаёт прямоугольник из Position и полного Size, а не из двух углов. Значения сохраняются напрямую: отрицательные размеры не нормализуются. default(Rect2) имеет нулевую позицию и размер.

Параметры
ИмяТипПо умолчанию
xfloat—
yfloat—
widthfloat—
heightfloat—
x

X начальной вершины.

y

Y начальной вершины.

width

Полный размер по X.

height

Полный размер по Y.

Свойства4

AreaСвойство
# Area
C#
public float Area { get; }

Вычисляет Size.X * Size.Y без нормализации. Две отрицательные компоненты тоже дают положительное произведение; для проверки положительных размеров используйте HasArea().

EndСвойство
# End
C#
public Vector2 End { get; set; }

Конечная вершина Position + Size. Присваивание меняет Size на value - Position, не меняя Position. HasPoint() исключает правую и нижнюю границы с этими координатами.

PositionСвойство
# Position
C#
public Vector2 Position { get; set; }

Начальная вершина. Присваивание сохраняет Size и переносит End на ту же величину. Система координат выбирается вызывающим кодом.

SizeСвойство
# Size
C#
public Vector2 Size { get; set; }

Полная ширина и высота: End = Position + Size. Присваивание сохраняет Position. Отрицательные компоненты не исправляются; для нормализации используйте Abs().

Методы22

AbsRect2
# Abs
C#
public Rect2 Abs();

Возвращает копию с Position = покомпонентный минимум прежних Position и End и Size = модуль прежнего Size. Нулевые компоненты остаются нулевыми. Исходное значение не меняется.

Возвращает Rect2

Копия с неотрицательными размерами.

Enclosesbool
# Encloses
C#
public bool Encloses(Rect2 b);

Проверяет полное включение Position и End прямоугольника b с включёнными границами. Равный прямоугольник включён; нулевой прямоугольник на End тоже может быть включён, хотя HasPoint(End) возвращает false. Это разные проверки. Используйте неотрицательные размеры обоих прямоугольников.

Параметры
ИмяТипПо умолчанию
bRect2—
b

Включаемый прямоугольник в той же системе координат.

Возвращает bool

true, если все границы b находятся внутри включённых границ этого прямоугольника.

Equals2 перегрузки
# Equals · 1/2
C#
public bool Equals(Rect2 other);

Сравнивает Position и Size точно, без нормализации, допуска или проверки перекрытия. NaN-компонента не равна копии; +0 и -0 равны.

Параметры
ИмяТипПо умолчанию
otherRect2—
other

Другой прямоугольник для точного сравнения.

Возвращает bool

true при точном равенстве.

# Equals · 2/2
C#
public override bool Equals(object? obj);

Сравнивает Position и Size точно, без нормализации, допуска или проверки перекрытия. Для obj принимается только упакованный Rect2; null и другой тип дают false. NaN-компонента не равна копии; +0 и -0 равны.

Параметры
ИмяТипПо умолчанию
objobject—
obj

Объект для сравнения; допускается null.

Возвращает bool

true при точном равенстве.

ExpandRect2
# Expand
C#
public Rect2 Expand(Vector2 to);

Возвращает минимальную копию, границы которой охватывают прежние границы и to. Если точка расширяет правую или нижнюю сторону, она становится частью End и всё ещё исключена HasPoint(). Метод не добавляет запас автоматически. Если требуется попадание точки строго внутрь, задайте необходимый запас явно.

Параметры
ИмяТипПо умолчанию
toVector2—
to

Точка в системе координат прямоугольника; граница End результата может совпасть с ней.

Возвращает Rect2

Новый прямоугольник с расширенными при необходимости границами.

GetCenterVector2
# GetCenter
C#
public Vector2 GetCenter();

Вычисляет Position + Size * 0.5f в системе координат прямоугольника. Нечётный размер сохраняет дробную половину; Transform2D объекта не применяется.

Возвращает Vector2

Координаты центра с дробной половиной размера.

GetHashCodeint
# GetHashCode
C#
public override int GetHashCode();

Возвращает HashCode.Combine(Position, Size). Точно равные значения имеют одинаковый хеш, но совпадение хешей не доказывает равенство. По умолчанию Dictionary<Rect2, T> использует точный Equals(), не приближённые сравнения. Не сохраняйте хеш как постоянный идентификатор или контрольную сумму между запусками.

Возвращает int

Хеш текущих Position и Size.

GetSupportVector2
# GetSupport
C#
public Vector2 GetSupport(Vector2 direction);

Выбирает вершину замкнутой оболочки: положительная компонента direction выбирает соответствующую компоненту End, иначе Position. Нормализация не нужна; нулевое направление возвращает Position. Вершина на End может быть исключена HasPoint(), что не отменяет её роль опорной точки.

Параметры
ИмяТипПо умолчанию
directionVector2—
direction

Направление в системе координат прямоугольника; длина не меняет выбор при тех же знаках.

Возвращает Vector2

Выбранная вершина в координатах прямоугольника.

GrowRect2
# Grow
C#
public Rect2 Grow(float by);

Возвращает копию с Position - Vector2.One * by и Size + Vector2.One * (2 * by). Отступ применяется с каждой из четырёх сторон, а не один раз к полному размеру. Отрицательный отступ уменьшает область. Ограничения до нуля нет: чрезмерное уменьшение создаёт отрицательный Size.

Параметры
ИмяТипПо умолчанию
byfloat—
by

Отступ указанной стороны или каждой стороны, в единицах прямоугольника.

Возвращает Rect2

Новый прямоугольник; исходный не меняется.

GrowIndividualRect2
# GrowIndividual
C#
public Rect2 GrowIndividual(float left, float top, float right, float bottom);

Возвращает копию с Position = Position - (left, top) и Size = Size + (left + right, top + bottom). Порядок аргументов: слева, сверху, справа, снизу. Отрицательный отступ уменьшает область. Ограничения до нуля нет: чрезмерное уменьшение создаёт отрицательный Size.

Параметры
ИмяТипПо умолчанию
leftfloat—
topfloat—
rightfloat—
bottomfloat—
left

Отступ слева.

top

Отступ сверху.

right

Отступ справа.

bottom

Отступ снизу.

Возвращает Rect2

Новый прямоугольник; исходный не меняется.

GrowSideRect2
# GrowSide
C#
public Rect2 GrowSide(Side side, float by);

Возвращает копию, изменяя только сторону Side.Left, Side.Top, Side.Right или Side.Bottom. Для левой и верхней стороны меняется также Position. Неизвестное значение Side оставляет копию прежней. Отрицательный отступ уменьшает область. Ограничения до нуля нет: чрезмерное уменьшение создаёт отрицательный Size.

Параметры
ИмяТипПо умолчанию
sideSide—
byfloat—
side

Side.Left, Side.Top, Side.Right или Side.Bottom.

by

Отступ указанной стороны или каждой стороны, в единицах прямоугольника.

Возвращает Rect2

Новый прямоугольник; исходный не меняется.

HasAreabool
# HasArea
C#
public bool HasArea();

Возвращает Size.X > 0 && Size.Y > 0. Это проверка положительных размеров; Area > 0 не заменяет её при отрицательных компонентах.

Возвращает bool

true только при положительных ширине и высоте.

HasPointbool
# HasPoint
C#
public bool HasPoint(Vector2 point);

Для конечных координат: Проверяет Position.X <= point.X < End.X и Position.Y <= point.Y < End.Y. Левая и верхняя границы включены, правая и нижняя исключены. При нулевой ширине или высоте точек внутри нет. Для отрицательного Size сначала вызовите Abs(). Метод не отбрасывает NaN автоматически и может вернуть true для такой точки. Проверяйте IsFinite() у прямоугольника или бокса и у входной точки отдельно.

Параметры
ИмяТипПо умолчанию
pointVector2—
point

Точка в системе координат прямоугольника.

Возвращает bool

true, если точка попадает в полуоткрытую область прямоугольника.

IntersectionRect2
# Intersection
C#
public Rect2 Intersection(Rect2 b);

Сначала вызывает Intersects(b) с его обычными правилами, затем обрезает общие границы. При раздельных прямоугольниках и простом касании положительных прямоугольников возвращает default(Rect2), то есть нулевой прямоугольник в начале координат. Место касания в этом результате не сохраняется. Нормализуйте отрицательные размеры через Abs() до вызова.

Параметры
ИмяТипПо умолчанию
bRect2—
b

Прямоугольник с неотрицательным Size в той же системе координат.

Возвращает Rect2

Общая область либо default при неуспешном Intersects(b).

Intersectsbool
# Intersects
C#
public bool Intersects(Rect2 b, bool includeBorders = false);

Проверяет интервалы по X и Y. Для положительных размеров касание только стороной или углом даёт false при includeBorders = false и true при includeBorders = true. Проверки HasArea() внутри нет: вырожденный прямоугольник строго внутри другого может дать true. Оба прямоугольника должны иметь неотрицательный Size и одну систему координат.

Параметры
ИмяТипПо умолчанию
bRect2—
includeBordersboolfalse
b

Другой прямоугольник в той же системе координат.

includeBorders

false по умолчанию; true учитывает касание сторон и углов. Не меняет правила HasPoint().

Возвращает bool

Результат сравнения интервалов по двум осям.

IsEqualApproxbool
# IsEqualApprox
C#
public bool IsEqualApprox(Rect2 other);

Сравнивает Position и Size покомпонентно через Mathf.IsEqualApprox(). В текущей float-SDK точное равенство принимается сразу; иначе требуется abs(a - b) < max(0.000001, 0.000001 * abs(a)), где a — компонента этого прямоугольника. Порядок может влиять на результат на границе допуска; проверка не транзитивна. Она не заменяет равенство ключей Dictionary и не проверяет конечность: одинаковые бесконечности проходят сравнение.

Параметры
ИмяТипПо умолчанию
otherRect2—
other

Второй прямоугольник для проверки допуска.

Возвращает bool

true, если проходят все четыре сравнения.

IsFinitebool
# IsFinite
C#
public bool IsFinite();

Проверяет все четыре компоненты Position и Size на NaN и бесконечность. Нулевые или отрицательные размеры могут быть конечными: это не замена HasArea().

Возвращает bool

true, если все четыре компоненты конечны.

MergeRect2
# Merge
C#
public Rect2 Merge(Rect2 b);

Возвращает минимальный прямоугольник, охватывающий оба исходных. Промежуток между раздельными областями тоже входит в результат. Не меняет исходные значения. Оба прямоугольника должны иметь неотрицательный Size и одну систему координат.

Параметры
ИмяТипПо умолчанию
bRect2—
b

Прямоугольник, границы которого нужно включить.

Возвращает Rect2

Новый охватывающий прямоугольник.

ToString2 перегрузки
# ToString · 1/2
C#
public override string ToString();

Возвращает Position.ToString(format) + ", " + Size.ToString(format), с двумя векторами в круглых скобках. Числа используют InvariantCulture. Это диагностический текст, не формат сохранения или JSON. Эквивалентен ToString(null).

Возвращает string

Строка Position и Size.

# ToString · 2/2
C#
public string ToString(string? format);

Возвращает Position.ToString(format) + ", " + Size.ToString(format), с двумя векторами в круглых скобках. Числа используют InvariantCulture. Это диагностический текст, не формат сохранения или JSON. Формат применяется ко всем четырём компонентам; неверный формат может вызвать FormatException.

Параметры
ИмяТипПо умолчанию
formatstring—
format

Числовой формат .NET, например "F2" для двух знаков после точки; null выбирает формат по умолчанию.

Возвращает string

Строка Position и Size.

op_Equalitybool
# op_Equality
C#
public static bool operator ==(Rect2 left, Rect2 right);

Сравнивает Position и Size точно, без нормализации, допуска или проверки перекрытия. NaN-компонента не равна копии; +0 и -0 равны.

Параметры
ИмяТипПо умолчанию
leftRect2—
rightRect2—
left

Левый прямоугольник.

right

Правый прямоугольник.

Возвращает bool

true при точном равенстве.

op_Inequalitybool
# op_Inequality
C#
public static bool operator !=(Rect2 left, Rect2 right);

Сравнивает Position и Size точно, без нормализации, допуска или проверки перекрытия. Оператор != возвращает отрицание этого сравнения. NaN-компонента не равна копии; +0 и -0 равны.

Параметры
ИмяТипПо умолчанию
leftRect2—
rightRect2—
left

Левый прямоугольник.

right

Правый прямоугольник.

Возвращает bool

true при неравенстве.

Документация Reckfell EngineНаверх ↑
БЫСТРЫЙ ПЕРЕХОДНачало работыEntity и иерархияC# & .NET 10Сцены и префабы
Руководства и полный API Reckfell K
reckfellENGINE
RECKFELL ACCOUNT

Вход в аккаунт

Войдите в аккаунт Reckfell.

Один аккаунт для всей платформы Reckfell.