2010-08-16 3 views
3

Продвигаясь от previous question .I есть два прямоугольника, и они выглядят следующим образом:повернутых 2d точек прямоугольника пересекающихся или области

struct Rect 
{ 
NSPoint topLeft; 
NSPoint topRight; 
NSPoint bottomLeft; 
NSPoint bottomRight; 
} 

Я использую something similar code, чтобы проверить, является ли прямоугольники пересекают (или столкновение). В случае пересечения двух прямоугольников я хочу рассчитать площадь пересечения в первом прямоугольнике или точки, где второй прямоугольник пересекается с первым прямоугольником (т. Е. Координатами пересечения).

Как вычислить пересекающиеся точки или область пересечения.

+0

Так что точный вопрос – Chubsdad

ответ

2

Вы можете определить точки пересечения, делая это:

foreach line in rectangle 1: line1 
    foreach line in rectangle 2: line2 
    find point of intersection for line1, line2 

найти точку пересечения двух линий:

http://local.wasp.uwa.edu.au/~pbourke/geometry/lineline2d/

Вы можете найти область пересечения путем нахождения точки пересечения и разделение линий, основанных на том, что для создания новых сторон/удаления сторон. Вы можете получить до 8 очков в полученном многоугольнике или всего лишь 3 (не считая вырожденных случаев).

Нет, я не говорю, что это наиболее эффективный метод, но он будет работать :)

+0

В случае, если статья идет вниз, вот еще пара статей: Http: // ru.wikipedia.org/wiki/Line_segment_intersection и http://en.wikipedia.org/wiki/Line-line_intersection. Я бы поставил уравнения здесь, но общие решения для определения пересечения линий линии - это беспорядок, и это не поможет объяснить алгоритм более высокого уровня. Во всяком случае, их довольно легко получить. Кроме того, вы можете попробовать использовать алгоритмы развертки, так как вы имеете дело с несколькими линиями на них. –

2

То, что вы просите, кажется, конкретный случай «полигона пересечения». (так как прямоугольники являются многоугольниками).

Вот это библиотека, которая делает это:

http://www.cs.man.ac.uk/aig/staff/alan/software/

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

Кроме того, возможно, вы могли бы взглянуть на этот вопрос SO:

Algorithm to detect intersection of two rectangles?