reckfellENGINE

Geometry2D

Аналитическая 2D-геометрия, операции над контурами и упаковка прямоугольников.

На этой странице
class Geometry2DReckfellSharp

Статические CPU-операции над переданными точками. Не запрашивают физический мир, не учитывают collision layers и не создают CollisionPolygon2D/текстуру автоматически. Все входы должны быть в одной системе координат. Singleton заимствован: не вызывайте Free/Dispose.

LineIntersectsLine принимает точку и направление каждой бесконечной прямой; SegmentIntersectsSegment — концы двух отрезков. Результат Variant содержит Vector2 либо Nil, включая отдельный случай коллинеарного перекрытия: единственная точка для него не возвращается. SegmentIntersectsCircle вместо точки даёт долю t в 0…1 или -1 при промахе. В отличие от соответствующего 3D-метода, 2D-вариант принимает точное касание и может вернуть выход при старте внутри.

C#
float t = Geometry2D.SegmentIntersectsCircle(
    new Vector2(-2, 0), new Vector2(2, 0), Vector2.Zero, 1);
if (t >= 0)
{
    Vector2 hit = new Vector2(-2, 0).Lerp(new Vector2(2, 0), t);
}

Boolean-операции возвращают Array<Vector2[]> контуров: Merge — объединение, Clip — A минус B, Intersect — общая область, Exclude — XOR. Один результат может содержать несколько внешних контуров и отверстия. Не заполняйте каждый контур как независимый сплошной полигон: этим вы закроете отверстия. Порядок/начальная вершина не являются стабильными ID. Операции используют EvenOdd и внутреннюю дискретизацию с точностью 5 десятичных знаков, а не точную арифметику произвольного масштаба.

IsPolygonClockwise использует декартову систему Y вверх; визуальное направление на экране Y вниз противоположно. IsPointInPolygon принимает граничные точки с допуском, но PointIsInsideTriangle не даёт такого универсального контракта: результат для ребра меняется при обратном обходе. Не используйте его как валидатор вырожденного треугольника.

OffsetPolygon расширяет/сжимает замкнутую область. OffsetPolyline строит обводку толщиной примерно 2*abs(delta): в текущей Clipper2 отрицательная delta для открытого пути берётся по модулю. Это не сжатие линии и не обещание пустого результата. Array-overload имеют значения join/end по умолчанию, span-overload требуют их явно.

ConvexHull возвращает замыкающий повтор первой вершины; при передаче в TriangulatePolygon уберите повтор и проверьте простой контур. TriangulatePolygon работает с границей одного полигона; TriangulateDelaunay — с облаком точек и не сохраняет вогнутую границу/отверстия. MakeAtlas возвращает размещение прямоугольников, не изображение; проверяйте размеры до вызова, в частности не передавайте ширину свыше 4096 в текущий алгоритм.

38 Windows headless-проверок покрыли простые пересечения, границы, boolean-площади/отверстие, обводки, триангуляцию и небольшой атлас. Произвольная топология, extreme-scale точность, большие атласы, физический мир, производительность и рендер не проверены.

Объявления сверены с C# SDK 1.0.0. Раскройте имя, чтобы увидеть сигнатуры и описание.

Свойства1

SingletonСвойство
# Singleton
C#
public static Geometry2DInstance Singleton { get; }

Заимствованный Geometry2DInstance статических операций. Не освобождайте вручную и не создавайте второй экземпляр сервиса.

Методы39

BresenhamLineReckfell.Collections.Array<Vector2I>
# BresenhamLine
C#
public static Reckfell.Collections.Array<Vector2I> BresenhamLine(Vector2I from, Vector2I to);

Возвращает целочисленные ячейки линии Брезенхэма, включая оба конца. Для совпадающих концов одна точка. Не supercover-растеризация всех затронутых ячеек и не физический raycast; длина результата растёт с расстоянием.

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

Целочисленный конец линии Брезенхэма; оба конца включены.

to

Целочисленный конец линии Брезенхэма; оба конца включены.

Возвращает Reckfell.Collections.Array<Vector2I>

Array<Vector2I> упорядоченных ячеек от from до to включительно.

ClipPolygons2 перегрузки
# ClipPolygons · 1/2
C#
public static Reckfell.Collections.Array<Vector2[]> ClipPolygons(Vector2[] polygonA, Vector2[] polygonB);

Разность A−B: удаляет из A область B. Не XOR и не пересечение. Вложенный B может создать отдельный контур отверстия; его нельзя заполнять как независимый solid.

Параметры
ИмяТипПо умолчанию
polygonAVector2[]—
polygonBVector2[]—
polygonA

Упорядоченный простой контур в общей системе координат; не повторяйте первую вершину в конце и не смешивайте несколько колец.

polygonB

Упорядоченный простой контур в общей системе координат; не повторяйте первую вершину в конце и не смешивайте несколько колец.

Возвращает Reckfell.Collections.Array<Vector2[]>

Array<Vector2[]> контуров; может быть пустым или содержать несколько частей/отверстия. Это не набор готовых физических объектов.

# ClipPolygons · 2/2
C#
public static Reckfell.Collections.Array<Vector2[]> ClipPolygons(ReadOnlySpan<Vector2> polygonA, ReadOnlySpan<Vector2> polygonB);

Разность A−B: удаляет из A область B. Не XOR и не пересечение. Вложенный B может создать отдельный контур отверстия; его нельзя заполнять как независимый solid.

Параметры
ИмяТипПо умолчанию
polygonAReadOnlySpan<Vector2>—
polygonBReadOnlySpan<Vector2>—
polygonA

Упорядоченный простой контур в общей системе координат; не повторяйте первую вершину в конце и не смешивайте несколько колец.

polygonB

Упорядоченный простой контур в общей системе координат; не повторяйте первую вершину в конце и не смешивайте несколько колец.

Возвращает Reckfell.Collections.Array<Vector2[]>

Array<Vector2[]> контуров; может быть пустым или содержать несколько частей/отверстия. Это не набор готовых физических объектов.

ClipPolylineWithPolygon2 перегрузки
# ClipPolylineWithPolygon · 1/2
C#
public static Reckfell.Collections.Array<Vector2[]> ClipPolylineWithPolygon(Vector2[] polyline, Vector2[] polygon);

Оставляет части открытой polyline вне polygon. Линия может разбиться на несколько открытых фрагментов; они не являются заполненными полигонами.

Параметры
ИмяТипПо умолчанию
polylineVector2[]—
polygonVector2[]—
polyline

Упорядоченные вершины открытой линии, обычно минимум две различные точки.

polygon

Упорядоченный простой контур в общей системе координат; не повторяйте первую вершину в конце и не смешивайте несколько колец.

Возвращает Reckfell.Collections.Array<Vector2[]>

Array<Vector2[]> открытых фрагментов, возможно пустой.

# ClipPolylineWithPolygon · 2/2
C#
public static Reckfell.Collections.Array<Vector2[]> ClipPolylineWithPolygon(ReadOnlySpan<Vector2> polyline, ReadOnlySpan<Vector2> polygon);

Оставляет части открытой polyline вне polygon. Линия может разбиться на несколько открытых фрагментов; они не являются заполненными полигонами.

Параметры
ИмяТипПо умолчанию
polylineReadOnlySpan<Vector2>—
polygonReadOnlySpan<Vector2>—
polyline

Упорядоченные вершины открытой линии, обычно минимум две различные точки.

polygon

Упорядоченный простой контур в общей системе координат; не повторяйте первую вершину в конце и не смешивайте несколько колец.

Возвращает Reckfell.Collections.Array<Vector2[]>

Array<Vector2[]> открытых фрагментов, возможно пустой.

ConvexHull2 перегрузки
# ConvexHull · 1/2
C#
public static Vector2[] ConvexHull(Vector2[] points);

Строит выпуклую оболочку облака, сортируя копию входа. Вывод идёт против часовой стрелки в Y вверх и повторяет первую вершину в конце для обычной невырожденной оболочки. Внутренние/лишние коллинеарные точки не обязаны сохраняться.

Параметры
ИмяТипПо умолчанию
pointsVector2[]—
points

Конечное облако Vector2 в общей системе координат; для Delaunay нужны невырожденные неколлинеарные данные.

Возвращает Vector2[]

Vector2[] оболочки с замыкающим повтором первой вершины для обычного невырожденного входа.

# ConvexHull · 2/2
C#
public static Vector2[] ConvexHull(ReadOnlySpan<Vector2> points);

Строит выпуклую оболочку облака, сортируя копию входа. Вывод идёт против часовой стрелки в Y вверх и повторяет первую вершину в конце для обычной невырожденной оболочки. Внутренние/лишние коллинеарные точки не обязаны сохраняться.

Параметры
ИмяТипПо умолчанию
pointsReadOnlySpan<Vector2>—
points

Конечное облако Vector2 в общей системе координат; для Delaunay нужны невырожденные неколлинеарные данные.

Возвращает Vector2[]

Vector2[] оболочки с замыкающим повтором первой вершины для обычного невырожденного входа.

DecomposePolygonInConvex2 перегрузки
# DecomposePolygonInConvex · 1/2
C#
public static Reckfell.Collections.Array<Vector2[]> DecomposePolygonInConvex(Vector2[] polygon);

Разбивает простой вогнутый полигон на выпуклые контуры, не обязательно треугольники. Вход — один корректный контур; boolean-результат с отверстиями нельзя обрабатывать заполнением/разбиением каждого кольца независимо.

Параметры
ИмяТипПо умолчанию
polygonVector2[]—
polygon

Упорядоченный простой контур в общей системе координат; не повторяйте первую вершину в конце и не смешивайте несколько колец.

Возвращает Reckfell.Collections.Array<Vector2[]>

Array<Vector2[]> выпуклых частей одного полигона; пустой результат возможен при неудаче. Отдельных колец отверстий этот вход не задаёт.

# DecomposePolygonInConvex · 2/2
C#
public static Reckfell.Collections.Array<Vector2[]> DecomposePolygonInConvex(ReadOnlySpan<Vector2> polygon);

Разбивает простой вогнутый полигон на выпуклые контуры, не обязательно треугольники. Вход — один корректный контур; boolean-результат с отверстиями нельзя обрабатывать заполнением/разбиением каждого кольца независимо.

Параметры
ИмяТипПо умолчанию
polygonReadOnlySpan<Vector2>—
polygon

Упорядоченный простой контур в общей системе координат; не повторяйте первую вершину в конце и не смешивайте несколько колец.

Возвращает Reckfell.Collections.Array<Vector2[]>

Array<Vector2[]> выпуклых частей одного полигона; пустой результат возможен при неудаче. Отдельных колец отверстий этот вход не задаёт.

ExcludePolygons2 перегрузки
# ExcludePolygons · 1/2
C#
public static Reckfell.Collections.Array<Vector2[]> ExcludePolygons(Vector2[] polygonA, Vector2[] polygonB);

Симметрическая разность XOR: оставляет заполненную ровно одним полигоном область. В отличие от ClipPolygons, учитывает также часть B вне A.

Параметры
ИмяТипПо умолчанию
polygonAVector2[]—
polygonBVector2[]—
polygonA

Упорядоченный простой контур в общей системе координат; не повторяйте первую вершину в конце и не смешивайте несколько колец.

polygonB

Упорядоченный простой контур в общей системе координат; не повторяйте первую вершину в конце и не смешивайте несколько колец.

Возвращает Reckfell.Collections.Array<Vector2[]>

Array<Vector2[]> контуров; может быть пустым или содержать несколько частей/отверстия. Это не набор готовых физических объектов.

# ExcludePolygons · 2/2
C#
public static Reckfell.Collections.Array<Vector2[]> ExcludePolygons(ReadOnlySpan<Vector2> polygonA, ReadOnlySpan<Vector2> polygonB);

Симметрическая разность XOR: оставляет заполненную ровно одним полигоном область. В отличие от ClipPolygons, учитывает также часть B вне A.

Параметры
ИмяТипПо умолчанию
polygonAReadOnlySpan<Vector2>—
polygonBReadOnlySpan<Vector2>—
polygonA

Упорядоченный простой контур в общей системе координат; не повторяйте первую вершину в конце и не смешивайте несколько колец.

polygonB

Упорядоченный простой контур в общей системе координат; не повторяйте первую вершину в конце и не смешивайте несколько колец.

Возвращает Reckfell.Collections.Array<Vector2[]>

Array<Vector2[]> контуров; может быть пустым или содержать несколько частей/отверстия. Это не набор готовых физических объектов.

GetClosestPointToSegmentVector2
# GetClosestPointToSegment
C#
public static Vector2 GetClosestPointToSegment(Vector2 point, Vector2 s1, Vector2 s2);

Проецирует point на конечный s1–s2, ограничивая концами. Для почти нулевого отрезка возвращает s1. Расстояние вычисляйте отдельно.

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

Проверяемая точка в той же системе координат, что геометрия.

s1

Точка в общей системе координат. Для GetClosestPointsBetweenSegments пары именно p1–q1 и p2–q2; для LineIntersectsLine from — точка на прямой.

s2

Точка в общей системе координат. Для GetClosestPointsBetweenSegments пары именно p1–q1 и p2–q2; для LineIntersectsLine from — точка на прямой.

Возвращает Vector2

Спроецированный Vector2, не расстояние.

GetClosestPointToSegmentUncappedVector2
# GetClosestPointToSegmentUncapped
C#
public static Vector2 GetClosestPointToSegmentUncapped(Vector2 point, Vector2 s1, Vector2 s2);

Проецирует на бесконечную прямую через s1/s2, без ограничения концами. Почти совпадающие концы дают s1.

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

Проверяемая точка в той же системе координат, что геометрия.

s1

Точка в общей системе координат. Для GetClosestPointsBetweenSegments пары именно p1–q1 и p2–q2; для LineIntersectsLine from — точка на прямой.

s2

Точка в общей системе координат. Для GetClosestPointsBetweenSegments пары именно p1–q1 и p2–q2; для LineIntersectsLine from — точка на прямой.

Возвращает Vector2

Спроецированный Vector2, не расстояние.

GetClosestPointsBetweenSegmentsVector2[]
# GetClosestPointsBetweenSegments
C#
public static Vector2[] GetClosestPointsBetweenSegments(Vector2 p1, Vector2 q1, Vector2 p2, Vector2 q2);

Возвращает две ближайшие точки: первую на p1–q1, вторую на p2–q2. Здесь имена параметров отличаются от Geometry3D. Это не пара пересечений и не расстояние.

Параметры
ИмяТипПо умолчанию
p1Vector2—
q1Vector2—
p2Vector2—
q2Vector2—
p1

Точка в общей системе координат. Для GetClosestPointsBetweenSegments пары именно p1–q1 и p2–q2; для LineIntersectsLine from — точка на прямой.

q1

Точка в общей системе координат. Для GetClosestPointsBetweenSegments пары именно p1–q1 и p2–q2; для LineIntersectsLine from — точка на прямой.

p2

Точка в общей системе координат. Для GetClosestPointsBetweenSegments пары именно p1–q1 и p2–q2; для LineIntersectsLine from — точка на прямой.

q2

Точка в общей системе координат. Для GetClosestPointsBetweenSegments пары именно p1–q1 и p2–q2; для LineIntersectsLine from — точка на прямой.

Возвращает Vector2[]

Два Vector2: точка p1–q1, затем p2–q2.

IntersectPolygons2 перегрузки
# IntersectPolygons · 1/2
C#
public static Reckfell.Collections.Array<Vector2[]> IntersectPolygons(Vector2[] polygonA, Vector2[] polygonB);

Пересечение A∩B: оставляет только общую заполненную область. Без общей площади результат может быть пустым; это не поиск одной точки касания.

Параметры
ИмяТипПо умолчанию
polygonAVector2[]—
polygonBVector2[]—
polygonA

Упорядоченный простой контур в общей системе координат; не повторяйте первую вершину в конце и не смешивайте несколько колец.

polygonB

Упорядоченный простой контур в общей системе координат; не повторяйте первую вершину в конце и не смешивайте несколько колец.

Возвращает Reckfell.Collections.Array<Vector2[]>

Array<Vector2[]> контуров; может быть пустым или содержать несколько частей/отверстия. Это не набор готовых физических объектов.

# IntersectPolygons · 2/2
C#
public static Reckfell.Collections.Array<Vector2[]> IntersectPolygons(ReadOnlySpan<Vector2> polygonA, ReadOnlySpan<Vector2> polygonB);

Пересечение A∩B: оставляет только общую заполненную область. Без общей площади результат может быть пустым; это не поиск одной точки касания.

Параметры
ИмяТипПо умолчанию
polygonAReadOnlySpan<Vector2>—
polygonBReadOnlySpan<Vector2>—
polygonA

Упорядоченный простой контур в общей системе координат; не повторяйте первую вершину в конце и не смешивайте несколько колец.

polygonB

Упорядоченный простой контур в общей системе координат; не повторяйте первую вершину в конце и не смешивайте несколько колец.

Возвращает Reckfell.Collections.Array<Vector2[]>

Array<Vector2[]> контуров; может быть пустым или содержать несколько частей/отверстия. Это не набор готовых физических объектов.

IntersectPolylineWithPolygon2 перегрузки
# IntersectPolylineWithPolygon · 1/2
C#
public static Reckfell.Collections.Array<Vector2[]> IntersectPolylineWithPolygon(Vector2[] polyline, Vector2[] polygon);

Оставляет части открытой polyline внутри polygon. Возвращает открытые фрагменты, не площадь и не автоматически замкнутые контуры.

Параметры
ИмяТипПо умолчанию
polylineVector2[]—
polygonVector2[]—
polyline

Упорядоченные вершины открытой линии, обычно минимум две различные точки.

polygon

Упорядоченный простой контур в общей системе координат; не повторяйте первую вершину в конце и не смешивайте несколько колец.

Возвращает Reckfell.Collections.Array<Vector2[]>

Array<Vector2[]> открытых фрагментов, возможно пустой.

# IntersectPolylineWithPolygon · 2/2
C#
public static Reckfell.Collections.Array<Vector2[]> IntersectPolylineWithPolygon(ReadOnlySpan<Vector2> polyline, ReadOnlySpan<Vector2> polygon);

Оставляет части открытой polyline внутри polygon. Возвращает открытые фрагменты, не площадь и не автоматически замкнутые контуры.

Параметры
ИмяТипПо умолчанию
polylineReadOnlySpan<Vector2>—
polygonReadOnlySpan<Vector2>—
polyline

Упорядоченные вершины открытой линии, обычно минимум две различные точки.

polygon

Упорядоченный простой контур в общей системе координат; не повторяйте первую вершину в конце и не смешивайте несколько колец.

Возвращает Reckfell.Collections.Array<Vector2[]>

Array<Vector2[]> открытых фрагментов, возможно пустой.

IsPointInCirclebool
# IsPointInCircle
C#
public static bool IsPointInCircle(Vector2 point, Vector2 circlePosition, float circleRadius);

Проверяет квадрат расстояния ≤ radius²; граница включена. Используйте неотрицательный радиус: формула возводит его в квадрат, не проверяя смысл отрицательного значения.

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

Проверяемая точка в той же системе координат, что геометрия.

circlePosition

Центр круга в общей системе координат.

circleRadius

Неотрицательный конечный радиус в единицах точек.

Возвращает bool

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

IsPointInPolygon2 перегрузки
# IsPointInPolygon · 1/2
C#
public static bool IsPointInPolygon(Vector2 point, Vector2[] polygon);

Проверяет точку в одном контуре лучевым методом; найденная на ребре точка включается с приближённым сравнением. Менее трёх вершин дают false. Несколько контуров с отверстиями не передаются как один неупорядоченный массив.

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

Проверяемая точка в той же системе координат, что геометрия.

polygon

Упорядоченный простой контур в общей системе координат; не повторяйте первую вершину в конце и не смешивайте несколько колец.

Возвращает bool

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

# IsPointInPolygon · 2/2
C#
public static bool IsPointInPolygon(Vector2 point, ReadOnlySpan<Vector2> polygon);

Проверяет точку в одном контуре лучевым методом; найденная на ребре точка включается с приближённым сравнением. Менее трёх вершин дают false. Несколько контуров с отверстиями не передаются как один неупорядоченный массив.

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

Проверяемая точка в той же системе координат, что геометрия.

polygon

Упорядоченный простой контур в общей системе координат; не повторяйте первую вершину в конце и не смешивайте несколько колец.

Возвращает bool

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

IsPolygonClockwise2 перегрузки
# IsPolygonClockwise · 1/2
C#
public static bool IsPolygonClockwise(Vector2[] polygon);

Проверяет обход замкнутого контура в декартовых координатах Y вверх. В экранных Y вниз визуальный смысл обратный. Менее трёх точек дают false, что не доказывает валидный противоположный обход.

Параметры
ИмяТипПо умолчанию
polygonVector2[]—
polygon

Упорядоченный простой контур в общей системе координат; не повторяйте первую вершину в конце и не смешивайте несколько колец.

Возвращает bool

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

# IsPolygonClockwise · 2/2
C#
public static bool IsPolygonClockwise(ReadOnlySpan<Vector2> polygon);

Проверяет обход замкнутого контура в декартовых координатах Y вверх. В экранных Y вниз визуальный смысл обратный. Менее трёх точек дают false, что не доказывает валидный противоположный обход.

Параметры
ИмяТипПо умолчанию
polygonReadOnlySpan<Vector2>—
polygon

Упорядоченный простой контур в общей системе координат; не повторяйте первую вершину в конце и не смешивайте несколько колец.

Возвращает bool

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

LineIntersectsLineVariant
# LineIntersectsLine
C#
public static Variant LineIntersectsLine(Vector2 fromA, Vector2 dirA, Vector2 fromB, Vector2 dirB);

Пересекает две бесконечные прямые from+dir*t с t любого знака. dir — направление, не второй конец. Параллельные и совпадающие прямые дают Nil, а не множество точек.

Параметры
ИмяТипПо умолчанию
fromAVector2—
dirAVector2—
fromBVector2—
dirBVector2—
fromA

Точка в общей системе координат. Для GetClosestPointsBetweenSegments пары именно p1–q1 и p2–q2; для LineIntersectsLine from — точка на прямой.

dirA

Ненулевое направление бесконечной прямой, не её второй конец.

fromB

Точка в общей системе координат. Для GetClosestPointsBetweenSegments пары именно p1–q1 и p2–q2; для LineIntersectsLine from — точка на прямой.

dirB

Ненулевое направление бесконечной прямой, не её второй конец.

Возвращает Variant

Variant с Vector2 либо Nil; после использования освободите Variant, не считайте (0,0) признаком промаха.

MakeAtlas2 перегрузки
# MakeAtlas · 1/2
C#
public static Reckfell.Collections.Dictionary MakeAtlas(Vector2[] sizes);

Вычисляет позиции прямоугольников без вращения, padding и создания текстуры. Vector2-размеры преобразуются в целые с отбрасыванием дроби; используйте непустой набор положительных целых размеров. Текущий поиск проверяет ширины до 4096: не передавайте более широкие прямоугольники, безопасный результат для них не подтверждён и в коде нет проверки пустого списка кандидатов перед выбором. Это source-наблюдение, аварийный вход не запускался.

Параметры
ИмяТипПо умолчанию
sizesVector2[]—
sizes

Непустой массив положительных целых размеров, ширина каждого ≤4096; дроби отбрасываются и могут стать нулём.

Возвращает Reckfell.Collections.Dictionary

Собственный Dictionary: points — Vector2[] позиций по исходным индексам, size — Vector2I общего размера. Освободите словарь после чтения.

# MakeAtlas · 2/2
C#
public static Reckfell.Collections.Dictionary MakeAtlas(ReadOnlySpan<Vector2> sizes);

Вычисляет позиции прямоугольников без вращения, padding и создания текстуры. Vector2-размеры преобразуются в целые с отбрасыванием дроби; используйте непустой набор положительных целых размеров. Текущий поиск проверяет ширины до 4096: не передавайте более широкие прямоугольники, безопасный результат для них не подтверждён и в коде нет проверки пустого списка кандидатов перед выбором. Это source-наблюдение, аварийный вход не запускался.

Параметры
ИмяТипПо умолчанию
sizesReadOnlySpan<Vector2>—
sizes

Непустой массив положительных целых размеров, ширина каждого ≤4096; дроби отбрасываются и могут стать нулём.

Возвращает Reckfell.Collections.Dictionary

Собственный Dictionary: points — Vector2[] позиций по исходным индексам, size — Vector2I общего размера. Освободите словарь после чтения.

MergePolygons2 перегрузки
# MergePolygons · 1/2
C#
public static Reckfell.Collections.Array<Vector2[]> MergePolygons(Vector2[] polygonA, Vector2[] polygonB);

Объединение A∪B по EvenOdd. Возвращает контуры, возможно несколько внешних и отверстия; не гарантирует один массив или стабильный порядок.

Параметры
ИмяТипПо умолчанию
polygonAVector2[]—
polygonBVector2[]—
polygonA

Упорядоченный простой контур в общей системе координат; не повторяйте первую вершину в конце и не смешивайте несколько колец.

polygonB

Упорядоченный простой контур в общей системе координат; не повторяйте первую вершину в конце и не смешивайте несколько колец.

Возвращает Reckfell.Collections.Array<Vector2[]>

Array<Vector2[]> контуров; может быть пустым или содержать несколько частей/отверстия. Это не набор готовых физических объектов.

# MergePolygons · 2/2
C#
public static Reckfell.Collections.Array<Vector2[]> MergePolygons(ReadOnlySpan<Vector2> polygonA, ReadOnlySpan<Vector2> polygonB);

Объединение A∪B по EvenOdd. Возвращает контуры, возможно несколько внешних и отверстия; не гарантирует один массив или стабильный порядок.

Параметры
ИмяТипПо умолчанию
polygonAReadOnlySpan<Vector2>—
polygonBReadOnlySpan<Vector2>—
polygonA

Упорядоченный простой контур в общей системе координат; не повторяйте первую вершину в конце и не смешивайте несколько колец.

polygonB

Упорядоченный простой контур в общей системе координат; не повторяйте первую вершину в конце и не смешивайте несколько колец.

Возвращает Reckfell.Collections.Array<Vector2[]>

Array<Vector2[]> контуров; может быть пустым или содержать несколько частей/отверстия. Это не набор готовых физических объектов.

OffsetPolygon2 перегрузки
# OffsetPolygon · 1/2
C#
public static Reckfell.Collections.Array<Vector2[]> OffsetPolygon(Vector2[] polygon, float delta, Geometry2D.PolyJoinType joinType = Geometry2D.PolyJoinType.Square);

Создаёт смещённую замкнутую область: положительная delta расширяет, отрицательная сужает и может уничтожить область или разделить её. По умолчанию Square join; Miter ограничен текущим miter limit 2.0, Round аппроксимирован. Span-overload требует явный joinType.

Параметры
ИмяТипПо умолчанию
polygonVector2[]—
deltafloat—
joinTypeGeometry2D.PolyJoinTypeGeometry2D.PolyJoinType.Square
polygon

Упорядоченный простой контур в общей системе координат; не повторяйте первую вершину в конце и не смешивайте несколько колец.

delta

Знаковое смещение границы в единицах точек: плюс расширяет, минус сужает.

joinType

Square, Round или Miter для стыков; Round приближён, острый Miter ограничивается.

Возвращает Reckfell.Collections.Array<Vector2[]>

Array<Vector2[]> контуров; может быть пустым или содержать несколько частей/отверстия. Это не набор готовых физических объектов.

# OffsetPolygon · 2/2
C#
public static Reckfell.Collections.Array<Vector2[]> OffsetPolygon(ReadOnlySpan<Vector2> polygon, float delta, Geometry2D.PolyJoinType joinType);

Создаёт смещённую замкнутую область: положительная delta расширяет, отрицательная сужает и может уничтожить область или разделить её. По умолчанию Square join; Miter ограничен текущим miter limit 2.0, Round аппроксимирован. Span-overload требует явный joinType.

Параметры
ИмяТипПо умолчанию
polygonReadOnlySpan<Vector2>—
deltafloat—
joinTypeGeometry2D.PolyJoinType—
polygon

Упорядоченный простой контур в общей системе координат; не повторяйте первую вершину в конце и не смешивайте несколько колец.

delta

Знаковое смещение границы в единицах точек: плюс расширяет, минус сужает.

joinType

Square, Round или Miter для стыков; Round приближён, острый Miter ограничивается.

Возвращает Reckfell.Collections.Array<Vector2[]>

Array<Vector2[]> контуров; может быть пустым или содержать несколько частей/отверстия. Это не набор готовых физических объектов.

OffsetPolyline2 перегрузки
# OffsetPolyline · 1/2
C#
public static Reckfell.Collections.Array<Vector2[]> OffsetPolyline(Vector2[] polyline, float delta, Geometry2D.PolyJoinType joinType = Geometry2D.PolyJoinType.Square, Geometry2D.PolyEndType endType = Geometry2D.PolyEndType.Square);

Создаёт полигональную обводку открытой линии с полушириной abs(delta). В текущей Clipper2 отрицательное значение даёт положительную ширину, а не пустой результат. Square ends выступают за концы; Butt заканчивается у них. EndType.Polygon диагностируется: используйте OffsetPolygon. Span-overload требует оба enum явно.

Параметры
ИмяТипПо умолчанию
polylineVector2[]—
deltafloat—
joinTypeGeometry2D.PolyJoinTypeGeometry2D.PolyJoinType.Square
endTypeGeometry2D.PolyEndTypeGeometry2D.PolyEndType.Square
polyline

Упорядоченные вершины открытой линии, обычно минимум две различные точки.

delta

Полуширина обводки в единицах точек; текущий открытый offset использует abs(delta).

joinType

Square, Round или Miter для стыков; Round приближён, острый Miter ограничивается.

endType

Butt/Square/Round либо Joined; Polygon для OffsetPolyline запрещён. Joined соединяет концы линии, но не означает обычную заливку исходной области.

Возвращает Reckfell.Collections.Array<Vector2[]>

Array<Vector2[]> контуров; может быть пустым или содержать несколько частей/отверстия. Это не набор готовых физических объектов.

# OffsetPolyline · 2/2
C#
public static Reckfell.Collections.Array<Vector2[]> OffsetPolyline(ReadOnlySpan<Vector2> polyline, float delta, Geometry2D.PolyJoinType joinType, Geometry2D.PolyEndType endType);

Создаёт полигональную обводку открытой линии с полушириной abs(delta). В текущей Clipper2 отрицательное значение даёт положительную ширину, а не пустой результат. Square ends выступают за концы; Butt заканчивается у них. EndType.Polygon диагностируется: используйте OffsetPolygon. Span-overload требует оба enum явно.

Параметры
ИмяТипПо умолчанию
polylineReadOnlySpan<Vector2>—
deltafloat—
joinTypeGeometry2D.PolyJoinType—
endTypeGeometry2D.PolyEndType—
polyline

Упорядоченные вершины открытой линии, обычно минимум две различные точки.

delta

Полуширина обводки в единицах точек; текущий открытый offset использует abs(delta).

joinType

Square, Round или Miter для стыков; Round приближён, острый Miter ограничивается.

endType

Butt/Square/Round либо Joined; Polygon для OffsetPolyline запрещён. Joined соединяет концы линии, но не означает обычную заливку исходной области.

Возвращает Reckfell.Collections.Array<Vector2[]>

Array<Vector2[]> контуров; может быть пустым или содержать несколько частей/отверстия. Это не набор готовых физических объектов.

PointIsInsideTrianglebool
# PointIsInsideTriangle
C#
public static bool PointIsInsideTriangle(Vector2 point, Vector2 a, Vector2 b, Vector2 c);

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

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

Проверяемая точка в той же системе координат, что геометрия.

a

Вершина a невырожденного треугольника; отдельно определите правило включения границы.

b

Вершина b невырожденного треугольника; отдельно определите правило включения границы.

c

Вершина c невырожденного треугольника; отдельно определите правило включения границы.

Возвращает bool

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

SegmentIntersectsCirclefloat
# SegmentIntersectsCircle
C#
public static float SegmentIntersectsCircle(Vector2 segmentFrom, Vector2 segmentTo, Vector2 circlePosition, float circleRadius);

Возвращает первый допустимый корень пересечения в 0…1, иначе -1. Внешний старт даёт вход, внутренний может дать выход; касание включено. Нужен ненулевой отрезок: это квадратное уравнение с делением на квадрат длины, не универсальная point-in-circle проверка.

Параметры
ИмяТипПо умолчанию
segmentFromVector2—
segmentToVector2—
circlePositionVector2—
circleRadiusfloat—
segmentFrom

Точка в общей системе координат. Для GetClosestPointsBetweenSegments пары именно p1–q1 и p2–q2; для LineIntersectsLine from — точка на прямой.

segmentTo

Точка в общей системе координат. Для GetClosestPointsBetweenSegments пары именно p1–q1 и p2–q2; для LineIntersectsLine from — точка на прямой.

circlePosition

Центр круга в общей системе координат.

circleRadius

Неотрицательный конечный радиус в единицах точек.

Возвращает float

Доля t в 0…1 либо -1; точка равна segmentFrom.Lerp(segmentTo,t).

SegmentIntersectsSegmentVariant
# SegmentIntersectsSegment
C#
public static Variant SegmentIntersectsSegment(Vector2 fromA, Vector2 toA, Vector2 fromB, Vector2 toB);

Ищет единственную точку двух конечных отрезков, допуская общие концы при непараллельности. Коллинеарное перекрытие и вырожденный первый отрезок не дают результата; Nil не является общей проверкой отсутствия общей области.

Параметры
ИмяТипПо умолчанию
fromAVector2—
toAVector2—
fromBVector2—
toBVector2—
fromA

Точка в общей системе координат. Для GetClosestPointsBetweenSegments пары именно p1–q1 и p2–q2; для LineIntersectsLine from — точка на прямой.

toA

Точка в общей системе координат. Для GetClosestPointsBetweenSegments пары именно p1–q1 и p2–q2; для LineIntersectsLine from — точка на прямой.

fromB

Точка в общей системе координат. Для GetClosestPointsBetweenSegments пары именно p1–q1 и p2–q2; для LineIntersectsLine from — точка на прямой.

toB

Точка в общей системе координат. Для GetClosestPointsBetweenSegments пары именно p1–q1 и p2–q2; для LineIntersectsLine from — точка на прямой.

Возвращает Variant

Variant с Vector2 либо Nil; после использования освободите Variant, не считайте (0,0) признаком промаха.

TriangulateDelaunay2 перегрузки
# TriangulateDelaunay · 1/2
C#
public static int[] TriangulateDelaunay(Vector2[] points);

Триангулирует облако точек по Delaunay. Порядок входа не задаёт ограничивающую вогнутую границу; внешние/внутренние ограничения и отверстия не сохраняются автоматически. Индексы идут тройками в исходный points.

Параметры
ИмяТипПо умолчанию
pointsVector2[]—
points

Конечное облако Vector2 в общей системе координат; для Delaunay нужны невырожденные неколлинеарные данные.

Возвращает int[]

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

# TriangulateDelaunay · 2/2
C#
public static int[] TriangulateDelaunay(ReadOnlySpan<Vector2> points);

Триангулирует облако точек по Delaunay. Порядок входа не задаёт ограничивающую вогнутую границу; внешние/внутренние ограничения и отверстия не сохраняются автоматически. Индексы идут тройками в исходный points.

Параметры
ИмяТипПо умолчанию
pointsReadOnlySpan<Vector2>—
points

Конечное облако Vector2 в общей системе координат; для Delaunay нужны невырожденные неколлинеарные данные.

Возвращает int[]

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

TriangulatePolygon2 перегрузки
# TriangulatePolygon · 1/2
C#
public static int[] TriangulatePolygon(Vector2[] polygon);

Триангулирует один простой упорядоченный контур без отдельного набора отверстий. Возвращает индексы исходных вершин тройками; при неудаче пусто. Алгоритм может ослабить проверки для коллинеарных точек и выдать нулевые треугольники: результат не является валидатором качества.

Параметры
ИмяТипПо умолчанию
polygonVector2[]—
polygon

Упорядоченный простой контур в общей системе координат; не повторяйте первую вершину в конце и не смешивайте несколько колец.

Возвращает int[]

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

# TriangulatePolygon · 2/2
C#
public static int[] TriangulatePolygon(ReadOnlySpan<Vector2> polygon);

Триангулирует один простой упорядоченный контур без отдельного набора отверстий. Возвращает индексы исходных вершин тройками; при неудаче пусто. Алгоритм может ослабить проверки для коллинеарных точек и выдать нулевые треугольники: результат не является валидатором качества.

Параметры
ИмяТипПо умолчанию
polygonReadOnlySpan<Vector2>—
polygon

Упорядоченный простой контур в общей системе координат; не повторяйте первую вершину в конце и не смешивайте несколько колец.

Возвращает int[]

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

Geometry2D.PolyBooleanOperation

ЗначениеОписание
Difference = 1

Создайте области, в которых заполнены полигоны субъекта, за исключением областей, где заполнены полигоны обрезки.

Intersection = 2

Создайте области, в которых заполнены как полигоны объекта, так и полигоны клипа.

ОПЕРАЦИЯ_КОР

Union = 0

Создайте области, в которых заполнены либо объектные, либо отсекающие полигоны (или и те, и другие).

Xor = 3

Создавайте области, в которых заполнены либо полигоны объекта, либо полигоны обрезки, но не области, в которых заполнены оба полигона.

Geometry2D.PolyEndType

ЗначениеОписание
Butt = 2

Конечные точки имеют квадратную форму и не имеют расширения.

Joined = 1

Конечные точки соединяются с использованием значения Geometry2D.PolyJoinType, а путь заполняется в виде полилинии.

Polygon = 0

Конечные точки соединяются с использованием значения Geometry2D.PolyJoinType, а путь заполняется в виде многоугольника.

Round = 4

Конечные точки округляются и расширяются на единицы delta.

Square = 3

Конечные точки возводятся в квадрат и расширяются на единицы delta.

Geometry2D.PolyJoinType

ЗначениеОписание
Miter = 2

Существует необходимый предел для соединений под углом, поскольку смещение кромок, которые соединяются под очень острыми углами, приведет к образованию чрезмерно длинных и узких «шипов». Для любого соединения кромок, если смещение под углом превышает максимальное расстояние, применяется «квадратное» соединение.

Round = 1

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

Square = 0

Возведение в квадрат применяется равномерно ко всем выпуклым ребрам при 1 * delta.

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

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

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

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