LINUX.ORG.RU

История изменений

Исправление linuhs_user, (текущая версия) :

Ну тебе нужно записать в какой нибудь массив точки углов карты по периметру, и получится как бы контур карты, и проверяй коллизию EntityToMapLine, к примеру таким алгоритмом.

struct Point {
  double x;
  double y;
};

struct Line {
  struct Point a;
  struct Point b;
};

double
line_len(struct Point a, struct Point b)
{
  return(sqrt(pow(a.x - b.x) + pow(a.y - b.y));
}

bool
collision_point_to_line(struct Point p, struct Line line)
{
  if(line_len(p, line.a) + line_len(p, line.b) == line_len(line.a, line.b))
    return(true);
  else
    return(false);
}

Исходная версия linuhs_user, :

Ну тебе нужно записать в какой нибудь массив точки углов карты по периметру, и получится как бы контур карты, и проверяй коллизию EntityToMapLine, к примеру таким алгоритмом.

bool
collision_point_to_line(struct Point p, struct Line line)
{
  double len0, len1, line_len;
  
  len0 = sqrt(pow(p.x - line.x1) + pow(p.y - line.y1));
  len1 = sqrt(pow(p.x - line.x2) + pow(p.y - line.y2));
  line_len = sqrt(pow(line.x1 - line.x2) + pow(line.y1 - line.y2));
  if(len0 + len1 == line_len)
    return(true);
  else
    return(false);
}