Преобразование треугольников в четырехугольники

Автор
Сообщение
Репутация: 0
На сайте c 06.09.2018
Сообщений: 3
Тверь

Добрый день!

Может ли кто то помочь с преобразованием треугольников в четырехугольники? Сам плохо в этом разбираюсь, но нужно сделать свою функцию для этого (язык программирования не имеет значения).

Есть список полигонов вида:[[0, 1, 2], [2, 1, 3]....] и вершин [0.1, 0.2, 0.1.....]

Могу заплатить за помощь или готовое решение.

На сайте c 06.02.2012
Сообщений: 883
Калининград

https://www.youtube.com/watch?v=RVIJVOhUaek 

первое же видео на ютубе

Репутация: 0
На сайте c 06.09.2018
Сообщений: 3
Тверь
Цитата Motocat:
первое же видео на ютубе

Мне нужен алгоритм, в максе я знаю как это сделать.

На сайте c 31.01.2011
Сообщений: 273
город Хряков

Цитата Motocat:

https://www.youtube.com/watch?v=RVIJVOhUaek  

первое же видео на ютубе

Я так понял, ТС спрашивает про алгоритм, а не про какую кнопку нажать.

Цитата EugeneEx:

Добрый день!

Может ли кто то помочь с преобразованием треугольников в четырехугольники? Сам плохо в этом разбираюсь, но нужно сделать свою функцию для этого (язык программирования не имеет значения).

Есть список полигонов вида:[[0, 1, 2], [2, 1, 3]....] и вершин [0.1, 0.2, 0.1.....]

Могу заплатить за помощь или готовое решение.

Не на том форуме вопрос.

Я так понял, вам нужен алгоритм. Если так, то советую поискать на хабре, наверняка где-то есть уже написанное решение.

Ну или давайте разберемся :)

У вас есть массив треугольников, каждый треугольник имеет вид [1, 2, 3] - массив из трех точек.

Нужно получить на выходе массив четырехугольников. Четырехугольник - это два треугольника. Соответствнно, на выходе у вас будет массив вида

[[[1,2,3][4,2,3], [3,4,5], [4,5,6]]]

или

сетка[

четырехугольник1[

треугольник1[точка1, точка2, точка3],

треугольник2[точка1, точка2, точка3]

],

четырехугольник2[

треугольник1[точка1, точка2, точка3],

треугольник2[точка1, точка2, точка3]

],

четырехугольник2[треугольник1[точка1, точка2, точка3],треугольник2[точка1, точка2, точка3]],

и т. д.

Таким образом, Вам надо найти пары треугольников, имеющие общую грань.

Для того, чтобы этого достичь, самый простой, прямой и медленный путь выглядит так:

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

2. Начинаем перебор всех треугольников исходного массива.

3. Для каждого треугольника перебираем все остальные треугольники исходного массива, ищем такой, с которым у текущего треугольника есть общая грань (две общих точки).

4.1. Если не нашли пару - это изолированный треугольник. Убираем его в отдельный массив изолированных треугольников.

4. Если нашли пару, тогда оба треугольника удаляем из массива, и создаем элемент массива результатов - квад, состоящий из двух найденных треугольников.

5. Ищем следующий треугольник для анализа. Для этого нужно сделать два шага:

5.1 перебираем уже найденные квады, пробуем найти к каждому их треугольнику прилегающий треугольник в исходном массиве (так же, как в пункте 3). Если поиск удался - повторяем алгоритм с шага 3 для найденного треугольника из исходного массива.

5.2 если смежный треугольник в исходном массиве не найден - берем первый оставшийся треугольник исходного массива, и повторяем для него процедуру с шага 3.

6. Повторяем процедуру до тех пор, пока в исходном массиве остаются любые треугольники.

Таким образом, на входе у нас есть исходный массив треугольников, на выходе мы получаем массив квадов, каждый из которых состоит из двух треугольников, и массив треугольников, не имеющих смежных (см. видео выше - там видно, что после квадификации осталось несколько треугольников, которые "не пригодились").

Ладно, вот вам пдф, там английский язык и уйма математики, но в разделе 3.1 - алгоритмы квадификации :)

http://www-sop.inria.fr/members/David.Bommes/publications/star_quads.pdf  

Репутация: 0
На сайте c 06.09.2018
Сообщений: 3
Тверь
bryarey,Спасибо!
Читают эту тему: