ерунды и помогите пожалуйста с рабочей задачкой)
Есть 2 объекта:
cube: {
x: number;
y: number;
}
point: {
x: number;
y: number;
}
Если мысленно провести линии от углов куба до углов границ карты, получатся области left right up down. Так вот, кто-нибудь в курсе, есть ли способ быстро определить в какой из этих 4 областей материлизовалась точка? Куб перемещается по карте, размеры карты могут динамически изменятся, куб может быть у границ карты с любой из сторон.
У меня есть решение, но выглядит ужасным костылём (делю области на мелкие квадраты, опреляю потом через include попали ли в конкретную область)
линейная алгебра за 7 класс вышла из чата
даа, да)) забыл написать, что с математикой и геометрией всё капец плохо)
самое время подтянуть, и задачка как раз подвернулась
А я не знаю как решить просто. Что тут нужно, лучи кидать и пересечения считать?
да я не против. Подскажите в какую сторону копать?
построить график от цента, да и все
вот точка появляется извне, нужно понять, в какой зоне она появилась, на выходе получить string)
Если не можешь решить сложную задачу, сведи её решение к простой: сделай так, чтобы точка появлялась только в области up
а можно пример?
не, у меня не сохранилось учебника
кто-то более софтскиловый чем @do_not_disturb_pls, может подтолкнуть к решению?)
bool intpoint_inside_trigon(intPoint s, intPoint a, intPoint b, intPoint c) { int as_x = s.x - a.x; int as_y = s.y - a.y; bool s_ab = (b.x - a.x) * as_y - (b.y - a.y) * as_x > 0; if ((c.x - a.x) * as_y - (c.y - a.y) * as_x > 0 == s_ab) return false; if ((c.x - b.x) * (s.y - b.y) - (c.y - b.y)*(s.x - b.x) > 0 != s_ab) return false; return true; }
спасибо, попробую разобраться
вектор, который соединяет центр куба и точку: const vector = { x: point.x - cube.x, y: point.y - cube.y }; угол между этим вектором и горизонтальной осью (например, осью x). для этого можно воспользоваться функцией math.atan2: const angle = Math.atan2(vector.y, vector.x); если angle находится в диапазоне от -π/4 до π/4, то точка находится справа. если angle находится в диапазоне от` π/4` до 3π/4, то точка находится вверх. если angle находится в диапазоне от -3π/4 до -π/4, то точка находится вниз. во всех остальных случаях точка находится слева.
Да чтод вы за человек, пришлось всемто ноды выбрать aspn.net 7 в проекте так оказывается быстрее
Обсуждают сегодня