![]() |
Условие попадания точки внутрь прямоугольника
Господа, подскажите красивое решение для следующей задачки.
Дано: координаты центра прямоугольника, угол поворота прямоугольника, а также его ширина и высота. Также даны координаты точки. Необходимо составить лаконичное условие проверки - лежит ли точка внутри прямоугольника. Как-то не гуглится совсем, хотя задачка с первого взгляда совсем простая. Заранее спасибо. |
Просто "поверните" точку на тот же угол и сравните её x,y с width,height.
Повернуть можно так: 1. Найти дистанцию точки от центра прямоугольника. 2. Получить новые x,y из дистанции, умноженной на косинус и синус нужного угла. Ну а дальше, просто сравните эти x, y на выход за width, heigth соответственно. Код AS3:
А ещё, если у вас дисплей объекты, можно использовать их готовые методы: globalToLocal(), localToGlobal() |
Очень круто, большое спасибо. К сожалению, это JS код (без удобных globalToLocal(), localToGlobal()), а я по-старинке хожу за советом на любимый форум.
|
Цитата:
http://math.stackexchange.com/questi...de-a-rectangle вот вторая ссылка с другим решением http://stackoverflow.com/questions/2...ctangle-or-not третья http://martin-thoma.com/how-to-check...e-a-rectangle/ Могу накидать ещё) Или подсказать что вбить в гугл ;) |
Цитата:
|
Здесь в теме не написано какие есть вводные данные и что из себя представляет этот прямоугольник
Хотя если тут прямоугольник, то рассчитать предворительно координаты его вершин, зная угол поворота, ширину и высоту, не составит никаких проблем. А дальше уже применить одно их этих решений |
Цитата:
Смысл мне вводить в алгоритм дополнительные рассчеты вершин, чтобы применить в итоге еще более ресурсоемкий подход? Добавлено через 4 часа 20 минут Проверил предложенный алгоритм, но что-то он у меня странно работает. В зависимости от угла поворота прямоугольника срабатывает либо только большая сторона, либо только меньшая. В итоге точка просчитывает попадание в радиус от сработавшей стороны. Ниже приведу примерно то, как я это реализовывал, возможно, кто-то заметит ошибку: Код AS3:
|
Код AS3:
|
весь смысл - перевести систему координат точки - глобальную, в систему координат повернутого прямоугольника, а далее проверяем стандартным способом (по ширине и высоте прямоугольника)
|
Цитата:
Добавлено через 29 минут Задача решена! Нужно было добавить несколько дополнительных действий в алгоритм: Код AS3:
Может кому пригодится на будущее! Добавлено через 49 минут //////////////////////////////////////////////////////////////////////////////////////////////// Пришла идея усложнить задачу: 1. Представьте, что и прямоугольник и точка постоянно движутся в пространстве (это допущение в целом никак не влияет на прошлые расчеты) 2. Точка в итоге задана координатами, направлением (углом) движения и скоростью 3. Необходимо, чтобы при касании с прямоугольником точка меняла свое направление, как будто она отскочила от одной из сторон. Ну т.е. отразилась, как луч света от зеркальной поверхности. P. S. Первое, что пришло в голову - просто менять угол на противоположный, т.е. Код AS3:
Может у кого-то созреют идеи в каком направлении можно еще "копать"... |
| Часовой пояс GMT +4, время: 23:52. |
Copyright © 1999-2008 Flasher.ru. All rights reserved.
Работает на vBulletin®. Copyright ©2000 - 2026, Jelsoft Enterprises Ltd. Перевод: zCarot
Администрация сайта не несёт ответственности за любую предоставленную посетителями информацию. Подробнее см. Правила.