Я хочу сделать функцию, чтобы проверить, находится ли точка в диапазоне ромба или нет,
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
Координаты ромба: A, B, C, D
и точка P, которую мы должны проверить.
Найти углы между
Па, пб — угол1
пб, пк — угол2
pc, pd — angle3
pd, pa — angle4
Теперь, если сумма всех углов равна 360 или -360, то P находится внутри ABCD
иначе это лежит снаружи.
Угол Вы можете найти, используя форму пересечения склона.
то есть m = (y2-y1) / (x2-x1)
После того как вы нашли склон, например
для па линейного отрезка наклон составляет м1
для отрезка отрезка линии pb — м2
тогда угол можно вычислить как tan (angle) = (m1-m2) / (1 + m1 * m2);
ИЛИ ЖЕ
Вы можете использовать эту ссылку
http://en.wikipedia.org/wiki/Point_in_polygon
Других решений пока нет …