# Understanding tensor product surfaces

Recently I bought a book about curves and surfaces (Curves and Surfaces for Computer Graphics by David Salomon), and I'm having trouble understanding the tensor product surfaces.

I think I understand the idea behind the basic curves:

• Linear interpolation
• Lagrange polynomials
• Hermite curves
• Bézier curves
• B-splines

And the basic surfaces:

• Ruled surfaces (two curves on opposite sides from u=0 to u=1, and in the w-direction each point is a linear combination of these two curves)
• Bilinear surfaces (like above, but now the two mentioned curves are linear as well)
• Translational surfaces (one curve in the u-direction and another in w, having the same point $\mathbf{P}_{00}$. Just translate them to get the surface)
• Coons patches (the four boundary curves are given, and the middle points are obtained by adding the linear interpolation in both u- and w-direction, and then subtracting the bilinear surface made from the corners)

Can I use some of the surfaces mentioned above to get a grasp of the tensor product surfaces? In the book it says, you start with two parametric curves:

$$\begin{align} \mathbf{Q}(u) = \sum_{i=1}^n f_i(u) \mathbf{Q}_i\\ \mathbf{R}(w) = \sum_{i=1}^n g_i(w) \mathbf{R}_i \end{align}$$

And then you can write the function

$$\begin{align} \mathbf{P}(u,w) = \sum_{i=1}^n \sum_{j=1}^m f_i(u) g_j(w) \mathbf{P}_{ij} \end{align}$$

I find it difficult to interpret this double summation (luckily the writer included matrix notation), but more importantly, where do these points $\mathbf{P}_{ij}$ come from? Like, how does a biquadratic surface work? And a bicubic surface? By the way, I'm talking about the simplest case, the interpolating polynomial surfaces -- as soon as I understand these, the others (e.g. approximating Bézier patches) won't be that difficult I guess.

I hope some of you can provide a basic explanation, or perhaps referral to other readable material (mind you, I'm a mechanical engineer, so the more explanation and examples, the better). Thanks!

-
{"extraction_info": {"found_math": true, "script_math_tex": 0, "script_math_asciimath": 0, "math_annotations": 0, "math_alttext": 0, "mathml": 0, "mathjax_tag": 0, "mathjax_inline_tex": 2, "mathjax_display_tex": 2, "mathjax_asciimath": 0, "img_math": 0, "codecogs_latex": 0, "wp_latex": 0, "mimetex.cgi": 0, "/images/math/codecogs": 0, "mathtex.cgi": 0}, "config": {"markdown_headings": true, "markdown_code": true, "boilerplate_config": {"ratio_threshold": 0.3, "absolute_threshold": 10, "end_threshold": 15, "enable": true}, "remove_buttons": true, "remove_image_figures": true, "remove_link_clusters": true, "table_config": {"min_rows": 2, "min_cols": 3, "format": "github"}, "remove_chinese": true, "remove_edit_buttons": true, "extract_latex": true}, "english_confidence": 0.9346256852149963, "perplexity_flag": "middle"}