2013-05-25 3 views
0

Я не могу понять, как именно фраза этот вопрос, поэтому я сделал грубый графический объяснить, что я пытаюсь спросить: enter image description hereКак проверить, если точка находится в линии тени

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

+0

В качестве побочного примечания - этот вопрос, вероятно, не относится к теме для stackoverflow :). – DuckMaestro

+0

Я думал, что это может быть, но из-за того, что мне это объясняется мне в терминах концепций программирования, я думал, что это была честная игра здесь. – lfnunley

ответ

1

Если предположить, что линия точек сегмента являются p1 и p2, а ваша точка запроса q:

  1. Вычислить отрезок длины b := |p2 - p1| и направление линии (нормированная) z := (p2 - p1)/b и

  2. Вычислить вектор от p1 до q, определяемый как w := (q - p1).

  3. Запросить точку запроса на бесконечную линию, вычислив q' := w dot z. Это дает вам положение точки, как если бы она перемещалась в линию по ортогональному пути из исходного положения.

  4. Осмотрите q: Если q > b, то ваша точка запроса находится за пределами тени сегмента от p2. Если q < 0, то ваша точка запроса находится за пределами тени сегмента линии, минуя p1. В противном случае q «внутри».

+0

Спасибо, это было очень легко следовать. Является ли [этот код] (http://pastebin.com/UWFPqF4g) правильной реализацией этого? Извините дополнительные сложности графического lib, которые я использую. РЕДАКТИРОВАТЬ: сохранить за то, что мне нужно использовать формулу расстояния вектора для строки 5, которую я добавляю к моему коду сейчас – lfnunley

+0

Это сработало! [Вот переработанный рабочий код] (http://pastebin.com/Yb0FFegx) – lfnunley

0

Базовая точка А, базовая точка В, линии АВ, AD и BE (где ДЕ параллельно АВ и дальше от AB, чем C. Если СА или СВ пересекает AD или BE, то С вне мишени Если ни CA, ни CB не пересекаются с AD или BE, то C находится внутри целевой области. И если оба CA и CB пересекаются с AD и BE, то C находится в AD или BE.

В вашем левом примере ABC является треугольник, который не пересекается с AD или BE. В вашем примере справа, ABC треугольник, и CB пересекает AD.

весело кодирования, что!