real, and game math formula tips.

This article is filled with multiple code samples and explanations for mathematical calculations. They are as follows:

1. General tips
2. Quadratic formula
3. Object collision
4. Projectile path

General Tips

      Here are some of my tips for doing mathematical formulas in VB.NET. First of all, you should have a variable for every variable in the formula. Also, that new variable should be in a form that can hold only valid values. For instance, a formula that uses a decimal value may be declared as a double, but a formula that can only use whole numbers should be declared integer because errors could occur if declared double. Also you should add error handling for areas that the variable can hold values that are invalid such as if it has to be a nonzero whole number you could use this line to remove zeros.

Dim x as integer = input
if x <> 0 then
'request new input
end if

Open in new window

Also most equations can be copied straight into the code. As long as the answer is isolated on one side of the equation. Such as the standard form for a linear graph  y = ax + b. In this case you can do this.

Dim x as integer = input
Dim a as integer = input
Dim b as integer = input
Dim y as integer =  ax + b

Open in new window

This way it is simple to use a formula that is already in the correct form. If it is not in the correct form then it is harder. in this case you have to break it up or use some algebra to get it in the correct form.

Quadratic Formula

      The quadratic formula is used to find the x intercepts in an equation that takes the following form ax² + bx + c = y. The x intercept is the value of x when y = 0. Also, being a non-linear function, it has 2 intercepts. The formula for finding the x intercepts is as follows.

Quadratic formula. image from see refrences for more
Notice that x is isolated on one side. Thus declare the variables and paste in the formula it can be done as follows.

Dim a As Double = TextBox1.Text
Dim b As Double = TextBox2.Text
Dim c As Double = TextBox3.Text
Dim x1 as Double =  (-b + math.sqrt(b ^ 2 - 4 * a * c)) / (2 * a)
Dim x2 as Double =  (-b - math.sqrt(b ^ 2 - 4 * a * c)) / (2 * a)

Open in new window

As you can see it is as simple as declaring the variables, then pasting in the formula to the right spot.

Object Collision

      This is something you will most likely run into if you make a game. You would think it would be easy to tell if two objects overlap but it is not as easy as you think. There is no method that I know of that checks if any points overlap. To do this there are 2 ways one is to get an array of all the points in the rectangle the object is occupying and see if any are the same this may be the best way if there are multiple objects to check. The other way that I have demonstrated is to check if any of the four sides may possibly overlap if all sides can overlap then at least one point is overlapping. For instance if the left side of one object is to the right of the right side of another object they do not overlap but if it is to the left of the right side then it may overlap. This code uses that logic on all sides to determine if it is overlapping at any point. My code is as follows.

    Public function collision(object1 as control, object2 as control) as Boolean
     if object1.Left >= object2.Left + object2.Width Then
          return false
          If object1.Left + object1.Width <= object2.Left Then
               return false
               If object1.Top >= object2.Top + object2.Height Then
                    return false
                    If object1.Top + object1.Height <= object2.Top Then
                         return false
                        return true
                    End If
               End If
          End If
     End If
    End Sub

Open in new window

It is a bit long but it works fairly quick since it can tell if it is impossible to collide at each if statement.

Projectile Path

      I have to give the credit of the formula and the idea of this section to courtenayt and the question here. This is for finding the x and y coordinates of a projectile at regular time intervals, also useful in game building. This seemed easy at first until it came to recording the coordinates at each second the formula for this is fairly complicated but is explained in the question linked to above. It is basically a matter of running the formula with all the parameters and recording the x, and y values at each second. For this instance I created a structure to hold the data but many other forms would work. This is the finished code. Note how the do statement loops increasing the time value at each loop. This is what eventually brings the projectile to ground or a y value of 0. also the math.sin/ math.cos statments require the angle to be in radians, but the parameter is expresed in degrees thus requiring a conversion. this is all done below.

    Public Structure locations_per_sec 
        Dim time As Integer 
        Dim XLoc As Double 
        Dim YLoc As Double 
    End Structure 
    Private a As Double 
    Private Vp As Double 
    Private Vh As Double 
    Private Vv As Double 
    Private H As Double 
    Public Property angle() As Double 
            Return a 
        End Get 
        Set(ByVal value As Double) 
            If -1 < value And value < 91 Then
                a = value
            Else : a = 45
            End If
        End Set 
    End Property 
    Public Property speed() As Double 
            Return Vp 
        End Get 
        Set(ByVal value As Double) 
            Vp = value 
        End Set 
    End Property 
    Public Function location_times(Optional ByVal Height As Double = 5.0) As List(Of locations_per_sec) 
        Dim z As New List(Of locations_per_sec)(0) 
        Dim time As Integer = 0 
        Dim XLoc As Double = 0 
        Dim YLoc As Double = 0
        h = Height
        Dim sec As New locations_per_sec
        angle = angle * math.pi / 180
        Vh = Vp * Math.Cos(angle) 
        Vv = Vp * Math.Sin(angle) 
        Do Until YLoc < 0 
            time += 1 
            XLoc = Vh * time 
            YLoc = H + Vv * time - 0.5 * 32 * time ^ 2 
            sec.time = time 
            sec.XLoc = XLoc 
            sec.YLoc = YLoc 
        Return z 
    End Function 

Open in new window

Again a lengthy piece of code but most of this code is to set up the data recording and to retrieve the parameters. Also note how an if statment was added to the set statment of the angle property. since a projectile is usaly sent slightly upwards in front of the sender I added this condition so that the parameter is never out of the correct range and if it is then the value is set to 45 as a default value.


      Finally I have shown you my tricks to math in VB.NET, and some more complex formulas that are useful in both games and real world calculations. Math is hard but if you know the formula the computer can do most of it for you. If you tell it to.


Unless otherwise stated all work here is of my own thoughts and unrelated to any other source
Quadratic formula verified by, and image copied from Wikipedia at
Projectile path formula received from the author of the question here

Comments (0)

Have a question about something in this article? You can receive help directly from the article author. Sign up for a free trial to get started.

Get access with a 7-day free trial.
You Belong in the World's Smartest IT Community