222
правки
Изменения
м
** Не забываем поменять у half-edgeй исходного face поле incident_face на face1 и face2 соответственно
* Мы знаем куда(в какие фэйсы {{---}} edge->twin->incident_face) пошла наша прямая. Запускаемся от них и разбиваем их аналогично. Если пересечение было в точке, перебираем faceы(next_face = edge->prev->twin->incident_face), пока не найдем нужный. Если фэйс бесконечный {{---}} идем только в одну сторону
→Построение РСДС множества прямых
* Локализовать рандомную точку прямой в face
* Найти half-edge'и, которые пересекает эта прямая(их будет не больше 2, если считать что пересечение в точке за одно ребро)
* Разбить текущий face на два face1 и face2
** Если пересечение не в точке, разбиваем ребра на два {{---}} a, b и c, d, так как пересечения два
** Создаем два half-edge {{---}} отрезок прямой, попадающий в фэйс
** Перекидываем ссылки этих half-edgeй как надо** Не забываем поменять у half-edgeй исходного face поле incident_face на face1 и face2 соответственно* Мы знаем куда(в какие фэйсы {{---}} edge->twin->incident_face) пошла наша прямая. Запускаемся от них и разбиваем их аналогично. Если пересечение было в точке, перебираем faceы(next_face = edge->prev->twin->incident_face), пока не найдем нужный. Если фэйс бесконечный {{---}} идем только в одну сторону Вот эти ссылки надо не забыть поменять:<pre>
half_edge1->origin = intersection_line_and_edge1;
half_edge2->origin = intersection_line_and_edge2;
d->next = half_edge2;
</pre>
==См. также==
[http://cs.stackexchange.com/a/18167 Более поясняющая статья.]