Я не збираюся давати вам відповідь, я впевнений, що це корисно чи навіть правильно, але ось це:
Погравши з математикою трохи більше (перевірити кінець відповіді на записник / виданий зошит) файлів, це рішення видається правильним, навіть подумав, що воно може бути не найкращим з точки зору ефективності.
Я написав це в математиці, яка відповідає вашій проблемі. В основному він вирішує рівняння / нерівності для того, щоб змінна ОА, що саме нам потрібно з'ясувати. Результат дасть нам можливі рішення, які може мати ОА, і умови, які потрібно перевірити, щоб кожне рішення було дійсним:
Reduce[{BPx, BPy} + t*{BVx, BVy} == {OPx, OPy} + t*OV*{Cos[OA], Sin[OA]} && t != 0 && OV != 0, {OA}]
{BPx, BPy} - поточне положення синього кольору
{BVx, BVy} - вектор швидкості синього
{OPx, OPy} - це помаранчева куля
OV - норма вектора швидкості руху кулі апельсина (загальна швидкість)
OA - кут помаранчевої кулі (вектор кута швидкості)
t - час, необхідний для потрапляння кулі в синій колір
Я спробував поставити t> 0 && OV> 0 в умови, але математика зайняла б назавжди, тому я просто використав t! = 0 && OV! = 0. Тож рішення, які я дам тут, просто працюватимуть, коли синій колір не є точним те саме положення, що і помаранчеве, і коли куля апельсина дійсно рухається (замість того, щоб залишатися нерухомою)
Вихід є гігантським: http://freetexthost.com/xzhhpr5e2w
Однак якщо ми дістаємо частини OA == _, ми отримуємо це:
http://freetexthost.com/iyrhqoymfo
Це значення, які може мати ОА (кожне з яких вимагає наявності різних умов).
З деяким подальшим аналізом, який виймав рішення, які вимагають від ОВ негативного характеру, якого ми не хочемо, я зрозумів:
http://freetexthost.com/iy4wxepeb6
Отже, це можливі варіанти вирішення проблеми, для кожного з яких потрібні різні умови. Щоб певний кут ОА був прийнятним рішенням, повинні відповідати наступні умови:
Reduce[{BPx, BPy} + t*{BVx, BVy} == {OPx, OPy} + t*OV*{Cos[OA], Sin[OA]} && t != 0 && OV != 0, {t}]
Вихід:
(BVy - OV Sin[OA] != 0 && BPx == (BPy BVx + BVy OPx - BVx OPy - BPy OV Cos[OA] + OPy OV Cos[OA] - OPx OV Sin[OA])/(BVy - OV Sin[OA]) && t == (-BPy + OPy)/(BVy - OV Sin[OA]) && BPy OV - OPy OV != 0) ||
(BVy == OV Sin[OA] && BPy == OPy && BVx - OV Cos[OA] != 0 && t == (-BPx + OPx)/(BVx - OV Cos[OA]) && BPx OV - OPx OV != 0) ||
(BVy == OV Sin[OA] && BVx == OV Cos[OA] && BPy == OPy && BPx == OPx && OV t != 0)
Тому враховуйте лише ті рішення, де це підтверджується (вам не потрібно перевіряти деталі t == _. Саме вони дають вам час, необхідний для кулі, щоб потрапити в транспортний засіб, якщо інші умови дійсні. Зауважте, що якщо t призводить до від'ємного значення, ви не можете вважати дане OA правильним рішенням, навіть якщо воно перевіряє інші умови (це тому, що ми використовували t! = 0 замість t> 0 у зменшенні)).
Можливо, також було б корисно запитати про це на /math// .
Редагувати
Я зацікавився цим питанням, тому створив коментований зошит із графічною демонстрацією всього, що я пояснив. Завантажте його тут:
http://www.2shared.com/file/pXhYyhN1/towerBullets.html
Або тут:
http://www.2shared.com/file/W01g4sST/towerBullets.html
(це опублікована версія, і вам потрібен лише гравець з математики - який безкоштовний - щоб побачити це. Якщо у вас немає математики, це шлях)
Знімок екрана: