Показать сообщение отдельно
Старый 15.12.2012, 03:29   #1
WISHMASTER35
Бывалый
 
Аватар для WISHMASTER35
 
Регистрация: 21.12.2008
Адрес: UA
Сообщений: 878
Написано 105 полезных сообщений
(для 357 пользователей)
Ближайшая вершина бокса до прямой в 3д

Есть такой алгоритм
    public static Vector2f getClosestVertex(Box box, Line line) {
        Vector2f dir = Vector2f.sub(line.getB(), line.getA()).getDirection();
        dir = new Vector2f(dir.y, -dir.x);
        if( Vector2f.sub(box.getPos(), line.getA()).dot(dir) > 0 ) dir.mul(-1); 
        
        Vector2f dirX = box.getDirX().getDirection();
        Vector2f dirY = box.getDirY().getDirection();
        
        float sx = Math.signum( dirX.dot(dir) );
        float sy = Math.signum( dirY.dot(dir) );
        
        Vector2f closest = box.getPos();
        closest.add( Vector2f.mul(box.getDirX(), sx) );
        closest.add( Vector2f.mul(box.getDirY(), sy) );
        return closest;
    }
Суть его: находим перпендикуляр прямой, нормализуем его, и проверяем оси бокса смотрят на перпендикуляр или нет. Из этих данных вычисляем вершину: box.pos + box.dirX*sx + box.dirY*sy.
Все довольно просто, но как для 3д это сделать? Ведь перпендикуляр не вычислишь.

Нужно для нахождения ближайших точек между боксом и отрезком. Потом я нахожу ближайшие точки на боксе от вершин отрезка. И из этих 3х точек выбираю ближайшие к отрезку. Может есть проще пути.
(Offline)
 
Ответить с цитированием