Поиск:

Ответ в темуСоздание новой темы Создание опроса
> Найти точку пересечения двух движимых объектов 
:(
    Опции темы
Akina
Дата 18.5.2016, 11:58 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Советчик
****


Профиль
Группа: Модератор
Сообщений: 20570
Регистрация: 8.4.2004
Где: Зеленоград

Репутация: 20
Всего: 453



Цитата(Sartorius @  18.5.2016,  12:44 Найти цитируемый пост)
Разве любое уравнение второго порядка соответствует эллипсу?

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

Цитата(Sartorius @  18.5.2016,  12:44 Найти цитируемый пост)
Если у тебя получилось каноническое уравнение эллипса для этого условия, приведи плз выкладки. 

Мля...

A (xa, ya)
B (xb, yb)
C (x,y)

xa,xb,ya,yb,k=va/vb - константы, x,y - переменные.

|AC|^2 = (x-xa)^2 + (y-ya)^2
|BC|^2 = (x-xb)^2 + (y-yb)^2
|AC| = k * |BC|
(x-xa)^2 + (y-ya)^2 = k^2 * ((x-xb)^2 + (y-yb)^2)

Раскрытие скобок и перенос всего в левую часть уравнения проделаешь самостоятельно.

А если ещё добавить к результату уравнение прямой, по которой летит цель - получится система из двух уравнений с двумя неизвестными, которая легко решается аналитически.

Это сообщение отредактировал(а) Akina - 18.5.2016, 12:15


--------------------
 О(б)суждение моих действий - в соответствующей теме, пожалуйста. Или в РМ. И высшая инстанция - Администрация форума.

PM MAIL WWW ICQ Jabber   Вверх
ksnk
Дата 18.5.2016, 12:09 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


прохожий
****


Профиль
Группа: Комодератор
Сообщений: 6855
Регистрация: 13.4.2007
Где: СПб

Репутация: 7
Всего: 386



Akina, А мое решение, с парой синус-косинус чем не устраивает? Вроде, на этот раз все правильно? 


--------------------
Человеку свойственно ошибаться, программисту свойственно ошибаться профессионально ! user posted image
PM MAIL WWW Skype   Вверх
Akina
Дата 18.5.2016, 12:12 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Советчик
****


Профиль
Группа: Модератор
Сообщений: 20570
Регистрация: 8.4.2004
Где: Зеленоград

Репутация: 20
Всего: 453



Цитата(ksnk @  18.5.2016,  13:09 Найти цитируемый пост)
А мое решение, с парой синус-косинус чем не устраивает?

Точность ниже, вычислительная ёмкость выше. Само решение не проверял... 
Но главным образом - не вижу смысла в вычислении УГЛА. Более разумно вычислять точку пересечения, а потом по двум точкам строить прямую полёта снаряда.


--------------------
 О(б)суждение моих действий - в соответствующей теме, пожалуйста. Или в РМ. И высшая инстанция - Администрация форума.

PM MAIL WWW ICQ Jabber   Вверх
ksnk
Дата 18.5.2016, 12:13 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


прохожий
****


Профиль
Группа: Комодератор
Сообщений: 6855
Регистрация: 13.4.2007
Где: СПб

Репутация: 7
Всего: 386



Цитата(anmig @  18.5.2016,  10:15 Найти цитируемый пост)
 Так как по вашему решению - я всегда найду угол. Но ведь задача может не иметь решения. Пуля может никогда не догнать самолет.

Не всегда. Функция arcsin определена на значениях от -1 до +1. Тоесть для бОльших 1 значений функции от угла-скоростей пуля не догонит самолет.

Добавлено через 10 минут и 8 секунд
Цитата(Akina @  18.5.2016,  12:12 Найти цитируемый пост)
Но главным образом - не вижу смысла в вычислении УГЛА.

Цитата(anmig @  17.5.2016,  13:08 Найти цитируемый пост)
Ему нужно указать угол под которым двигаться чтобы столкнуться с объектом А.

Это звучало в условии  smile 


--------------------
Человеку свойственно ошибаться, программисту свойственно ошибаться профессионально ! user posted image
PM MAIL WWW Skype   Вверх
Sartorius
Дата 18.5.2016, 12:24 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
***


Профиль
Группа: Завсегдатай
Сообщений: 1568
Регистрация: 18.7.2006
Где: Ivory tower

Репутация: 1
Всего: 37



 Akina,  cпасибо!
Цитата(Akina @  18.5.2016,  12:58 Найти цитируемый пост)
а эллипс является единственной ограниченной кривой второго порядка

Да Тогда сразу все ОК. 
PM MAIL ICQ   Вверх
Akina
Дата 18.5.2016, 12:39 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Советчик
****


Профиль
Группа: Модератор
Сообщений: 20570
Регистрация: 8.4.2004
Где: Зеленоград

Репутация: 20
Всего: 453



Цитата(ksnk @  18.5.2016,  13:13 Найти цитируемый пост)
Это звучало в условии

Даже думать не надо - типичный случай. Не только задача уже поставлена, но даже выбран путь решения... а то, что путь выбран неправильный (точнее, не самый рациональный) - да какие, право, мелочи.
Сам подумай - зачем ему угол? да чтобы строить прямую полёта! А о том, что прямую на экране быстрее и проще строить, имея две точки (во всех граф. библиотеках есть такая процедура, а вот насчёт точки и угла вряд ли), он даже не подумал.


--------------------
 О(б)суждение моих действий - в соответствующей теме, пожалуйста. Или в РМ. И высшая инстанция - Администрация форума.

PM MAIL WWW ICQ Jabber   Вверх
ksnk
Дата 18.5.2016, 13:10 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


прохожий
****


Профиль
Группа: Комодератор
Сообщений: 6855
Регистрация: 13.4.2007
Где: СПб

Репутация: 7
Всего: 386



Цитата(Akina @  18.5.2016,  12:39 Найти цитируемый пост)
 а вот насчёт точки и угла вряд ли

Ну, оператору установки ПВО нужен именно угол, чтобы стрелять с упреждением. Если моделируется логика "стрелка", то вполне разумно получать именно его. Просто стрельнуть и продолжить тикать real-time таймером игры...
Хотя как оно на самом деле - знает только автор.  


--------------------
Человеку свойственно ошибаться, программисту свойственно ошибаться профессионально ! user posted image
PM MAIL WWW Skype   Вверх
Akina
Дата 18.5.2016, 13:45 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Советчик
****


Профиль
Группа: Модератор
Сообщений: 20570
Регистрация: 8.4.2004
Где: Зеленоград

Репутация: 20
Всего: 453



Цитата(ksnk @  18.5.2016,  14:10 Найти цитируемый пост)
Если моделируется логика "стрелка", то вполне разумно получать именно его.

Между прочим, логика стрелка-то как раз заключается в прогнозировании той точки, в которой снаряд встретится с объектом. А углами он занимается только в том случае, когда он траекторию объекта знает, но не видит.


--------------------
 О(б)суждение моих действий - в соответствующей теме, пожалуйста. Или в РМ. И высшая инстанция - Администрация форума.

PM MAIL WWW ICQ Jabber   Вверх
ksnk
Дата 18.5.2016, 14:10 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


прохожий
****


Профиль
Группа: Комодератор
Сообщений: 6855
Регистрация: 13.4.2007
Где: СПб

Репутация: 7
Всего: 386



Цитата(Akina @  18.5.2016,  13:45 Найти цитируемый пост)
логика стрелка-то как раз заключается в прогнозировании той точки, в которой снаряд встретится с объектом

Логика стрелка заканчивается выстрелом - генерацией нового объекта в пространстве игры,"снаряда". Снаряд имеет угол и скорость полета и начальное положение... Ну или "точку попадания", но так моделировать немного сложнее...

Добавлено через 3 минуты и 17 секунд
Хотя это уже вряд ли по теме  smile 


--------------------
Человеку свойственно ошибаться, программисту свойственно ошибаться профессионально ! user posted image
PM MAIL WWW Skype   Вверх
anmig
Дата 18.5.2016, 14:46 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



Профиль
Группа: Участник
Сообщений: 17
Регистрация: 17.5.2016

Репутация: нет
Всего: нет



Цитата(Akina @ 18.5.2016,  12:39)
Сам подумай - зачем ему угол? да чтобы строить прямую полёта! А о том, что прямую на экране быстрее и проще строить, имея две точки (во всех граф. библиотеках есть такая процедура, а вот насчёт точки и угла вряд ли), он даже не подумал.

Разве две точки в пространстве не дают угол отрезка? И наоборот, имея угол, нельзя получить две точки?
Мне без разницы что мы ищем - угол, координаты точки, или время столкновения. Имея любой из этих параметров я смогу построить траекторию. О чем спор?
Объект класса Пули не знает про точку столкновения потому что ее может и не существовать (но об этом позднее). У объекта есть константа "speed" и переменные "speedX" и "speedY". Последние две вычисляются по углу и гипотенузе "speed". Имея эти две переменные, пуля в каждом кадре смещает свою позицию на speedX и speedY. Ей не нужно знать точку "куда двигаться".
Цитата

А мое решение, с парой синус-косинус чем не устраивает?

Буду дома - обязательно попробую.
PM MAIL   Вверх
Akina
Дата 18.5.2016, 14:58 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Советчик
****


Профиль
Группа: Модератор
Сообщений: 20570
Регистрация: 8.4.2004
Где: Зеленоград

Репутация: 20
Всего: 453



Цитата(anmig @  18.5.2016,  15:46 Найти цитируемый пост)
Разве две точки в пространстве не дают угол отрезка? И наоборот, имея угол, нельзя получить две точки?
Мне без разницы что мы ищем - угол, координаты точки, или время столкновения. Имея любой из этих параметров я смогу построить траекторию. О чем спор?

Имея координаты двух пикселов прямой, можно построить всю прямую, не выходя за рамки целочисленной арифметики. И по заданной скорости вычислить местоположение в любой момент времени, хотя тут один раз придётся использовать извлечение квадратного корня. Попробуй проделать то же, имея угол - утонешь в вызовах тригонометрических примитивов... я же уже говорил о вычислительной ёмкости.


--------------------
 О(б)суждение моих действий - в соответствующей теме, пожалуйста. Или в РМ. И высшая инстанция - Администрация форума.

PM MAIL WWW ICQ Jabber   Вверх
anmig
Дата 18.5.2016, 15:30 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



Профиль
Группа: Участник
Сообщений: 17
Регистрация: 17.5.2016

Репутация: нет
Всего: нет



Цитата(Akina @ 18.5.2016,  14:58)
Попробуй проделать то же, имея угол - утонешь в вызовах тригонометрических примитивов... я же уже говорил о вычислительной ёмкости.

Но ведь тригонометрия нужна лишь один раз перед выстрелом. Когда нужно найти смещение пули за еденицу времени по оси х и по оси у. Потом в каждом кадре (цикле) программы вызывается лишь две строчки кода в классе Bullet:
Код

this.setX(this.getX() + this.speedX)
this.setY(this.getY() + this.speedY)

К томуже повторюсь. Мне не важно что мы ищем! Важно построить решение задачи чтобы найти или точку столкновения, или угол пули, или время.
Цитата

И по заданной скорости вычислить местоположение в любой момент времени

Можно пример?

Это сообщение отредактировал(а) anmig - 18.5.2016, 15:31
PM MAIL   Вверх
Akina
Дата 18.5.2016, 15:41 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Советчик
****


Профиль
Группа: Модератор
Сообщений: 20570
Регистрация: 8.4.2004
Где: Зеленоград

Репутация: 20
Всего: 453



Цитата(anmig @  18.5.2016,  16:30 Найти цитируемый пост)
тригонометрия нужна лишь один раз перед выстрелом. Когда нужно найти смещение пули за еденицу времени по оси х и по оси у. Потом в каждом кадре (цикле) программы вызывается лишь две строчки кода в классе Bullet:

Угу... и из-за ошибки округления снаряд попадает в цель, находясь на десяток пикселов левее - красотишша...
Не, дело твоё... 


--------------------
 О(б)суждение моих действий - в соответствующей теме, пожалуйста. Или в РМ. И высшая инстанция - Администрация форума.

PM MAIL WWW ICQ Jabber   Вверх
anmig
Дата 18.5.2016, 15:59 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



Профиль
Группа: Участник
Сообщений: 17
Регистрация: 17.5.2016

Репутация: нет
Всего: нет



Цитата(Akina @ 18.5.2016,  15:41)
Угу... и из-за ошибки округления снаряд попадает в цель, находясь на десяток пикселов левее - красотишша...
Не, дело твоё...

Если будет лететь полдня на расстояние 10^10 пикселов и цель размером с один пиксел, то возможно вы правы. Но я за все время еще не сталкивался с такими грубыми вычислениями. Плюс я никакие округления не делаю. Все данные хранятся в переменных и точность их зависит лишь от точности методов класса Math. Может сам класс Math что-то округляет в своих методах?
Извините, но действительно хотелось бы пример вычисления без тригонометрии. Т.к. у меня есть класс ракеты, которая преследует самолет (самонаводящийся снаряд). Вот ту-то в каждом кадре производится пересчет траектории в зависимости от положения самолета. И хотелось бы уменьшить количество рассчетов.
PM MAIL   Вверх
Akina
Дата 18.5.2016, 18:11 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Советчик
****


Профиль
Группа: Модератор
Сообщений: 20570
Регистрация: 8.4.2004
Где: Зеленоград

Репутация: 20
Всего: 453



Цитата(anmig @  18.5.2016,  16:59 Найти цитируемый пост)
у меня есть класс ракеты, которая преследует самолет (самонаводящийся снаряд). Вот ту-то в каждом кадре производится пересчет траектории в зависимости от положения самолета. И хотелось бы уменьшить количество рассчетов. 

При правильной организации расчёт должен по построенному прогнозу траектории посчитать сразу все промежуточные точки (для прямолетящего снаряда и цели этот дополнительный расчёт - копейки), а потом просто сверять расчётные и текущие данные. Только при значительном отклонении выполнять перерасчёт.

Цитата(anmig @  18.5.2016,  16:59 Найти цитируемый пост)
хотелось бы пример вычисления без тригонометрии

Надеюсь, мои выкладки выше убедили, что для расчёта точки "встречи" достаточно решить одно квадратное уравнение, для чего придётся один раз извлечь квадратный корень, а все остальные вычисления - чисто арифметика? ну так это оно и есть... координаты точки С получены. А дальше, зная расстояние BC (и соответствующие дельты по осям) и пройденный снарядом путь, считаем местоположение снаряда тупо пропорцией - опять сплошная арифметика.


--------------------
 О(б)суждение моих действий - в соответствующей теме, пожалуйста. Или в РМ. И высшая инстанция - Администрация форума.

PM MAIL WWW ICQ Jabber   Вверх
Страницы: (3) Все 1 [2] 3 
Ответ в темуСоздание новой темы Создание опроса
Правила форума "Алгоритмы"

maxim1000

Форум "Алгоритмы" предназначен для обсуждения вопросов, связанных только с алгоритмами и структурами данных, без привязки к конкретному языку программирования и/или программному продукту.


Если Вам понравилась атмосфера форума, заходите к нам чаще! С уважением, maxim1000.

 
0 Пользователей читают эту тему (0 Гостей и 0 Скрытых Пользователей)
0 Пользователей:
« Предыдущая тема | Алгоритмы | Следующая тема »


 




[ Время генерации скрипта: 0.1897 ]   [ Использовано запросов: 21 ]   [ GZIP включён ]


Реклама на сайте     Информационное спонсорство

 
По вопросам размещения рекламы пишите на vladimir(sobaka)vingrad.ru
Отказ от ответственности     Powered by Invision Power Board(R) 1.3 © 2003  IPS, Inc.