Русский | English

Модуль CastleLine2DMath

Используемые модули
Классы, интерфейсы и объекты
Типы
Константы
Переменные

Описание

Модуль содержит некоторые математические методы, а также методы для построения некоторых примитивов.

Обзор

Процедуры и функции

function DoFloat(var StringValue:string;const Remain:string=''):single;
function PSDistanceEx(const P,SP1,SP2:TVector2;var Distance:Single; var PP:TVector2):integer;
function CrossingSegments(const a1,a2,b1,b2:TVector2; var CrossPoint:TVector2):shortint;
function IsClockwiseTriangle(A,B,C:TVector2):boolean;
function AddArcBetweenPoints(var Arc:TVector2List; const Center,O,A,B:TVector2; const EdgesCount:integer):single;
procedure AddRoundBoxTop(var Arc:TVector2List; const A,B:TVector2; const Opposite:Tvector2; const EdgesCount:integer);
procedure AddHalfCircle(var Arc:TVector2List; const A,B:TVector2; const EdgesCount:integer; const Opposite:Tvector2);
procedure AddTriangle(var Arc:TVector2List; const A,B,C:TVector2);
procedure AddTriangleOpposite(var Arc:TVector2List; const A,B:TVector2; const Opposite:Tvector2);
procedure AddTriangleTop(var Arc:TVector2List; const A,B:TVector2; const Opposite:Tvector2);
procedure AddHalfBox(var Arc:TVector2List; const A,B:TVector2; const Opposite:Tvector2);
procedure AddBox(var Arc:TVector2List; const A,B:TVector2; const Opposite:Tvector2);
procedure AddRect(var Arc:TVector2List; const A,B:TVector2; width:single);
function AddCrossSegments(var Arc:TVector2List; const O,A1,A2,B1,B2:TVector2):single;
function DoGoodTriangle(var Lt:TVector2List; A,B,C:integer; Scale:TVector2):boolean;

Описание

Процедуры и функции

function DoFloat(var StringValue:string;const Remain:string=''):single;

Преобразует строку StringValue в число путем удаления лишнего. Remain это неудаляемый остаток в строке (можно использовать для того, чтобы '-' в начале строки не удалялся)

function PSDistanceEx(const P,SP1,SP2:TVector2;var Distance:Single; var PP:TVector2):integer;

Минимальное расстояние от точки (P) до отрезка (SP1:SP2) с расчетом точки проекции (PP) на отрезок.
0 - точка проецируется на отрезок: Distance = расст.от P до отрезка SP1,SP2. PP - проекция точки P на отрезок SP1,SP2
1 - точка P лежит "левее" SP1: Distance = расст.от P до SP1. PP=SP1
2 - точка P лежит "правее" SP2: Distance = расст.от P до SP2. PP=SP2

function CrossingSegments(const a1,a2,b1,b2:TVector2; var CrossPoint:TVector2):shortint;

Пересечение отрезков A1:A2, B1:B2.
1 Если есть точка пересечения "CrossPoint"
0 если это параллельные линии
-1 если нет точек пересечения

function IsClockwiseTriangle(A,B,C:TVector2):boolean;

Если порядок обхода треугольника A,B,C по часовой стрелке, то вернет True

function AddArcBetweenPoints(var Arc:TVector2List; const Center,O,A,B:TVector2; const EdgesCount:integer):single;

Строит дугу между точками A,B c центром в точке Center
O - точка соединения сегментов (может совпадать с Center)
EdgesCount - количество сегментов
Полученные треугольники добавляются в Arc
Result = длинна дуги

procedure AddRoundBoxTop(var Arc:TVector2List; const A,B:TVector2; const Opposite:Tvector2; const EdgesCount:integer);

Строит квадрат у которого скруглен один угол на отрезке А:B в направлении противоположном Opposite. EdgesCount количество сегментов дуги. Result = длинна дуги.

procedure AddHalfCircle(var Arc:TVector2List; const A,B:TVector2; const EdgesCount:integer; const Opposite:Tvector2);

Строит полукруг на отрезке А:B в направлении противоположном Opposite
EdgesCount - количество сегментов
Полученные треугольники добавляются в Arc

procedure AddTriangle(var Arc:TVector2List; const A,B,C:TVector2);

Добавит треугольник в Arc

procedure AddTriangleOpposite(var Arc:TVector2List; const A,B:TVector2; const Opposite:Tvector2);

Строит прямоугольный равнобедренный треугольник на отрезке А:B в направлении противоположном Opposite. Гипотенуза - A:B

procedure AddTriangleTop(var Arc:TVector2List; const A,B:TVector2; const Opposite:Tvector2);

Строит прямоугольный равнобедренный треугольник на отрезке А:B в направлении противоположном Opposite. Гипотенуза A:NewPoint

procedure AddHalfBox(var Arc:TVector2List; const A,B:TVector2; const Opposite:Tvector2);

Строит половину квадрат на отрезке А:B в направлении противоположном Opposite

procedure AddBox(var Arc:TVector2List; const A,B:TVector2; const Opposite:Tvector2);

Строит квадрат на отрезке А:B в направлении противоположном Opposite

procedure AddRect(var Arc:TVector2List; const A,B:TVector2; width:single);

Строит прямоугольник осью симметрии которого является отрезок A:B.
Создает 0..5 точек 4 точка равна 0 точке. 5 точка равна 2 точке
При A.X<B.X нулевая точка это левая нижняя
При A.X>B.X нулевая точка это правая верхняя
Если A.X=B.X и A.Y<B.Y нулевая точка это правая нижняя
Если A.X=B.X и A.Y>B.Y нулевая точка это левая верхняя
Обход прямоугольника по часовой стрелке
width - высота прямоугольника

function AddCrossSegments(var Arc:TVector2List; const O,A1,A2,B1,B2:TVector2):single;

Добавит треугольники для соединения двух отрезков в точке пересечения вне этих отрезков. A1:A2 первый отрезок. B1:B2 второй отрезок. O - точка соединения треугольников.
В результате построит треугольники (O,A2,cross) и (O,B2,cross).
Result = длина построенных отрезков.

function DoGoodTriangle(var Lt:TVector2List; A,B,C:integer; Scale:TVector2):boolean;

Сортирует вершины треугольника в порядок обхода по часовой стрелке в зависимости от Scale (во 2 и 4 четвертях порядок обхода меняется).
Если произведены изменения (поменялись местами B и С), то вернет true.


Сгенерировал PasDoc 0.16.0.