Только сейчас сообразил. А нельзя камеру сцепить с какой-нибудь сферой или окружностью? Тогда они будут перемещаться вместе, а на углы натыкаться будет внешняя сфера, а не камера. Тогда минимальное расстояние будет всегда обеспечено. Только я не знаю, насколько возможно сцепить объект с камерой.
Zefick
>
> -4.3711388e-8? Это -0.000000043711388. Как видишь, не ноль, значит что-то не
> так.
У меня жир монитором затёк.
Алексей Патрашов, товарищ, перестаньте мусорить в разделе программирования 
Что-то я не догоняю. Нарисую две прямых (точнее на рисунке это отрезки), заданные точками:

Прямые перпендикулярны и пересекутся в точке с координатами (2,0). Есть у нас общее уравнение прямой:

В моём случае найдём уравнение прямой по по двум точкам:

Это уравнение можно выразить в:

Таким образом найдём уравнения прямой для обеих прямых и составим систему уравнений, где сможем легко найти точку пересечения. Но следует сделать проверку на параллельность прямых. Если A1*B2-A2*B1 равно 0, то они параллельны. Написал функцию:
bool StraightsIntersection(const Vector& _vP1,const Vector& _vP2,const Vector& _vP3,const Vector& _vP4,Vector* _vPI) { float a1=_vP1.y-_vP2.y; float b1=_vP2.x-_vP1.x; float c1= _vP1.x*_vP2.y-_vP2.x*_vP1.y; float a2=_vP3.y-_vP4.y; float b2=_vP4.x-_vP3.x; float c2= _vP3.x*_vP4.y-_vP4.x*_vP3.y; if( a1*b2-a2*b1==0) return false; float x=( b1*c2-b2*c1)/( a1*b2-a2*b1); float y=( c1*a2-c2*a1)/( a1*b2-a2*b1); if( _vPI) *_vPI=Vector( x,y); return true; }
Всё нормально работало до тех пор, пока я не решил подставить те две прямые, которые написал в начале поста. Проследив по коду, у меня получилось что он определяет что они параллельны. Где ошибка?
Тема в архиве.