reckfellENGINE

Rect2I

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

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

Rect2I — структура 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: выбирайте явную проверку под задачу.

Координаты и размеры имеют тип int. Следите, чтобы суммы, разности и площадь помещались в int: переполнение может испортить границы. Abs() для компоненты Size = int.MinValue вызывает OverflowException. Для включения целой ячейки объедините прямоугольник с Rect2I(cell, Vector2I.One), как в примере.

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

Rect2I4 перегрузки
# Rect2I · 1/4
C#
public Rect2I(Vector2I position, Vector2I size);

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

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

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

size

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

# Rect2I · 2/4
C#
public Rect2I(Vector2I position, int width, int height);

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

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

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

width

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

height

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

# Rect2I · 3/4
C#
public Rect2I(int x, int y, Vector2I size);

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

Параметры
ИмяТипПо умолчанию
xint—
yint—
sizeVector2I—
x

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

y

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

size

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

# Rect2I · 4/4
C#
public Rect2I(int x, int y, int width, int height);

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

Параметры
ИмяТипПо умолчанию
xint—
yint—
widthint—
heightint—
x

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

y

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

width

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

height

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

Свойства4

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

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

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

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

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

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

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

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

Методы21

AbsRect2I
# Abs
C#
public Rect2I Abs();

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

Возвращает Rect2I

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

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

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

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

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

Возвращает bool

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

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

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

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

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

Возвращает bool

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

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

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

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

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

Возвращает bool

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

ExpandRect2I
# Expand
C#
public Rect2I Expand(Vector2I to);

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

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

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

Возвращает Rect2I

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

GetCenterVector2I
# GetCenter
C#
public Vector2I GetCenter();

Вычисляет Position + Size / 2: сначала делит компоненты Size целочисленно с отбрасыванием дробной части к нулю, затем прибавляет Position. Для нечётного положительного размера центр смещён к Position, даже при отрицательных координатах. Например, Position.X = -10 и Size.X = 3 дают -9.

Возвращает Vector2I

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

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

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

Возвращает int

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

GrowRect2I
# Grow
C#
public Rect2I Grow(int by);

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

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

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

Возвращает Rect2I

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

GrowIndividualRect2I
# GrowIndividual
C#
public Rect2I GrowIndividual(int left, int top, int right, int bottom);

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

Параметры
ИмяТипПо умолчанию
leftint—
topint—
rightint—
bottomint—
left

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

top

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

right

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

bottom

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

Возвращает Rect2I

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

GrowSideRect2I
# GrowSide
C#
public Rect2I GrowSide(Side side, int by);

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

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

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

by

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

Возвращает Rect2I

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

HasAreabool
# HasArea
C#
public bool HasArea();

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

Возвращает bool

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

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

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

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

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

Возвращает bool

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

IntersectionRect2I
# Intersection
C#
public Rect2I Intersection(Rect2I b);

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

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

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

Возвращает Rect2I

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

Intersectsbool
# Intersects
C#
public bool Intersects(Rect2I b);

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

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

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

Возвращает bool

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

MergeRect2I
# Merge
C#
public Rect2I Merge(Rect2I b);

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

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

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

Возвращает Rect2I

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

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, например "D3" для ведущих нулей; null выбирает формат по умолчанию.

Возвращает string

Строка Position и Size.

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

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

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

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

right

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

Возвращает bool

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

op_ExplicitRect2I
# op_Explicit
C#
public static explicit operator Rect2I(Rect2 value);

Преобразует Rect2 в Rect2I, отдельно отбрасывая дробные части Position и Size к нулю. Например, (-1.9, 1.9), (2.9, 3.9) превращается в (-1, 1), (2, 3). Это не округление End и не построение охватывающего набора пикселей. Используйте конечные значения, представимые в int.

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

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

Возвращает Rect2I

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

op_ImplicitRect2
# op_Implicit
C#
public static implicit operator Rect2(Rect2I value);

Преобразует Position и Size из int в float и создаёт Rect2. Преобразование не требует явного приведения, но большие целые могут терять точность: 16777217 в текущей float-SDK становится 16777216. Обратное преобразование не обязано восстановить исходные координаты.

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

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

Возвращает Rect2

Прямоугольник с координатами float, возможно с потерей точности.

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

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

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

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

right

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

Возвращает bool

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

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

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

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

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