Какое значение имеет точечный продукт в мире для локальных преобразований? - PullRequest
0 голосов
/ 25 мая 2020

Ищу помощь в понимании того, почему работает эта функция «Мир в локальное пространство».

Я прорабатываю Программирование искусственного интеллекта игры на примере Бакленда Следующая функция используется в книге для преобразовать точку из мирового пространства в локальное координатное пространство агента (его i hat и j hat - это AgentHeading и AgentSide соответственно)

    inline Vector2D PointToLocalSpace(const Vector2D &point,
                             Vector2D &AgentHeading,
                             Vector2D &AgentSide,
                              Vector2D &AgentPosition)
{

    //make a copy of the point
  Vector2D TransPoint = point;

  //create a transformation matrix
    C2DMatrix matTransform;

  double Tx = -AgentPosition.Dot(AgentHeading);
  double Ty = -AgentPosition.Dot(AgentSide);

  //create the transformation matrix
  matTransform._11(AgentHeading.x); matTransform._12(AgentSide.x);
  matTransform._21(AgentHeading.y); matTransform._22(AgentSide.y);
  matTransform._31(Tx);           matTransform._32(Ty);

  //now transform the vertices
  matTransform.TransformVector2Ds(TransPoint);

  return TransPoint;
}

Мне сложно понять, почему это работает с точки зрения векторов и матриц. В чем причина использования точечного произведения в координатах перевода? Почему это скалярное произведение позиции агента и его заголовка? Чему это скалярное произведение геометрически соответствует?

Почему бы просто не перевести по позиции агента?

Например, почему бы не просто

matTransform.translate(-AgentPosition);
matTransform.rotate(AgentHeading, AgentSide);

Есть ли более простые способы представления этот алгоритм?

...