Как построить одинаковый отрезок вне зависимости от порядка точек?
Даны точки:
Первая пара: A{x1, y1, z1} и B{x2, y2, z2}
Вторая пара: B{x2, y2, z2} и A{x1, y1, z1}
Из первой пары получается отрезок AB, а из второй BA. Как видно из данных вершин - эти отрезки одинаковы и проходят через одни и те же точки.
Задача вне зависимости от того, как были записаны точки (сначала A, а потом B, или наоборот) всегда получать отрезок AB. Т.Е если на входе у нас точки записаны как BA, то их нужно поменять местами, чтоб получить AB. Как можно это сделать?
hint000, по сути эти отрезки можно рассматривать как вектора. Вектора AB и BA не равны, поэтому точки всегда нужно брать из одного конца в другой и никак иначе
hint000, Если это поможет, то в целом задача такая:
Есть 2 треугольника(a и b). Они являются смежными, т.е. 1 из сторон у них общая. Однако когда для первого треугольника эта сторона будет AB, то для второго BA. Задача как-то брать вершины так, чтоб такого не было, чтоб всегда было AB
Вот 2 смежных треугольника. Стрелками показал как берутся точки у них. Как видите общая сторона берётся по разному у них. Нужно как-то сделать так,что-бы она бралась одинаково
Для правильного вопроса надо знать половину ответа
А в чём проблема то? Отсортируйте отрезки по координатам.
если xA > xB
или (xA == xB и yA > yB)
или (xA == xB и yA == yB и zA > zB)
то T := A, A := B, B := T
Quark, если работаете с классами, и у вас заведомо (из предыдущего кода) только два случая
(1) edge1 == edge2, либо
(2) edge1 == - edge2,
то даже проверка не нужна, можно тупо присвоить
edge2 = edge1
hint000, Данное решение не приемлемо для меня. Ведь нужно сразу знать и edge1 и edge2. Эджи я храню в хэш мапе, для этого мне и нужно было их строить независимо от порядка вершин)
hint000, ну почему же ничего общего? Я вставляю эджи в хэшмапу, следовательно порядок точек у эджа для меня важен. Поэтому и спросил как можно отсортировть точки
Quark, если это вы стороны треугольников обрабатываете, то лучше брать не отрезки в 3d координатах, а номера точек. Там же треугольники индексами в массиве точек заданы, верно? Сортировать 2 инта всяко легче чем точки.
Потому что:
вставили какие-то грани в хеш, дошли до очередной грани, поискали её в хеше, если нашли, то отбросили и пошли дальше, если отсутствует, то перевернули грань, поискали перевёрнутую в хеше, если нашли, то отбросили, если и перевёрнутую не нашли, то добавили в хеш.
Совсем о другом оказалась задача. https://tproger.ru/explain/xyproblem/
Wataru, Нет, к сожалению Assimp не дает возможность получить ссылки на точки. Всё что я могу получить - это просто массив точек, размер которого равен количеству треугольников * 3.