parametric cubic curve
boundary representation
blending function
spline
b-spline
cubic bezier curve
de casteljau algorithm
I have been diving into these topics since few days and I have not understood anything. I tried peter shirley's textbook on Computer Graphics. Foley et al, Hearn baker etc...
It is clear to me that I lack the mathematics preriquisites for understanding this. Thus, I am deeply asking for resources that I can do to brush up. Me being a computer engineering graduate I have done math classes, it is just that I became like a calculator instead of understanding the logic behind doing the formulas and steps so need a short revision.
When I was implementing these, the key was to visualise everything. It was much easier to see if things are correct by stepping through the algorithms graphically than just by looking at the math.
Free download
https://www.statlearning.com/
1 - Find a recent research paper of low-medium complexity 2 - Read it in whole 3 - take note of any term i don't understand 4 - Read the research paper where this idea was introduced 5 - Repeat steps 3 - 5
I am currently reading a fascinating 1973 paper about how different statistics affect our ability to differenciate between different textures. I am not a pro of Texture Synthesis maths but i have a good idea of where the field started, where it is going and understand the decisions of modern papers much better.
1) Scientific Computing by Michael Heath - Classic text covering a broad swath of domains and tries to build motivation/intuition before the mathematics (affordable Indian edition available).
2) Mathematical Principles for Scientific Computing and Visualization by Gerald Farin and Dianne Hansford - Nice overview of needed background. The authors also have a book named Practical Linear Algebra: A Geometry Toolbox which you might find a ideal companion.
3) Numerical Methods: Fundamentals and Applications by Rajesh Kumar Gupta - A relatively recent book with a really broad coverage of subjects and detailed mathematical expositions (affordable Indian edition available).
4) Numerical Algorithms: Methods for Computer Vision, Machine Learning, and Graphics by Justin Solomon - Good explanations (affordable Indian edition available). Free ebook available at https://people.csail.mit.edu/jsolomon/
5) Finally, Mathematics for Physicists: Introductory Concepts and Methods by Alexander Altland and Jan Von Delft is an excellent book to have as a reference. It has three sections viz. Linear Algebra, Calculus and Vector Calculus. The presentation is very precise, does not focus on proofs/lemmas but on concepts and covers a wide swath of important mathematics.
The good & old "The Nurbs Book" by Pieg and Tiller. You said you were a Computer Engineering Graduate, so I assume you know the basics of matrix multiplication, polynomials, etc? There's not much more needed than that, maybe some basic Calculus, understanding definition of limits and derivatives so things like continuity of knots make sense. Maybe a little knowledge on numerical methods is good, like some fixed-point iteration methods (Newton's).
A big part of why I'm saying this is because at their core, these are not difficult equations from a computational perspective. You really just need to understand addition, subtraction, multiplication, and division. My point is that the hard part about math often isn't the calculation part.
Let's take B-Splines for an example and look at what Wiki says
Either this is simple or incomprehensible, so let's break it down.What does piecewise mean? Here's an example piecewise function.
Given you're on HN and looking at computer graphics, I take it you're familiar with if statements? That's the same thing here. Let's translate. Looking at things from a different perspective can really help. We should think of x as a location and we're just describing something about that location. Here's another piecewise function, but now in everyday English: "Across the street all the houses end in even numbers, but on my side of the street all the houses are odd." There's always more ways to look at something. If you can't see what something means from this angle, try another. Be that another book teaching the same thing or another framework to describe the same thing. Get multiple perspectives. One will make more sense than another but which one that is tends to be personal."polynomial of order n"
A polynomial is an equation like a_0 + a_1 x + a_2 x^2 + ... + a_n x^{n}. Sorry, let me rewrite that: a_0 x^0 + a_1 x^1 + a_2 x^2 + ... + a_n x^{n}
Now in code
But we should break this down more, just like before. What is a_0? It is just a number. What does this represent? A point. What is a_1*x? That's a line. x is an arbitrary location. The a_1 is a scaling factor. So if a_1 is the number 2, then what our x is representing is all numbers (..., -4, -2, 0, 2, 4, ...} (is that all my neighbors across the street?) The a_2 x^2 is a curve, specifically a parabola. We can do the same thing. But also remember we're summing them together. So you have a point, a line, and a parabola. When you add them together you get something that is none of those things.What is really important here is that these functions you are interested in have a really critical property. They can be used to approximate almost anything. That almost part is really important, but you're going to have to dig deeper.
My point here is that take time to slow down. Don't rush this stuff. I promise you that if you take time to slow down then the speed will come. But if you try to go too fast you'll just end up getting stuck. This is tricky stuff. When learning it doesn't always make a ton of sense and unfortunately(?) when you do understand it it is almost obvious. Think of the slowing down part like making a plan. In a short race you should just take off running without thinking. But if it is longer then you will go faster if you first plan and strategize. It is the same thing here and I promise you this isn't a short race. You don't win a marathon by winning a bunch of consecutive sprints. The only thing you win by trying that is a trip to the hospital.
So slow down. Break problems apart. Find one part you think is confusing and focus on that. If it all seems confusing then try to walk through and force yourself to say why it is confusing. Keep doing this until you have something you understand. It is an iterative process. It'll feel slow, but I promise it pays dividends. Any complex problem can be broken down into a bunch of small problems[0]
You got this!
[0] This sentence doesn't just apply to how to figure things out, it applies directly to what you're trying to do and why you want these functions. If it doesn't make sense now, revisit, it will later.
In particular; the idea of breaking down a polynomial as a sum of terms, mapping each term to a graphical view (i.e. analytic to coordinate geometry) and then realizing such a sum of terms can be a complex curve (i.e. a complex graphical view) which can be an approximation of almost any function.
The teaching of mathematics has become so abstract that students are not taught how to map it to geometry which is THE way to build intuition. You can understand a lot by just imagining 2D/3D mappings before generalizing to n-dimensional vector spaces. Every student/beginner should study I.M.Gelfand's Functions and Graphs so that they can train themselves to imagine the graphs corresponding to a string of symbols.
I also think there's this misnomer of being good at geometry or good at algebra. I lied about math being a language. It is a family of languages. It's good to be able to speak several of these languages, just like it is beneficial to be able to program in multiple languages. The best language is only the best one in a certain context, but technically any of them will work. That's why I suggest multiple perspectives. I'll even say that programming is one of those math languages ;)
[0] https://external-content.duckduckgo.com/iu/?u=https%3A%2F%2F...
Also I.M. Gelfand and A. Shen's "Algebra" for the strings of symbols.