Я не уверен, как преобразовать градусы в радианы для переменной в 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: были внесены следующие изменения:
- Предложение @pilotcam об изменении всего на два
- Предложение @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
,