На днях мой знакомый прислал мне на почту задачу и файлы проекта, попросив разобраться как можно решить задание с какого интернет проекта. Текст задания был следующий:
- Скачайте архив с проектом AngryBirds и изучите его. Это простой симулятор системы прицеливания.
- В файле AngryBirdsTask реализуйте функцию расчета угла прицеливания, в зависимости от начальной скорости снаряда и дальности до цели.
- Проверьте корректность своего решения, запустив проект.
Детали:
- Сопротивлением воздуха можно пренебречь
- Ускорение свободного падения g = 9.8 м/с2
Исходя из задания, я понял что придется вспоминать формулы из физики. А именно интересует нахождения расстояния полета тела, брошенного под углом. В первой тройке сайтов я определился с формулой нахождения. И решил дописать фаил прилагавшийся в письме. Из всего этого изменил метод и результат был верный. Рассмотрим сам метод:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 |
using System; namespace AngryBirds { public static class AngryBirdsTask { // Ниже — это XML документация, её использует ваша среда разработки, // чтобы показывать подсказки по использованию методов. // Но писать её естественно не обязательно. /// <param name="v">Начальная скорость</param> /// <param name="distance">Расстояние до цели</param> /// <returns>Угол прицеливания в радианах от 0 до Pi/2</returns> public static double FindSightAngle(double v, double distance) { double g = 9.8; return 0.5 * Math.Asin(distance * g / (v*v)); } } } |
Добрый день, не мог бы рассказать почему именно так? Как получить то что получил ты из формулы 2sin’a * cos’a = distanse * g / v^2?
По памяти так не скажу, банально не помню, формула была взята из анг ресурсов, кода мне требовалась его реализация.
Расстояние до точки падения вычисляется по след. формуле: distance = (v0^2 * sin(2a))/g, нам нужна градусная мера угла «a», тут то и пригодится arcsin т.к : если sin(a) = t, тогда arcsin(t) = a, следовательно : если sin(2a) = (distance * g) / v0^2, тогда arcsin((distance * g) / v0^2) = 2a, из этого следует что, a = (arcsin((distance * g) / v0^2)) / 2. Как-то так…