2015-07-23 5 views
0

Допустим, у меня есть строка, определенный в 3-х измерениях следующим образом:Нахождение точки пересечения линии и прямоугольник

class Line{ 
    float startx; 
    float starty; 
    float startz; 
    float endx; 
    float endy; 
    float endz; 
}; 

, а также прямоугольник, определенный в 3-х измерениях:

class Rectangle{ 
    float ax; 
    float ay; 
    float az; 
    float bx; 
    //... 
    float dz; 
}; 

Как я могу сделать функцию, чтобы определить, в какой точке, если вообще, данная линия и прямоугольник пересекаются?

+0

У вас возникли проблемы с математикой или превращением ее в часть кода? – chris

+0

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

+0

Существует уже хороший ответ на тестирование для пересечения между двумя строками в [http://stackoverflow.com/questions/563198/how-do-you-detect-where-two-line-segments-intersect](http: //stackoverflow.com/questions/563198/how-do-you-detect-where-two-line-segments-intersect). Если вас интересует только проверка пересечения границы линии и прямоугольника, вы можете применить тест пересечения линии по каждой из четырех сторон прямоугольника. – VirtualMichael

ответ

0

Существует несколько способов сделать это. Один из способов сделать это:

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

Другим способом является использование ориентированных краев прямоугольника. Вы можете взять крест с одним концом линии с одним углом и другим крестиком с другой точкой линии и с тем же углом, и если они будут разными направлениями, вы выполните больше проверок. Если направления одинаковы, то нет необходимости, поскольку они указывают, что точки линии находятся на одной стороне прямоугольника.

Смежные вопросы