Я не уверен, как преобразовать градусы в радианы для переменной в C#

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

В настоящее время я пытаюсь рассчитать время полета (и, в конечном итоге, расстояние) баллистической пушки, используя скорость и угол пушки, предоставленные пользователем через консоль. Тем не менее, математика выходит неправильно. Расчет Tof в комментариях был взят из старой строки, и я просто использую его для справки, пока все не сработает, и я все очистлю Так как текущий Tof является именно тем, что требуется для уравнения:

t = (v * sin (θ) + (v2sin2 (θ) + 20 * L * sin (θ)) 1/2) / 10, где v - скорость ядра, θ - угол относительно земли, а L длина ствола пушки.)

(за исключением обмена грехом ^2(тэта) на его Trig Identity), я считаю, что проблема заключается в преобразовании градусов в радианы. Нынешняя строка была чем-то, что я предположил, так как меня ничему этому не научили. Любые результаты онлайн относительно конверсии дают мне что-то вроде:

 private double DegreeToRadian(double angle)
{
return Math.PI * angle / 180.0;
}

Который, когда он помещается на место текущей строки, вызывает массу ошибок почти для всего, что находится под ним. Я полагаю, что chunk in должен был быть частью кода сам по себе и не помещаться в середину всего, но я не знаю другого способа сделать это, поскольку вся работа должна выполняться в основном методе.
Любая помощь очень ценится. Полный код ниже:

Edit1: это когда вышеуказанный код введен

Edit2: были внесены следующие изменения:

  1. Предложение @pilotcam об изменении всего на два
  2. Предложение @Shannon Holsinger изменить int.parse на double.parse

@Shannon Holsinger - первая ошибка в конце

double EnteredVelocityNum = double.Parse(EnteredVelocity);

Сразу после точки с запятой. Он гласит " } ожидается".

@MethodMan - мне очень жаль, но я не понимаю вашего предложения относительно:

double EnteredAngleNum = 0d;

Куда я это положу? Я снова прошу прощения за свою невежество, я не узнал этого раньше, и это все довольно ново для меня.

    using System;
    using System.Collections.Generic;
    using System.Linq;
    using System.Text;
    using System.Threading.Tasks;

    namespace HW1
    {
    class Cannonball
    {
    static void Main(string[] args)
    {

            const double Length = 2;

            //here the velocity of the cannonball is acquired from the player
            string EnteredVelocity;
            Console.WriteLine("Enter the velocity of the cannonball betweeen 0-100 meters: ");
            EnteredVelocity = Console.ReadLine();
            Console.WriteLine("You entered: " + EnteredVelocity);

            // the angle of the cannon is acquired from the player
            string EnteredAngle;
            Console.WriteLine("Enter the angle of the cannon betweeen 0-90 degrees: ");
            EnteredAngle = Console.ReadLine();
            Console.WriteLine("You entered: " + EnteredAngle);

            //calculating the Time of Flight               
            double EnteredAngleNum = double.Parse(EnteredAngle);
            double EnteredVelocityNum = double.Parse(EnteredVelocity);

            private double EnteredAngleRad(double EnteredAngleNum)
                {
                    return (Math.PI / 180) * EnteredAngleNum;
                }

            //double EnteredAngleRad = (2 * Math.PI / 360) * EnteredAngleNum;
            //double ToF = Math.Pow(EnteredVelocityNum * Math.Sin(EnteredAngleRad) + (Math.Pow(EnteredVelocityNum,2)) * (Math.Pow(Math.Sin(EnteredAngleRad),2)) + 20 * Length * (Math.Sin(EnteredAngleRad)) , 0.5 ) / 10;  //This is trying to use Sin^2(theta) and gives 3.---
            double ToF = (EnteredVelocityNum * Math.Sin(EnteredAngleRad) + (Math.Pow((Math.Pow(EnteredVelocityNum, 2.0) * ((1.0 / 2.0) - ((1.0 / 2.0) * Math.Cos(2 * EnteredAngleRad))) + 20.0 * Length * (Math.Sin(EnteredAngleRad))), 0.5))) / 10.0; //This is trying to use Trig Identities and gives 4.06----


            Console.WriteLine("The Flight Time is: " + ToF);
            }
        }
    }

1 ответ

Осторожно, линия, где вы делаете такие вещи....

((1 / 2) * Math.Cos(2 * EnteredAngleRad))

1 / 2 оценивает 0 потому что 1 и 2 интерпретируются как целые числа. Попробуйте изменить все на удвоение, используя такие литералы, как 1.0 / 2.0,

И использовать double.Parse вместо int.Parse,

Другие вопросы по тегам