Ближайшая вершина бокса до прямой в 3д
Есть такой алгоритм
Код:
public static Vector2f getClosestVertex(Box box, Line line) { Все довольно просто, но как для 3д это сделать? Ведь перпендикуляр не вычислишь. Нужно для нахождения ближайших точек между боксом и отрезком. Потом я нахожу ближайшие точки на боксе от вершин отрезка. И из этих 3х точек выбираю ближайшие к отрезку. Может есть проще пути. |
Ответ: Ближайшая вершина бокса до прямой в 3д
Есть же расстояние от прямой до точки, взять и проверить его для всех вершин и выбрать ту что ближе.
http://ru.onlinemschool.com/math/lib...ometry/p_line/ |
Ответ: Ближайшая вершина бокса до прямой в 3д
dsd, ну это ясно. А быстрее как сделать?
|
Ответ: Ближайшая вершина бокса до прямой в 3д
Я конечно понимаю, что перебрать все вершины не так уж и сложно. Но все же интересно можно не переберая их определить ближайшую? Для 2д это легко получилось.
|
Ответ: Ближайшая вершина бокса до прямой в 3д
Думаю можно и без перебора
вроде того: Код:
Vector3f vectorA = segment.positionA - box.center; ЗЫ хотя я это не проверял, просто мысль :) |
Ответ: Ближайшая вершина бокса до прямой в 3д
Platon, я в своем первом посту эту идею и написал. Но для 2д было все просто.
Может твой алгоритм заработает. Может методом разделяющей оси это можно решить, но тут я совсем слабо понимаю. |
Ответ: Ближайшая вершина бокса до прямой в 3д
Цитата:
про SAT кратко и помоему вполне понятно написано здесь для бокса ориентированого по глобальным осям, иначе говоря AABB, SAT довольно прост - проекции бокса на оси это минимальное и максимальное значение вершин по соответствующим осям X, Y, Z. Ну и отрезок так-же спроецировать можно и сравнить проекции, только вот что это даст, кроме теста пересечения? :-) ЗЫ Кстати тот код что ты описал для 2д кажется не рабочий, ты его тестил? |
Ответ: Ближайшая вершина бокса до прямой в 3д
Цитата:
Чтобы понять SAT нужно не прочитать, а представить это все. Я до сих пор не понимаю как оно помогает найти точки пересечения. Вот демки которые помогут это представить http://www.metanetsoftware.com/technique/tutorialA.html Мой алгоритм конечно работает. Находим перпендикуляр отрезка. И просто проверяем оси бокса смотрят на отрезок или в другую сторону. Конечно это для прямой, а не отрезка. |
Ответ: Ближайшая вершина бокса до прямой в 3д
Вложений: 1
Platon, что-то твой алгоритм не работает. Записал так
Код:
Vector2f vectorA = line.getA().sub(box.getPos()); |
Часовой пояс GMT +4, время: 11:23. |
vBulletin® Version 3.6.5.
Copyright ©2000 - 2024, Jelsoft Enterprises Ltd.
Перевод: zCarot