Реализуем функцию расчета угла прицеливания.

На днях мой знакомый прислал мне на почту задачу и файлы проекта, попросив разобраться как можно решить задание с какого интернет проекта. Текст задания был следующий:

  1. Скачайте архив с проектом AngryBirds и изучите его. Это простой симулятор системы прицеливания.
  2. В файле AngryBirdsTask реализуйте функцию расчета угла прицеливания, в зависимости от начальной скорости снаряда и дальности до цели.
  3. Проверьте корректность своего решения, запустив проект.

Детали:

  1. Сопротивлением воздуха можно пренебречь
  2. Ускорение свободного падения g = 9.8 м/с2

Исходя из задания, я понял что придется вспоминать формулы из физики. А именно интересует нахождения расстояния полета тела, брошенного под углом. В первой тройке сайтов я определился с формулой нахождения.  И решил дописать фаил прилагавшийся в письме. Из всего этого изменил метод и результат был верный. Рассмотрим сам метод:

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));

		}
	}
}

 

Обновлено: 22.12.2017 — 22:20

3 комментария

Оставить комментарий
  1. Константин

    Добрый день, не мог бы рассказать почему именно так? Как получить то что получил ты из формулы 2sin’a * cos’a = distanse * g / v^2?

    1. По памяти так не скажу, банально не помню, формула была взята из анг ресурсов, кода мне требовалась его реализация.

  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. Как-то так…

Добавить комментарий

Ваш адрес email не будет опубликован. Обязательные поля помечены *

Этот сайт использует Akismet для борьбы со спамом. Узнайте, как обрабатываются ваши данные комментариев.