Search code examples
c#testingconsole-applicationutilitytrigonometry

Calculating distance of cannon shot using utility tests in c# console application


I'm trying to calculate distance of cannon shot using velocity and angle. I'm testing results using utility tests. The formula for range should be someting like v^2 * sin2a aka velocity squared * sin2alpha . As far as i know, sin2a is supposed to be 2*sina*cosa, but i may be wrong.

Anyway, whatever i do, i get wrong results, because it doesn't seem to be calculating sin.

Here's the code

Cannon.cs

public int CalculateDistance(int angle, int velocity)
    {
        int distance = 0;
        double radian_angle = (Math.PI / 180) * angle;
        distance_of_shot = (Math.Pow(velocity, 2)) * (2 * Math.Sin(radian_angle) * Math.Cos(radian_angle));
        distance = (int)distance_of_shot;
        return distance;
    }

CannonAttackTest.cs

[TestMethod]
    public void Calculations()
    {
        Canon new_canon = new Canon();
        var data = new_canon.CalculateDistance(45, 450);
        Assert.AreEqual(20682, data);                      
    }

The results is suppose to be 20682, but i get 202500, which is exactly a number of squared 450...whichs points to sin not being calculated.

enter image description here

Any help is appreciated!

Thank you!


Solution

  • Check your units, you need to divide by the value of "g" because velocity is m/s and your "distance of shot" is in m^2/s^2.

    distance_of_shot = (Math.Pow(velocity, 2)) * (2 * Math.Sin(radian_angle) * Math.Cos(radian_angle))/9.81;