2

Диаграмма: http://i.stack.imgur.com/gpL0P.pngнайти точку, где линия пересекает нелинейный тракт

Резюме: Как найти координаты синей точки на диаграмме, так что я могу рассчитать положение красных точек, прилегающее к нему и рисовать мой треугольник?

Сведения о проблеме: Я пытаюсь сделать хвост на воздушном шаре с подсказкой с помощью перетаскивания для приложения карты, которое я делаю. Я хотел бы, чтобы хвост был выведен из того места, где расположен шар (точка 0,0 спрайта, содержащего как воздушный шар, так и хвост) к краю баллона, причем основание хвоста всегда является одинаковой произвольной шириной ширина соединяется с воздушным шаром. Хвост будет перерисовываться в новых координатах каждого кадра.

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

Если бы путь был окружностью или эллипсом, я мог бы использовать метод angleToProgress (наряду с некоторым триггером) класса CirclePath2D для библиотеки путей движения гринкока. Я мог бы разместить скрытый указатель пути и получить его xy ... Однако я я использую roundedRectangle ... Поэтому я думал, что лучшим методом будет какое-то обнаружение столкновения между линией и везде, где оно пересекает путь, нарисованный вокруг периметра воздушного шара. Однако я не могу найти никаких функций столкновения, которые возвращают xy столкновения.

Так что я в тупике. Я думаю, что то, что я хочу сделать, может быть легко выполнимо в AS3, используя встроенные методы столкновений. Есть ли библиотека столкновений, которая позволит мне сделать это, или, может быть, желательно, какую-то математику, которая ускользает от меня? Потому что это похоже на то, что я над этим думаю, и это не должно быть так сложно.

[Примечание:. Я не могу вставить диаграмму, потому что не хватает репутации]

+0

Почему бы просто не нарисовать треугольник в полной точке, а затем нарисовать округленный прямоугольник теми же размерами, что и в качестве маски для треугольника? –

+0

Я на самом деле уже делаю это, без маски. Я подумал о том, чтобы маскировать его, но хотел избежать этого, так как я не могу поколебать чувство, что здесь есть чему поучиться. – Xerain

+0

Существует много триггеров, если вы идете по математическому маршруту. Есть два элемента, чтобы посмотреть на прямоугольник и круг в углу. Зная высоту и ширину прямоугольника и радиус угла, вы сможете рассчитать все необходимые точки. Но вы также столкнетесь с проблемой округления, чтобы она никогда не была идеальной для пикселя. Иногда у вас будет либо перекрытие, либо разрыв в 1 пиксель. –

ответ

1

Что вы собираетесь делать, если синяя точка пересечения находится на одном из закругленных углов? Кроме того, это должно быть довольно легко понять. Вы можете сделать простую линейную геометрию и проверку связей, чтобы увидеть, где линия пересекается с четырьмя бесконечными линиями, которые делают границу окна, а затем определяют, что на самом деле является первым пересечением из пифагорейского длина линии.

Если вы сделаете этот метод, вам нужно будет проверить положение места размещения по краям баллона, чтобы пропустить вычисление явно неправильных (а иногда и несуществующих) пересечений (например, если центр воздушного шара напрямую к западу от точки размещения, то вам следует пропустить вычисление пересечений вертикальных линий). Фактически, вы можете использовать аналогичную логику, чтобы пропустить 2 или 3 стороны, в зависимости от геометрии.

+0

Думая о угловых случаях (ha) здесь, вы, вероятно, можете просто сделать, как описано выше, для виртуальной круглой коробки, тогда, если пересечение находится в радиусе округления от угла, то, возможно, просто поместите красные точки в некоторый простые предопределенные позиции. Похоже, это сработает. – lxop

+0

Я собираюсь потратить некоторое время на изучение теорий, которые вы предлагаете завтра. Что касается углов, я бы добавил точки на периметр и перемещал их по периметру на один процент от периметра. Я могу сделать это, используя класс MotionPath от greensock и PathFollowers. Затем я бы взял значения xy этих точек - поскольку они действительно спрайты, на которые я могу получить ссылки, - тогда используйте эти значения для рисования моего треугольника. – Xerain

+0

Я не уверен, что понимаю, что вы имеете в виду. Я просто имел в виду, что если линия между центром пузыря и точкой размещения пересекает округленный угол, а не прямую часть края, то поведение будет немного иным. – lxop

Смежные вопросы