- •1. Постановка задачи
- •Математический аппарат:
- •2. Математическое моделирование
- •2.1. Математические модели геометрических объектов
- •2.7. Определение вхождения точки в многоугольник (Ray Casting)
- •2.8. Сортировка точек на прямой (Скалярное произведение)
- •2.9. Расчет угла поворота (Арктангенс)
- •2.10. Вычисление центроида группы
- •3. Структура и Архитектура приложения
- •3.1. Слой Математического Ядра
- •3.2. Взаимодействие приложения с математикой (Interaction Pipeline)
- •3.3. Абстракция Системы Координат
- •4. Организация данных
- •5. Руководство пользователя
- •Список использованных источников
- •Заключение
- •Приложение а Реализация математического ядра
- •Реализация матричных преобразований
- •Парсинг и сохранение данных
- •Логика отрисовки и взаимодействия
2.7. Определение вхождения точки в многоугольник (Ray Casting)
Для определения того, является ли отрезок между точками пересечения «телом» фигуры или «пустотой», используется алгоритм Трассировки луча (Ray Casting Algorithm) [6], основанный на правиле четности-нечетности (Even-Odd Rule).
Суть
метода: Из
проверяемой точки
выпускается условный луч в произвольном
направлении (в текущей реализации –
горизонтально вправо в сторону возрастания
по оси X).
Подсчитывается количество пересечений луча с ребрами многоугольника.
Нечетное число пересечений (1,3,5…): Точка находится внутри.
Четное число пересечений (0,2,4…): Точка находится снаружи.
Математическое
условие пересечения луча с ребром
Пересечение
фиксируется, если выполняются два
условия:
Точка
находится по вертикали между
и
:
(
Точка находится слева от точки пересечения ребра с горизонталью:
2.8. Сортировка точек на прямой (Скалярное произведение)
Для
корректного определения соседних точек
пересечения необходимо упорядочить
найденные точки
вдоль секущей прямой. Поскольку
прямая может быть вертикальной (сортировка
по
невозможна) или гооризонтальной,
используется проецкия точки на
направляющий вектор прямой.
Направляющий
вектор прямой: Если
уравнение прямой
,
то ее направляющий вектор
.
Параметризация: Положение каждой точки определяется через скалярное произведение вектора точки на направляющий вектор:
Сортировка:
Точки сортируются
по возрастанию параметра
,
что гарантирует их верную последовательность
независимую от угла наклона прямой.
2.9. Расчет угла поворота (Арктангенс)
Для преобразования координат курсора мыши в угол поворота матрицы используется функция арктангенса от двух аргументов (atan2).
Пусть
– центр вращения, а
– текущая позиция курсора.
Угол вычисляется как:
В
отличие от обычного
,
функция
корректно определяет квадрант угла и
возвращает значение в диапазоне
,
что позволяет реализовать круговое
вращение на 360 градусов.
2.10. Вычисление центроида группы
При вращении группы объектов за центр вращения принимается их геометрический центр масс (центроид). Он вычисляется как среднее арифметическое координат всех вершин всех выделенных многоугольников:
,
3. Структура и Архитектура приложения
Приложение разработано на стеке: TypeScript [3] + Vue 3 [1] + PixiJS [2]. Архитектура следует паттерну MVC (Model-View-Controller), обеспечивая отделение данных от логики и представления.
Структура файлов проекта:
Model (Данные):
src/core/types.ts: Содержит классы Polygon (массив вершин, цвет, методы трансформации) и Line. Эти классы хранят чистые математические данные и не зависят от графического движка.
Logic / Math (Ядро):
src/core/math/Matrix.ts: Реализация матричных операций (умножение матриц, трансформация точки).
src/core/math/Geometry.ts: Библиотека статических методов. Здесь реализованы: вычисление коэффициентов прямой, метод Крамера, тест на вхождение точки в полигон (Ray Casting) и основной алгоритм отсечения cutPolygon.
src/core/utils/CoordinateSystem.ts: Утилиты для перевода координат World <-> Screen.
View (Представление):
src/components/PixiCanvas.vue: Компонент, отвечающий за рендеринг. Использует библиотеку PixiJS.
Функции View: Отрисовка координатной сетки, отрисовка полигонов, обработка событий ввода (мышь/клавиатура). View не выполняет математических расчетов отсечения, а только запрашивает результат у Geometry.ts.
Controller (Управление):
src/App.vue: Корневой компонент. Управляет состоянием приложения (текущий инструмент, список фигур), обрабатывает операции с файлами (Open/Save) и связывает интерфейс с холстом.
