2016-04-09 5 views
0

Я хотел бы знать, расположены ли две поверхности друг на друга на 2D-плоскости в C++. Метод должен быть адаптивным к плоскости размеров N. Бьюсь об заклад, лучший способ сделать это - использовать матрицу, но я не знаю, как это сделать.Как узнать, расположены ли две поверхности друг на друга

На этой фотографии у нас есть два треугольника. Таким образом, цель состоит в том, чтобы знать, есть ли у них общее пространство (красная часть здесь).

enter image description here

ответ

0

Ваш вопрос остается неясным, как размерности. Если вы имеете в виду более высокие измерения, вы не будете думать о проблеме четко.

Предполагая 2d плоскости (и вы можете взять выше размерами объекта и проекта в самолет, если это необходимо):

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

Если вам просто нужно знать истину или ложь, если два треугольника пересекаются, тогда проверьте, пересекается ли какая-либо из линий, или проверьте, не является ли какой-либо угол t2 «внутри» t1, где внутри включено находиться на линии. Обратите внимание, что на линии могут быть проблемы округления.

How do you detect where two line segments intersect?

if (t1.contains.t2) { 

} 

будет справедливо, если:

bool contains(double x, double y) { 
    return 
    (p1 - p2).toLeft(x,y) && 
    (p2 - p3).toLeft(x,y) && 
    (p3 - p1).toLeft(x,y); 
} 

bool contains(const Triangle& t2) { 
    return contains(t2.p1) || contains(t2.p2) || contains(t2.p3); 
} 

Алгоритм ли точка находится слева от линии здесь: How to tell whether a point is to the right or left side of a line

+0

Обратите внимание, что решение toLeft выше предполагает, что треугольник находится в порядке против часовой стрелки. – Dov

+0

Спасибо за быстрый ответ. Я просто думал в 2d, чтобы упростить эту проблему. Но вы правы в том, что я забыл. Знайте, пересекаются ли линии, отлично, если мы работаем над 2d, но, как вы сказали, у нас может быть одна вершина треугольника внутри другого в 3d. Этот случай - моя главная проблема, есть ли у вас решение? – Milow

+0

в 3d ваш вопрос не имеет смысла. Вы можете иметь два треугольника, которые пересекают друг друга как точку, линию или многоугольник. Вы действительно имеете в виду все эти случаи? Это все еще похоже. Вам нужно будет определить плоскость первого треугольника, посмотрите, будут ли фигуры второго треугольника плоскостью, и если это произойдет, выяснить, находится ли эта точка внутри треугольника, как описано – Dov

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