Геометрические алгоритмы - Разработка программы для реализации редактора временных графов синхронизации

Поворот точки относительно центра на заданный угол:

X = o. X + (p. X-o. X) * cos(angle) - (p. Y-o. Y) * sin(angle)

Y = o. Y + (p. X-o. X) * sin(angle) + (p. Y-o. Y) * cos(angle)

Где o. X, o. Y -- координаты центра поворота, p. X, p. Y -- координаты исходной точки, angle -- угол. Алгоритм применяется при повороте стрелки направления дуги вокруг центра позиции.

Точка на окружности с заданным отступом:

Angle := math. Atan2(x-c. X, y-c. Y)

DX := (c. r + distance) * math. Sin(angle)

DY := (c. r + distance) * math. Cos(angle)

Где c. X, c. Y, c. r -- координаты центра и радиус окружности, distance -- отступ от дуги окружности; x, y -- координаты направляющей точки. В сочетании с предыдущим алгоритмом позволяют ориентировать указатель дуги как показано на рис. 14.

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

Рисунок 14. Поворот стрелки в заданном точкой направлении, с заданным отступом от дуги окружности

Проверка пересечения двух прямоугольников:

RectA. X1 < RectB. X2 &;&; RectA. X2 > RectB. X1 &;&;

RectA. Y1 < RectB. Y2 &;&; RectA. Y2 > RectB. Y1

Где RectA, RectB -- заданные прямоугольники. Используется при выделении элементов (рис. 15).

пересечение прямоугольной части перехода инструментом выделения

Рисунок 15. Пересечение прямоугольной части перехода инструментом выделения

Проверка пересечения двух отрезков на плоскости:

X0, y0, x1, y1 := p0.X, p0.Y, p1.X, p1.Y

X2, y2, x3, y3 := p2.X, p2.Y, p3.X, p3.Y

Sx1 := x1 - x0

Sy1 := y1 - y0

Sx2 := x3 - x2

Sy2 := y3 - y2

S := (-sy1*(x0-x2) + sx1*(y0-y2)) / (-sx2*sy1 + sx1*sy2)

T := (sx2*(y0-y2) - sy2*(x0-x2)) / (-sx2*sy1 + sx1*sy2)

If s >= 0 &;&; s <= 1 &;&; t >= 0 &;&; t <= 1 {

Return true

}

Где p0, p1 -- концы первого отрезка; p2, p3 -- концы второго. Используется при удалении дуг методом "отрезания" огибающих ломанных. На рис. 16 дуга будет удалена, на рис. 17 -- нет.

удаление дуги

Рисунок 16. Удаление дуги

отрезки не пересекаются

Рисунок 17. Отрезки не пересекаются

Похожие статьи




Геометрические алгоритмы - Разработка программы для реализации редактора временных графов синхронизации

Предыдущая | Следующая