Войти
ПрограммированиеФорумОбщее

Математика компьютерной игры (5 стр)

Страницы: 1 2 3 4 5
#60
17:33, 10 окт. 2011

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


#61
17:37, 10 окт. 2011

Zefick
>
> -4.3711388e-8? Это -0.000000043711388. Как видишь, не ноль, значит что-то не
> так.
У меня жир монитором затёк.

#62
18:18, 10 окт. 2011

Алексей Патрашов, товарищ, перестаньте мусорить в разделе программирования ;-)

#63
18:25, 10 окт. 2011

Что-то я не догоняю. Нарисую две прямых (точнее на рисунке это отрезки), заданные точками:

Изображение

Прямые перпендикулярны и пересекутся в точке с координатами (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;
}

Всё нормально работало до тех пор, пока я не решил подставить те две прямые, которые написал в начале поста. Проследив по коду, у меня получилось что он определяет что они параллельны. Где ошибка?

Страницы: 1 2 3 4 5
ПрограммированиеФорумОбщее

Тема в архиве.