2013-05-01 2 views
0

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

Bool Conditional::InRange(Point P) 
{ 
    if((P.x > Position.x-100) && (P.x < Position.x+100) && 
     (P.y > Position.y-60) && (P.y < Position.y+60)) 
     return true; 
    else 
     return false; 
} 

Я в конечном итоге с прямоугольной области, как сделать этот диапазон быть ромб? ? , Где позиция является центром, а высота = 120 ширина = 200

+0

Первый совет: любой функции, как 'если (Foo) возвращает истину; else return false; 'должно быть написано более просто' return foo; '. –

+0

@Nate, пожалуйста, обратитесь к математическому объяснению http://math.stackexchange.com/questions/312403/how-do-determine-if-a-point-is-within-a-rhombus –

+0

Существуют ли какие-либо геометрические ограничения на ваш ромб? Его «нижний край» сидит на своем самолете? –

ответ

0

Ромбические координаты А, В, С, D

и точка Р, которую мы должны проверить.

Найти углы между

ра, рь - angle1

рь, шт - angle2

шт, П.Д. - angle3

П.Д., ра - angle4

Теперь, если сумма всех углов 360 или -360, то P находится внутри ABCD , иначе он находится снаружи.

Угол Вы можете найти, используя форму перехвата склона.

т.е. т = (y2-y1)/(х2-х1)

После того, как вы нашли наклон, например, для наклона сегмента pa линии m1 для отрезка отрезка сегмента pb составляет m2 , тогда угол может быть рассчитан через tan (angle) = (m1-m2)/(1 + m1 * m2);

ИЛИ

вы можете использовать эту ссылку

http://en.wikipedia.org/wiki/Point_in_polygon 
+0

Спасибо за ваш ответ, но как я могу получить угол через склон? – Nate

+0

@Nate После того, как вы нашли наклон, например. для наклона сегмента pa - m1, а для наклона сегмента pb - m2, угол может быть рассчитан через tan (angle) = (m1-m2)/(1 + m1 * m2); –

+0

Еще раз спасибо, надеюсь, я вас не беспокою :), но мне нужен угол, поэтому я получаю загар для ответа? – Nate