Simple Math Question

Discussion in 'Off Topic' started by Carcophan, Sep 18, 2019.

  1. Carcophan

    Carcophan Member

    Joined:
    Aug 4, 2019
    Posts:
    53
    Trying to understand a simple formula in some of the code I found in a tutorial. Hoping it isn't just wrong, so assuming it isn't "wrong", then why is it "right"?

    The tutorial formula is: Var X = _cX * _var1 + _var1 / _var2;

    Which works out specifically to: Var X = 16 * 32 + 32 / 2

    Yes - They have Var1 + Var1

    We all understand the order of operations as: P>E>M>D>A>S, but with no parenthesis, the final number I get is 272, and this numerically does not make sense in the code for what it is used for.

    If I put my own parenthesis on it, I can work into (16 X 64) / 2 = 512 which is something a little more realistic, all things considered. But how can you get 'one from the other' if you didn't know?
     
  2. FrostyCat

    FrostyCat Member

    Joined:
    Jun 26, 2016
    Posts:
    4,547
    If this is in the context of converting grid positions to pixel positions, the formula you showed is perfectly correct, and your interpretation of it is wrong.
    • _cX is the integer part of horizontal grid position (i.e. number of squares from the left edge of the grid)
    • _var1 is the width of each square on the grid
    • _var2 is the the fractional part of the horizontal grid position
    The expression you showed (16 * 32 + 32 / 2) is trying to find the total width of 16 whole squares plus half a square. In that case, the correct placement of parentheses is (16 * 32) + (32 / 2), which is perfectly compliant with PEMDAS. This gives (16 * 32) + (32 / 2) = 512 + 16 = 528.

    If you got 272, it's because you just blindly punched in the symbols on a regular calculator in sequence. Plain calculators don't do PEMDAS, they blindly do arithmetic in the order that you entered. Instead of calculating (16*32)+(32/2), you calculated ((16*32)+32)/2.
     
    ParodyKnaveBob likes this.
  3. Carcophan

    Carcophan Member

    Joined:
    Aug 4, 2019
    Posts:
    53
    Good job on blowing my simplistic mind! Your comments make sense, thanks for the input FrostyCat.

    Other than you knowing basic math, and the (correct) hunch about "If this is in the context of converting grid positions to pixel positions" - how would you know?

    Meaning - if you didn't know that was the end goal/problem to begin with - how can you tell just by looking at something linear with simply plus and minus signs? You did a SUPERB job reverse engineering my poorly worded question. Kudos.
     
    ParodyKnaveBob likes this.
  4. FrostyCat

    FrostyCat Member

    Joined:
    Jun 26, 2016
    Posts:
    4,547
    I know it instantly because this is one of the most common positioning formulas in 2D computer graphics. Any draftsperson, digital graphics designer, front-end web developer or game programmer would have committed it to memory fairly early in their training, and cemented it through regular use.

    Here's the form that people like me instantly recognize:

    x = x0 + cx*cw
    y = y0 + cy*ch


    Where the grid starts at (x0, y0), each cell is cw by ch, and the grid position to convert is (cx, cy). Once you factor your expression into (16+1/2)*32 (i.e. applying distributive law in reverse), this fits the form exactly with the grid's starting point at zero. Another view is to treat the grid as being offset by half a square (i.e. x0 is 32*1/2, cx is 16). Either will give you the same conclusion in global coordinate space.

    Along with the formulas for centering a subregion and dividing a region into guttered columns/rows, these formulas form the backbone of most 2D layout tasks. If you seek to enter any field that involves placing things exactly on a blueprint or a screen, memorizing them is an imperative rite of passage.
     
    Gamebot, Carcophan and ParodyKnaveBob like this.
  5. Carcophan

    Carcophan Member

    Joined:
    Aug 4, 2019
    Posts:
    53
    Challenge accepted!!!

    Your follow up was enlightening. I feel like I owe you some tuition money or something, it was was so well worded. :)

    I will keep-on-keeping-on, and will continue the learning. Thanks again.
     

Share This Page

  1. This site uses cookies to help personalise content, tailor your experience and to keep you logged in if you register.
    By continuing to use this site, you are consenting to our use of cookies.
    Dismiss Notice