Встроенная трассировка лучей? - PullRequest
3 голосов
/ 23 апреля 2010

Относительно этого вопроса Мне было интересно, есть ли в .NET какие-либо библиотеки (или функции), которые я могу использовать, чтобы обнаружить, сталкивается ли одна точка с другой.углы, которые я должен использовать, но есть ли такая функция

func(point src, rect target, angle, distanceOfVision, listPointOrRectOfWalls)

Довольно маловероятно, но я не знаю формулу или как начать.Это быстрый и грязный прототип.Я подумываю о том, чтобы написать функцию, но угол падения должен сделать прямоугольник прямой видимости и проверить, находятся ли какие-либо точки стены между src и целью.

1 Ответ

3 голосов
/ 23 апреля 2010

Я бы решил проблему следующим образом:

  1. Три точки прямоугольника определяют плоскость, в которой лежит прямоугольник.
  2. Вместо представления линии в виде точкиугол, представьте его как точку и вектор: source_point + direction_vector * t.Если вы установите t = 1, у вас есть две точки, определяющие вашу линию.
  3. Вычислить пересечение линии с плоскостью: http://en.wikipedia.org/wiki/Line-plane_intersection
  4. Проверьте, содержится ли точка пересечения в прямоугольнике.
...