# Getting up to speed enough to tackle mathematics and logic applied in programming?

I'm a games programmer with an interest in the following areas:

• Calculus
• Matrices
• Graph theory
• Probability theory
• Combinatorics
• Statistics
• More linguistic related fields of logic such as natural language processing, generative grammars

Here are some examples of topics I've come across in the last 18 months in my design/development work, that have been of interest in solving certain problems. I grasp the outlines of these topics enough to know how they would help me to solve certain problems in my designs, but I don't even scratch the surface in understanding how to apply the math involved.

My maths ability is sorely lacking. I know enough to get by for the relatively simple games I write. My logical and analytical skills are generally good, being a programmer. I enjoyed math in high school, but college was a different story -- my lecturer was terrible, and I didn't get any individual tutoring as I did before that. Anything that was in my head has long since departed. I would need to relearn what I learnt, which in mostly centred around "the calculus".

Bearing in mind that I need to balance my time between improving as a game designer, developer and mathematician/logician, what is the best way for me to tackle these gaping holes in my knowledge, enough to work in-depth mathematical descriptions into working algorithms?

• Please make this community wiki. – cardinal Aug 6 '11 at 13:05
• Considering your background, a good place to start might be Concrete Mathematics. It may be on the challenging side of things for you, at least at the beginning. – cardinal Aug 6 '11 at 13:07
• Browsed through it a bit. I do like the more colloquial style. My maths book from college, Advanced Technical Mathematics, was so dry as to pucker your mouth. I shall have a look into it a bit further. I also like that it covers discrete and continuous mathematics -- that's key. – Engineer Aug 6 '11 at 18:06

$x' = x \cos \theta - y \sin \theta,$
$y' = x \sin \theta + y \cos \theta,$
observe that for fixed $\theta$ this is a linear transformation of x and y, and then extend it to three dimensions. (You can also learn the quaternion trick if you want, though it's not really necessary, especially at the start.) Understand this, and you can write a rudimentary 3D engine in a couple of hours.