[{"id":"f544a09f-d6bf-45b0-a8fb-ae19221517e6","thread_id":"cff056c4-b4d5-4517-8f2c-bd10e331ab47","created_at":"2025-11-26T15:18:28Z","state":"done","prompt":"I am confused about the difference between knots, basis points, and control points in the context of B-splines. Explain and show me the difference. Generate an image with each part labeled.","reply":"<details><summary>Planned research</summary>\n<ul>\n<li>Research the definitions and differences between knots, basis points, and control points in B-splines</li>\n<li>Find visual examples or explanations that show how these components work together</li>\n<li>Create a comprehensive explanation with visual demonstration</li>\n</ul>\n</details>\n<details><summary>Searched with Kagi<p></p>\n<ul>\n<li>B-spline knots basis points control points difference explanation</li></ul></summary><br>\nSources (5):<br>\n<strong>B-spline - Wikipedia</strong><br>\n<a href=\"https://en.wikipedia.org/wiki/B-spline\" target=\"_blank\">https://en.wikipedia.org/wiki/B-spline</a><br>\nJan 13, 2008 A B-spline (short for basis spline) is a type of spline function designed to have minimal support (overlap) for a given degree, smoothness, and set of ...\n\n<p><strong>Non-uniform rational B-spline - Wikipedia</strong><br>\n<a href=\"https://en.wikipedia.org/wiki/Non-uniform_rational_B-spline\" target=\"_blank\">https://en.wikipedia.org/wiki/Non-uniform_rational_B-spline</a><br>\nAug 05, 2009 Non-uniform rational basis spline (NURBS) is a mathematical model using basis splines (B-splines) that is commonly used in computer graphics for representing curves and surfaces. It offers great flexibility and precision for handling both analytic (defined by common mathematical formulae) and modeled shapes.Multi-dimensional points might be used to control sets of time-driven values, e.g. the different positional and rotational settings of a robot arm. NURBS surfaces are just an application of this.</p>\n<p><strong>B-splines</strong><br>\n<a href=\"https://www.cl.cam.ac.uk/teaching/1999/AGraphHCI/SMAG/node4.html\" target=\"_blank\">https://www.cl.cam.ac.uk/teaching/1999/AGraphHCI/SMAG/node4.html</a><br>\nDec 28, 2008 B-splines are a more general type of curve than Bezier curves. In a B-spline each control point is associated with a basis function.</p>\n<p><strong>1.4.2 B-spline curve - MIT</strong><br>\n<a href=\"https://web.mit.edu/hyperbook/Patrikalakis-Maekawa-Cho/node17.html\" target=\"_blank\">https://web.mit.edu/hyperbook/Patrikalakis-Maekawa-Cho/node17.html</a><br>\nFeb 01, 2014 End points geometric property: Unlike Bézier curves, B-spline curves do not in general pass through the two end control points. Increasing the multiplicity of a knot reduces the continuity of the curve at that knot. Specifically, the curve is times continuously differentiable at a knot with multiplicity , and thus has continuity.</p>\n<p><strong>1.4.3 Algorithms for B-spline curves</strong><br>\n<a href=\"https://web.mit.edu/hyperbook/Patrikalakis-Maekawa-Cho/node18.html\" target=\"_blank\">https://web.mit.edu/hyperbook/Patrikalakis-Maekawa-Cho/node18.html</a><br>\nFeb 22, 2014 1.4.3 Algorithms for B-spline curves. Evaluation and subdivision algorithm: A B-spline curve can be evaluated at a specific parameter value. $ \\bar t$ using the de Boor algorithm, which is a generalization of the de Casteljau algorithm introduced in Sect. 1.3.5. The repeated substitution of the recursive definition of the B-spline basis function.Within exact arithmetic, inserting a knot does not change the curve, so it does not change the continuity. However, if any of the control points are moved after knot insertion, the continuity at the knot will become.</p>\n</details>\n<details><summary>Contemplated</summary><br>\n The search results provide some basic information about B-splines but don't clearly explain the differences between knots, basis points, and control points. I need to get more detailed information about these specific components. Let me search for more specific explanations and also use the librarian tool to get detailed information from the MIT source which seems comprehensive.<p></p>\n</details>\n<details><summary>Gathered key details from:<p></p>\n<ul>\n<li><a href=\"https://web.mit.edu/hyperbook/Patrikalakis-Maekawa-Cho/node17.html\" target=\"_blank\">1.4.2 B-spline curve</a></li></ul></summary>\n\n<h3>Query</h3>\n<p>Explain the difference between knots, control points, and basis functions in B-splines. What are knots, what are control points, and how do basis functions relate to these?</p>\n<h3>Response</h3>\n<p>A B-spline curve is defined as a linear combination of control points and B-spline basis functions given by</p>\n<hr>\n<p>In this context the control points are called <em>de Boor points</em>. The basis function is defined on a <em>knot vector</em></p>\n<hr>\n<p>where there are elements, i.e. the number of control points plus the order of the curve . Each knot <em>span</em> is mapped onto a polynomial curve between two successive joints and . Normalization of the knot vector, so it covers the</p>\n</details>\n<details><summary>Searched with Kagi<p></p>\n<ul>\n<li>B-spline knot vector definition</li>\n<li>B-spline control points vs basis functions</li>\n<li>B-spline basis functions explanation</li></ul></summary><br>\nSources (12):<br>\n<strong>B-splines</strong><br>\n<a href=\"https://www.cl.cam.ac.uk/teaching/1999/AGraphHCI/SMAG/node4.html\" target=\"_blank\">https://www.cl.cam.ac.uk/teaching/1999/AGraphHCI/SMAG/node4.html</a><br>\nDec 28, 2008 The knot vector can, by its definition, be any sequence of numbers provided that each one is greater than or equal to the preceding one. Some types of knot ...\n\n<p><strong>B-spline - Wikipedia</strong><br>\n<a href=\"https://en.wikipedia.org/wiki/B-spline\" target=\"_blank\">https://en.wikipedia.org/wiki/B-spline</a><br>\nMar 31, 2024 The B-spline contributes only in the range between the first and last of these knots and is zero elsewhere. ... knot interval where it is non-zero, a ...</p>\n<p><strong>Spline (mathematics) - Wikipedia</strong><br>\n<a href=\"https://en.wikipedia.org/wiki/Spline_(mathematics\" target=\"_blank\">https://en.wikipedia.org/wiki/Spline_(mathematics)</a>)<br>\nOct 19, 2025 For a number of meaningful definitions of the roughness measure, the spline functions are found to be finite dimensional in nature, which is the ...</p>\n<p><strong>B-splines - cl.cam.ac.uk</strong><br>\n<a href=\"https://www.cl.cam.ac.uk/teaching/0001/AGraphHCI/SMEG/node4.html\" target=\"_blank\">https://www.cl.cam.ac.uk/teaching/0001/AGraphHCI/SMEG/node4.html</a><br>\n The knot vector can, by its definition, be any sequence of numbers provided that each one is greater than or equal to the preceding one. Some types of knot vector are more useful than others. Knot vectors are generally placed into one of three categories: uniform, open uniform, and non-uniform.</p>\n<p><strong>B-spline - Wikipedia</strong><br>\n<a href=\"https://en.wikipedia.org/wiki/B-spline\" target=\"_blank\">https://en.wikipedia.org/wiki/B-spline</a><br>\nJan 13, 2008</p>\n<p><strong>Non-uniform rational B-spline - Wikipedia</strong><br>\n<a href=\"https://en.wikipedia.org/wiki/Non-uniform_rational_B-spline\" target=\"_blank\">https://en.wikipedia.org/wiki/Non-uniform_rational_B-spline</a><br>\nAug 05, 2009 3.2 Control points. 3.3 Knot vector. 3.4 Construction of the basis functions.In general, editing NURBS curves and surfaces is intuitive and predictable. Control points are always either connected directly to the curve or surface, or else act as if they were connected by a rubber band. Depending on the type of user interface, the editing of NURBS curves and surfaces can be via their control points (similar to Bézier curves) or via higher level tools such as spline modeling and hierarchical editing.</p>\n<p><strong>20_BSplines.ppt</strong><br>\n<a href=\"http://www0.cs.ucl.ac.uk/staff/j.kautz/teaching/3080/Slides/20_BSplines.pdf\" target=\"_blank\">http://www0.cs.ucl.ac.uk/staff/j.kautz/teaching/3080/Slides/20_BSplines.pdf</a><br>\nMar 20, 2016 – Desirable: basis functions with continuity built-in. B-Splines. • Polynomial curves • Ck-1 continuity.Cubic B-Splines – Basis Functions Visually • Chained together. Knot Insertion • Inserting new knots in the sequence while. maintaining the B-spline curves can be used for. – Rendering – Adding greater flexibility to the curve shape.</p>\n<p><strong>B-spline Curves: Definition</strong><br>\n<a href=\"https://pages.mtu.edu/~shene/COURSES/cs3621/NOTES/spline/B-spline/bspline-curve.html\" target=\"_blank\">https://pages.mtu.edu/~shene/COURSES/cs3621/NOTES/spline/B-spline/bspline-curve.html</a><br>\n A B-spline curve involves more information, namely: a set of n+1 control points, a knot vector of m+1 knots, and a degree p.</p>\n<p><strong>B-spline Basis Functions: Definition</strong><br>\n<a href=\"https://pages.mtu.edu/~shene/COURSES/cs3621/NOTES/spline/B-spline/bspline-basis.html\" target=\"_blank\">https://pages.mtu.edu/~shene/COURSES/cs3621/NOTES/spline/B-spline/bspline-basis.html</a><br>\nAug 20, 2017 Each B-spline basis function is non-zero on a few adjacent subintervals and, as a result, B-spline basis functions are quite local.</p>\n<p><strong>B-spline Basis Functions: Important Properties</strong><br>\n<a href=\"https://pages.mtu.edu/~shene/COURSES/cs3621/NOTES/spline/B-spline/bspline-property.html\" target=\"_blank\">https://pages.mtu.edu/~shene/COURSES/cs3621/NOTES/spline/B-spline/bspline-property.html</a><br>\nSep 04, 2017 Basis function Ni,p(u) is a composite curve of degree p polynomials with joining points at knots in [ui, ui+p+1 ) The example shown on the previous page illustrates this property well. For example, N0,2(u), which is non-zero on [0,3), is constructed from three parabolas defined on [0,1), [1,2) and [2,3). They are connected together at the knots 2 and 3.</p>\n<p><strong>B-spline - Wikipedia</strong><br>\n<a href=\"https://en.wikipedia.org/wiki/B-spline\" target=\"_blank\">https://en.wikipedia.org/wiki/B-spline</a><br>\nJan 13, 2008</p>\n<p><strong>Non-uniform rational B-spline - Wikipedia</strong><br>\n<a href=\"https://en.wikipedia.org/wiki/Non-uniform_rational_B-spline\" target=\"_blank\">https://en.wikipedia.org/wiki/Non-uniform_rational_B-spline</a><br>\nAug 05, 2009 Non-uniform rational basis spline ( NURBS ) is a mathematical model using basis splines (B-splines) that is commonly used in computer graphics for ...</p>\n</details>\n<details><summary>Contemplated</summary><br>\n I'm getting good information now. Let me get more detailed information from the MTU sources which seem to have comprehensive explanations of B-spline components. I should also clarify that \"basis points\" might be a confusion with \"basis functions\" - I need to verify this terminology.<p></p>\n</details>\n<details><summary>Gathered key details from:<p></p>\n<ul>\n<li><a href=\"https://pages.mtu.edu/~shene/COURSES/cs3621/NOTES/spline/B-spline/bspline-curve.html\" target=\"_blank\">B-spline Curves: Definition</a></li></ul></summary>\n\n<h3>Query</h3>\n<p>Explain what knots are in B-splines, what control points are, and what basis functions are. How do these three components work together to define a B-spline curve?</p>\n<h3>Response</h3>\n<p>Given <em>n</em> + 1 control points <strong>P</strong>0, <strong>P</strong>1,<br>\n..., <strong>P</strong><em>n</em> and a knot vector<br>\n<em>U</em> = { <em>u</em>0, <em>u</em>1, ...,<br>\n<em>u**m</em> }, the B-spline curve of degree <em>p</em> defined</p>\n<hr>\n<p>where <em>N**i,p</em>(<em>u</em>)'s are B-spline basis functions<br>\nof degree <em>p</em>. The form of a B-spline curve is very similar to that of<br>\na Bézier curve. Unlike a Bézier curve, a B-spline curve involves<br>\nmore information, namely: a set of <em>n</em>+1 control points, a knot vector of<br>\n<em>m</em>+1 knots, and a degree <em>p</em>.</p>\n<hr>\n<p>The point on the curve that corresponds to a knot <em>u**i</em>,<br>\n<strong>C</strong>(<em>u**i</em>), is referred to as a<br>\n<em>knot point</em>. Hence, the knot points divide<br>\na B-spline curve into curve segments, each of which is defined on a knot span.</p>\n<hr>\n<p></p>\n<hr>\n<p>Although <em>N**i,p</em>(<em>u</em>) looks like<br>\n<em>B**n,i</em>(<em>u</em>), the degree of a B-spline<br>\nbasis function is an input, while the degree of a<br>\nBézier basis function depends on the number of control points.</p>\n</details>\n<details><summary>Gathered key details from:<p></p>\n<ul>\n<li><a href=\"https://pages.mtu.edu/~shene/COURSES/cs3621/NOTES/spline/B-spline/bspline-basis.html\" target=\"_blank\">B-spline Basis Functions: Definition</a></li></ul></summary>\n\n<h3>Query</h3>\n<p>What are B-spline basis functions and how are they defined? What is their relationship to knots?</p>\n<h3>Response</h3>\n<p>Bézier basis functions are used as weights. B-spline basis functions will be used the same way; however, they are much more complex. There are two interesting properties that are not part of the Bézier basis functions, namely: (1) the domain is subdivided by knots, and (2) basis functions are not non-zero on the entire interval. In fact, each B-spline basis function is non-zero on a few adjacent subintervals and, as a result, B-spline basis functions are quite \"local\".</p>\n<hr>\n<p>Let <em>U</em> be a set of <em>m</em> + 1 non-decreasing numbers,<em>u_0 <= <em>u_2 <= <em>u_3 <= ... <= <em>u</em> <em>m</em>. The <em>u</em> <em>i</em>'s are called_knots</em>, the set <em>U</em> the_knot vector</em>, and the half-open interval [<em>u</em> <em>i</em>, <em>u</em> <em>i</em>+1) the__i-th knot span</em>. Note that since some <em>u</em> <em>i</em>'s may be equal, some knot spans may not exist. If a knot <em>u</em> <em>i</em> appears <em>k_times (<em>i.e.</em>, <em>ui</em> = <em>u</em> <em>i</em>+1 = ... = <em>u</em> <em>i+k</em>-1), where <em>k</em> &gt; 1, <em>u</em> <em>i</em> is a_multiple knot</em> of_multiplicity_ <em>k</em>, written as_u_ <em>i</em>(<em>k</em>). Otherwise, if <em>u</em> <em>i</em> appears only once, it is a_simple knot_. If the knots are equally spaced (<em>i.e.</em>,<em>u</em> <em>i</em>+1 - <em>u</em> <em>i</em> is a constant for 0 <= <em>i</em> <= <em>m</em> - 1), the knot vector or the knot sequence is said_uniform_; otherwise, it is_non-uniform_.</p>\n<hr>\n<p>To define B-spline basis functions, we need one more parameter, the degree of these basis functions, <em>p</em>. The <em>i</em>-th B-spline basis function of degree <em>p</em>, written as_N_ <em>i,p</em>(<em>u</em>), is defined recursively as follows:</p>\n<p>The above is usually referred to as the_Cox-de Boor recursion formula_. This definition looks complicated; but, it is not difficult to understand. If the degree is zero (<em>i.e.</em>, <em>p</em> = 0), these basis functions are all <em>step functions</em> and this is what the first expression says. That is, basis function <em>N</em> <em>i</em>,0(<em>u</em>) is 1 if_u_ is in the <em>i</em>-th knot span [<em>u</em> <em>i</em>, <em>u</em> <em>i</em>+1). For</p>\n<hr>\n<p>The above is usually referred to as the_Cox-de Boor recursion formula_. This</p>\n<hr>\n<p>> <strong>Basis function <em>N</em> <em>i,p</em>(<em>u</em>) is non-zero on [<em>u</em> <em>i</em>, <em>u</em> <em>i+p</em>+1). Or, equivalently, <em>N</em> <em>i,p</em>(<em>u</em>) is non-zero on <em>p</em>+1 knot spans [<em>u</em> <em>i</em>, <em>u</em> <em>i</em>+1), [<em>u</em> <em>i</em>+1, <em>u</em> <em>i</em>+2), ..., [<em>u</em> <em>i+p</em>, <em>u</em> <em>i+p</em>+1).</strong></p>\n</details>\n<details><summary>Response planned</summary><br>\n I have gathered comprehensive information about B-splines from multiple authoritative sources. The research clarifies the three key components: knots (parameter values that define intervals), control points (geometric points that influence curve shape), and basis functions (mathematical functions that blend control points). I should note that \"basis points\" is likely a confusion with \"basis functions\" - there's no standard term \"basis points\" in B-spline literature.<p></p>\n<ol>\n<li>Clarify terminology - \"basis points\" should be \"basis functions\"</li>\n<li>Define each component clearly:\n<ul>\n<li>Knots: parameter values that subdivide the domain</li>\n<li>Control points: geometric points that influence curve shape</li>\n<li>Basis functions: mathematical blending functions</li>\n</ul>\n</li>\n<li>Explain how they work together in the B-spline formula</li>\n<li>Generate a labeled diagram showing all three components</li>\n<li>Provide visual examples of how each affects the curve</li>\n</ol>\n<p>Use clear definitions with mathematical context, then provide a comprehensive labeled diagram. The visual should show a B-spline curve with knots marked on the parameter axis, control points as geometric points, and basis functions plotted to show their local support.</p>\n</details>\n<details><summary>Generating image</summary><br>\n Technical diagram showing B-spline components<p></p>\n</details><details><summary>Thinking</summary>\n<p>Hmmm...</p>\n<p><strong>Explaining concepts clearly</strong></p>\n<p>I'm thinking about how to visually explain \"show me the difference.\" I can imagine a horizontal axis with tick marks as knots, along with another plot of basis functions on top. To the right, I could depict a main 2D plane with a control polygon and curve, labeling everything appropriately. Since I want to keep my explanation concise but not too terse, I realize I don't need citations or external tools right now, but I'm a bit uncertain about some previous instructions on that.</p>\n<p><strong>Clarifying drawing instructions</strong></p>\n<p>So, I'm realizing I need to answer directly without using any tool references. I plan to structure my explanation in sections with headings and include a simple equation. I'll cover both 1D and 2D aspects.</p>\n<p>For the drawing instructions:</p>\n<ol>\n<li>First, I'll draw the control polygon points P0...Pn along with the polygon. </li>\n<li>Next, I’ll illustrate the curve. </li>\n<li>I’ll add the parameter axis underneath, marking the knots as u0...um and labeling it \"knot vector.\" </li>\n<li>Above that, I’ll plot the overlapping basis functions, labeling them as N0, N1, etc. </li>\n</ol>\n<p>I may include arrows showing the links from basis functions to control points. A specific example could be a cubic B-spline with control points and a uniform knot vector, clarifying the difference between \"knot points\" on the curve and control points.</p>\n</details>\n<p>In B-splines there are <strong>three different kinds of “things”</strong> that people often mix up:</p>\n<ul>\n<li><strong>Control points</strong> – geometric points in space </li>\n<li><strong>Knots / knot vector</strong> – numbers in <em>parameter</em> space </li>\n<li><strong>Basis functions</strong> (often what people mean when they say “basis points”) – functions of the parameter built from the knots</li>\n</ul>\n<p>I’ll explain each, how they work together, and then describe a labeled diagram you can draw (or implement) yourself.</p>\n<hr>\n<h2>1. The basic B-spline formula</h2>\n<p>A B-spline curve of degree <span><math xmlns=\"http://www.w3.org/1998/Math/MathML\" display=\"inline\"><mrow><mi>p</mi></mrow></math></span> is</p>\n<p>\n</p><div class=\"math-box\"><math xmlns=\"http://www.w3.org/1998/Math/MathML\" display=\"block\"><mrow><mi>𝐂</mi><mo stretchy=\"false\">(</mo><mi>u</mi><mo stretchy=\"false\">)</mo><mo>=</mo><munderover><mo>∑</mo><mrow><mi>i</mi><mo>=</mo><mn>0</mn></mrow><mrow><mi>n</mi></mrow></munderover><msub><mi>N</mi><mrow><mi>i</mi><mo>,</mo><mi>p</mi></mrow></msub><mo stretchy=\"false\">(</mo><mi>u</mi><mo stretchy=\"false\">)</mo><mspace width=\"0.167em\"></mspace><msub><mi>𝐏</mi><mi>i</mi></msub></mrow></math></div>\n<p></p>\n<ul>\n<li><span><math xmlns=\"http://www.w3.org/1998/Math/MathML\" display=\"inline\"><mrow><msub><mi>𝐏</mi><mi>i</mi></msub></mrow></math></span>: <strong>control points</strong> (vectors in 2D or 3D)</li>\n<li><span><math xmlns=\"http://www.w3.org/1998/Math/MathML\" display=\"inline\"><mrow><msub><mi>N</mi><mrow><mi>i</mi><mo>,</mo><mi>p</mi></mrow></msub><mo stretchy=\"false\">(</mo><mi>u</mi><mo stretchy=\"false\">)</mo></mrow></math></span>: <strong>B-spline basis functions</strong> of degree <span><math xmlns=\"http://www.w3.org/1998/Math/MathML\" display=\"inline\"><mrow><mi>p</mi></mrow></math></span></li>\n<li>The <span><math xmlns=\"http://www.w3.org/1998/Math/MathML\" display=\"inline\"><mrow><msub><mi>N</mi><mrow><mi>i</mi><mo>,</mo><mi>p</mi></mrow></msub></mrow></math></span> are defined using a <strong>knot vector</strong></li>\n<li><span><math xmlns=\"http://www.w3.org/1998/Math/MathML\" display=\"inline\"><mrow><mi>u</mi></mrow></math></span>: the <strong>parameter</strong> along the curve</li>\n</ul>\n<p>So:</p>\n<ul>\n<li><strong>Control points</strong> live in <em>geometric space</em> (e.g. <span><math xmlns=\"http://www.w3.org/1998/Math/MathML\" display=\"inline\"><mrow><msup><mi>ℝ</mi><mn>2</mn></msup></mrow></math></span>, <span><math xmlns=\"http://www.w3.org/1998/Math/MathML\" display=\"inline\"><mrow><msup><mi>ℝ</mi><mn>3</mn></msup></mrow></math></span>). </li>\n<li><strong>Knots and basis functions</strong> live in <em>parameter space</em> (the variable <span><math xmlns=\"http://www.w3.org/1998/Math/MathML\" display=\"inline\"><mrow><mi>u</mi></mrow></math></span>).</li>\n</ul>\n<hr>\n<h2>2. Control points</h2>\n<p><strong>What they are</strong></p>\n<ul>\n<li>A finite set of points <span><math xmlns=\"http://www.w3.org/1998/Math/MathML\" display=\"inline\"><mrow><msub><mi>𝐏</mi><mn>0</mn></msub><mo>,</mo><msub><mi>𝐏</mi><mn>1</mn></msub><mo>,</mo><mo>…</mo><mo>,</mo><msub><mi>𝐏</mi><mi>n</mi></msub></mrow></math></span> in 2D/3D.</li>\n<li>If you connect them in order, you get the <strong>control polygon</strong>.</li>\n</ul>\n<p><strong>What they do</strong></p>\n<ul>\n<li>They <strong>shape</strong> the curve:<ul>\n<li>Moving a control point pulls/pushes the nearby part of the curve.</li>\n</ul>\n</li>\n<li>In general, a B-spline curve <strong>does not pass through</strong> its control points (except at certain configurations, e.g. clamped ends or special knot multiplicities).</li>\n<li>Each control point affects only a <strong>local part</strong> of the curve (one of the key advantages of B-splines).</li>\n</ul>\n<p>Think of control points as the <strong>handles</strong> an artist drags around to sculpt the curve.</p>\n<hr>\n<h2>3. Knots and the knot vector</h2>\n<p><strong>What they are</strong></p>\n<ul>\n<li>A <strong>knot vector</strong> is a non-decreasing sequence of real numbers</li>\n</ul>\n<p>\n</p><div class=\"math-box\"><math xmlns=\"http://www.w3.org/1998/Math/MathML\" display=\"block\"><mrow><mi>U</mi><mo>=</mo><mo stretchy=\"false\">{</mo><msub><mi>u</mi><mn>0</mn></msub><mo>,</mo><msub><mi>u</mi><mn>1</mn></msub><mo>,</mo><mo>…</mo><mo>,</mo><msub><mi>u</mi><mi>m</mi></msub><mo stretchy=\"false\">}</mo><mo>,</mo><mspace width=\"1em\"></mspace><msub><mi>u</mi><mn>0</mn></msub><mo>≤</mo><msub><mi>u</mi><mn>1</mn></msub><mo>≤</mo><mo>…</mo><mo>≤</mo><msub><mi>u</mi><mi>m</mi></msub><mo>.</mo></mrow></math></div>\n<p></p>\n<ul>\n<li>Each <span><math xmlns=\"http://www.w3.org/1998/Math/MathML\" display=\"inline\"><mrow><msub><mi>u</mi><mi>i</mi></msub></mrow></math></span> is a <strong>knot</strong>.</li>\n<li>The intervals <span><math xmlns=\"http://www.w3.org/1998/Math/MathML\" display=\"inline\"><mrow><mo stretchy=\"false\">[</mo><msub><mi>u</mi><mi>i</mi></msub><mo>,</mo><msub><mi>u</mi><mrow><mi>i</mi><mo>+</mo><mn>1</mn></mrow></msub><mo stretchy=\"false\">)</mo></mrow></math></span> are <strong>knot spans</strong>.</li>\n</ul>\n<p><strong>What they do</strong></p>\n<ul>\n<li>Knots live in the <strong>parameter domain</strong> of the curve, not in geometric space.</li>\n<li>They control:<ul>\n<li><strong>Where</strong> the piecewise polynomial pieces of the curve start and end (segment boundaries).</li>\n<li><strong>Smoothness</strong> at those boundaries (repeated knots reduce continuity).</li>\n<li><strong>Parameterization</strong> of the curve (uniform vs non-uniform spacing).</li>\n</ul>\n</li>\n</ul>\n<p>Intuition:</p>\n<ul>\n<li>Imagine a ruler along the bottom labeled with parameter <span><math xmlns=\"http://www.w3.org/1998/Math/MathML\" display=\"inline\"><mrow><mi>u</mi></mrow></math></span>.</li>\n<li><strong>Tick marks on this ruler are the knots.</strong></li>\n<li>Between two ticks, the curve piece is a single polynomial segment (for a fixed degree).</li>\n</ul>\n<hr>\n<h2>4. Basis functions (often miscalled “basis points”)</h2>\n<p>There isn’t a standard B-spline concept called “basis points”; what you almost certainly want is <strong>basis functions</strong>.</p>\n<p><strong>What they are</strong></p>\n<ul>\n<li>For each control point <span><math xmlns=\"http://www.w3.org/1998/Math/MathML\" display=\"inline\"><mrow><msub><mi>𝐏</mi><mi>i</mi></msub></mrow></math></span> and degree <span><math xmlns=\"http://www.w3.org/1998/Math/MathML\" display=\"inline\"><mrow><mi>p</mi></mrow></math></span>, we have a basis function <span><math xmlns=\"http://www.w3.org/1998/Math/MathML\" display=\"inline\"><mrow><msub><mi>N</mi><mrow><mi>i</mi><mo>,</mo><mi>p</mi></mrow></msub><mo stretchy=\"false\">(</mo><mi>u</mi><mo stretchy=\"false\">)</mo></mrow></math></span>.</li>\n<li>These are scalar functions of <span><math xmlns=\"http://www.w3.org/1998/Math/MathML\" display=\"inline\"><mrow><mi>u</mi></mrow></math></span> defined <strong>from the knot vector</strong> via the Cox–de Boor recursion.</li>\n<li>\n<p>Key properties:</p>\n<ul>\n<li>Each <span><math xmlns=\"http://www.w3.org/1998/Math/MathML\" display=\"inline\"><mrow><msub><mi>N</mi><mrow><mi>i</mi><mo>,</mo><mi>p</mi></mrow></msub><mo stretchy=\"false\">(</mo><mi>u</mi><mo stretchy=\"false\">)</mo></mrow></math></span> is <strong>nonzero only on a small interval</strong> of <span><math xmlns=\"http://www.w3.org/1998/Math/MathML\" display=\"inline\"><mrow><mi>u</mi></mrow></math></span>:<br>\nit is nonzero on <span><math xmlns=\"http://www.w3.org/1998/Math/MathML\" display=\"inline\"><mrow><mo stretchy=\"false\">[</mo><msub><mi>u</mi><mi>i</mi></msub><mo>,</mo><msub><mi>u</mi><mrow><mi>i</mi><mo>+</mo><mi>p</mi><mo>+</mo><mn>1</mn></mrow></msub><mo stretchy=\"false\">)</mo></mrow></math></span>.<br>\n(So it spans exactly <span><math xmlns=\"http://www.w3.org/1998/Math/MathML\" display=\"inline\"><mrow><mi>p</mi><mo>+</mo><mn>1</mn></mrow></math></span> consecutive knot spans.)</li>\n</ul>\n</li>\n<li>\n<p>For any <span><math xmlns=\"http://www.w3.org/1998/Math/MathML\" display=\"inline\"><mrow><mi>u</mi></mrow></math></span>, only a few basis functions are nonzero → <strong>local control</strong>.</p>\n</li>\n<li>At any parameter <span><math xmlns=\"http://www.w3.org/1998/Math/MathML\" display=\"inline\"><mrow><mi>u</mi></mrow></math></span>, the basis functions sum to 1:<br>\n<div class=\"math-box\"><math xmlns=\"http://www.w3.org/1998/Math/MathML\" display=\"block\"><mrow><munder><mo>∑</mo><mi>i</mi></munder><msub><mi>N</mi><mrow><mi>i</mi><mo>,</mo><mi>p</mi></mrow></msub><mo stretchy=\"false\">(</mo><mi>u</mi><mo stretchy=\"false\">)</mo><mo>=</mo><mn>1</mn><mo>.</mo></mrow></math></div>\n<br>\n This makes the curve a <strong>weighted average</strong> of control points.</li>\n</ul>\n<p><strong>What they do</strong></p>\n<ul>\n<li>They are the <strong>weights</strong> in the linear combination:</li>\n</ul>\n<p>\n</p><div class=\"math-box\"><math xmlns=\"http://www.w3.org/1998/Math/MathML\" display=\"block\"><mrow><mi>𝐂</mi><mo stretchy=\"false\">(</mo><mi>u</mi><mo stretchy=\"false\">)</mo><mo>=</mo><munder><mo>∑</mo><mi>i</mi></munder><msub><mi>N</mi><mrow><mi>i</mi><mo>,</mo><mi>p</mi></mrow></msub><mo stretchy=\"false\">(</mo><mi>u</mi><mo stretchy=\"false\">)</mo><mspace width=\"0.167em\"></mspace><msub><mi>𝐏</mi><mi>i</mi></msub><mo>.</mo></mrow></math></div>\n<p></p>\n<ul>\n<li>For each parameter value <span><math xmlns=\"http://www.w3.org/1998/Math/MathML\" display=\"inline\"><mrow><mi>u</mi></mrow></math></span>, the <span><math xmlns=\"http://www.w3.org/1998/Math/MathML\" display=\"inline\"><mrow><msub><mi>N</mi><mrow><mi>i</mi><mo>,</mo><mi>p</mi></mrow></msub><mo stretchy=\"false\">(</mo><mi>u</mi><mo stretchy=\"false\">)</mo></mrow></math></span> tell you <strong>how much each control point influences the curve point</strong> <span><math xmlns=\"http://www.w3.org/1998/Math/MathML\" display=\"inline\"><mrow><mi>𝐂</mi><mo stretchy=\"false\">(</mo><mi>u</mi><mo stretchy=\"false\">)</mo></mrow></math></span>.</li>\n</ul>\n<p>So:</p>\n<ul>\n<li><strong>Knots</strong> → define the parameter intervals where each basis function is active. </li>\n<li><strong>Basis functions</strong> → smooth, overlapping “blending” functions over those intervals. </li>\n<li><strong>Control points</strong> → positions being blended.</li>\n</ul>\n<hr>\n<h2>5. How they work together (conceptual picture)</h2>\n<p>Put together:</p>\n<ol>\n<li>The <strong>knot vector</strong> slices the <span><math xmlns=\"http://www.w3.org/1998/Math/MathML\" display=\"inline\"><mrow><mi>u</mi></mrow></math></span>-axis into segments.</li>\n<li>From the knots and degree <span><math xmlns=\"http://www.w3.org/1998/Math/MathML\" display=\"inline\"><mrow><mi>p</mi></mrow></math></span>, we build <strong>basis functions</strong> <span><math xmlns=\"http://www.w3.org/1998/Math/MathML\" display=\"inline\"><mrow><msub><mi>N</mi><mrow><mi>i</mi><mo>,</mo><mi>p</mi></mrow></msub><mo stretchy=\"false\">(</mo><mi>u</mi><mo stretchy=\"false\">)</mo></mrow></math></span>. Each:<ul>\n<li>Is built piecewise over the knot spans.</li>\n<li>Is nonzero only over a small range of <span><math xmlns=\"http://www.w3.org/1998/Math/MathML\" display=\"inline\"><mrow><mi>u</mi></mrow></math></span>.</li>\n</ul>\n</li>\n<li>The <strong>control points</strong> are combined using these basis functions:</li>\n</ol>\n<ul>\n<li>For each <span><math xmlns=\"http://www.w3.org/1998/Math/MathML\" display=\"inline\"><mrow><mi>u</mi></mrow></math></span>, you evaluate all <span><math xmlns=\"http://www.w3.org/1998/Math/MathML\" display=\"inline\"><mrow><msub><mi>N</mi><mrow><mi>i</mi><mo>,</mo><mi>p</mi></mrow></msub><mo stretchy=\"false\">(</mo><mi>u</mi><mo stretchy=\"false\">)</mo></mrow></math></span>.</li>\n<li>Multiply each control point <span><math xmlns=\"http://www.w3.org/1998/Math/MathML\" display=\"inline\"><mrow><msub><mi>𝐏</mi><mi>i</mi></msub></mrow></math></span> by its weight <span><math xmlns=\"http://www.w3.org/1998/Math/MathML\" display=\"inline\"><mrow><msub><mi>N</mi><mrow><mi>i</mi><mo>,</mo><mi>p</mi></mrow></msub><mo stretchy=\"false\">(</mo><mi>u</mi><mo stretchy=\"false\">)</mo></mrow></math></span>.</li>\n<li>Add them up → that gives the curve point <span><math xmlns=\"http://www.w3.org/1998/Math/MathML\" display=\"inline\"><mrow><mi>𝐂</mi><mo stretchy=\"false\">(</mo><mi>u</mi><mo stretchy=\"false\">)</mo></mrow></math></span>.</li>\n</ul>\n<hr>\n<h2>6. Labeled diagram you can draw or implement</h2>\n<p>I’m not able to produce an actual image file in this environment right now, but here’s <strong>exactly how to draw a clear diagram</strong> showing all parts and how to label them.</p>\n<p>Consider a simple cubic B-spline (degree <span><math xmlns=\"http://www.w3.org/1998/Math/MathML\" display=\"inline\"><mrow><mi>p</mi><mo>=</mo><mn>3</mn></mrow></math></span>).</p>\n<h3>Step 1 – Draw the control polygon and curve (geometry view)</h3>\n<ol>\n<li>\n<p>On a 2D plane, plot four or five points, for example:<br>\n</p><div class=\"math-box\"><math xmlns=\"http://www.w3.org/1998/Math/MathML\" display=\"block\"><mrow><msub><mi>𝐏</mi><mn>0</mn></msub><mo>,</mo><msub><mi>𝐏</mi><mn>1</mn></msub><mo>,</mo><msub><mi>𝐏</mi><mn>2</mn></msub><mo>,</mo><msub><mi>𝐏</mi><mn>3</mn></msub><mo>,</mo><msub><mi>𝐏</mi><mn>4</mn></msub><mo>.</mo></mrow></math></div>\n<p></p>\n</li>\n<li>\n<p>Connect them with straight lines in order to make the <strong>control polygon</strong>.</p>\n</li>\n<li>Draw the smooth <strong>B-spline curve</strong> that roughly follows the polygon but does not necessarily pass through the interior control points.</li>\n</ol>\n<p><strong>Labels:</strong></p>\n<ul>\n<li>\n<p>Label each point:</p>\n<ul>\n<li>\n<p><code>P₀</code>, <code>P₁</code>, …, <code>P₄</code><br>\n and write near the figure:</p>\n</li>\n<li>\n<p>“Control points (geometric, in x–y space)”</p>\n</li>\n<li>Label the polyline:</li>\n<li>“Control polygon”</li>\n<li>Label the smooth curve:</li>\n<li>“B-spline curve C(u)”</li>\n</ul>\n</li>\n</ul>\n<h3>Step 2 – Draw the knot vector (parameter axis)</h3>\n<p>Below the curve drawing, draw a <strong>horizontal line</strong> for the parameter axis:</p>\n<ol>\n<li>Draw a line and label its horizontal direction as <code>u</code>.</li>\n<li>\n<p>Mark knots as vertical tick marks:</p>\n<ul>\n<li>For example, for a clamped cubic with 5 control points, you might use<br>\n<div class=\"math-box\"><math xmlns=\"http://www.w3.org/1998/Math/MathML\" display=\"block\"><mrow><mi>U</mi><mo>=</mo><mo stretchy=\"false\">{</mo><mn>0</mn><mo>,</mo><mn>0</mn><mo>,</mo><mn>0</mn><mo>,</mo><mn>0</mn><mo>,</mo><mspace width=\"0.278em\"></mspace><mn>1</mn><mo>,</mo><mn>2</mn><mo>,</mo><mn>3</mn><mo>,</mo><mspace width=\"0.278em\"></mspace><mn>3</mn><mo>,</mo><mn>3</mn><mo>,</mo><mn>3</mn><mo>,</mo><mn>3</mn><mo stretchy=\"false\">}</mo><mo>.</mo></mrow></math></div>\n</li>\n</ul>\n</li>\n<li>\n<p>Place ticks at 0, 1, 2, 3 (or at each value if you want to show multiplicity by stacked labels), and label them:</p>\n<ul>\n<li><code>u₀</code>, <code>u₁</code>, … or simply <code>0</code>, <code>1</code>, <code>2</code>, <code>3</code> with a note like “Knots”.</li>\n</ul>\n</li>\n</ol>\n<p><strong>Labels:</strong></p>\n<ul>\n<li>Under the line: “Parameter axis u”</li>\n<li>Above each tick: “knot” or <code>uᵢ</code></li>\n<li>Near the axis: “Knot vector U = {u₀, …, uₘ} (in parameter space)”</li>\n</ul>\n<h3>Step 3 – Draw basis functions above the axis</h3>\n<p>Above the same <span><math xmlns=\"http://www.w3.org/1998/Math/MathML\" display=\"inline\"><mrow><mi>u</mi></mrow></math></span>-axis, make a <strong>separate plot</strong> for the basis functions:</p>\n<ol>\n<li>Draw a vertical axis for function value and reuse the same horizontal <span><math xmlns=\"http://www.w3.org/1998/Math/MathML\" display=\"inline\"><mrow><mi>u</mi></mrow></math></span>-axis.</li>\n<li>Plot several smooth, overlapping hump-like curves across the interval:<ul>\n<li>These are your <strong><span><math xmlns=\"http://www.w3.org/1998/Math/MathML\" display=\"inline\"><mrow><msub><mi>N</mi><mrow><mn>0</mn><mo>,</mo><mn>3</mn></mrow></msub><mo stretchy=\"false\">(</mo><mi>u</mi><mo stretchy=\"false\">)</mo><mo>,</mo><msub><mi>N</mi><mrow><mn>1</mn><mo>,</mo><mn>3</mn></mrow></msub><mo stretchy=\"false\">(</mo><mi>u</mi><mo stretchy=\"false\">)</mo><mo>,</mo><mo>…</mo></mrow></math></span></strong> (for cubic).</li>\n<li>Each curve should be nonzero over about <span><math xmlns=\"http://www.w3.org/1998/Math/MathML\" display=\"inline\"><mrow><mi>p</mi><mo>+</mo><mn>1</mn><mo>=</mo><mn>4</mn></mrow></math></span> consecutive knot spans, then go back to 0.</li>\n</ul>\n</li>\n<li>Ensure they overlap so that at any <span><math xmlns=\"http://www.w3.org/1998/Math/MathML\" display=\"inline\"><mrow><mi>u</mi></mrow></math></span>, a few of them are nonzero.</li>\n</ol>\n<p><strong>Labels:</strong></p>\n<ul>\n<li>Next to each hump curve:<ul>\n<li>Label, e.g., <code>N₀,₃(u)</code>, <code>N₁,₃(u)</code>, etc.</li>\n</ul>\n</li>\n<li>Near this plot:<ul>\n<li>“B-spline basis functions Nᵢ,ₚ(u) (built from knots)”</li>\n<li>And optionally: “These functions blend the control points”</li>\n</ul>\n</li>\n</ul>\n<h3>Step 4 – Show relationships with arrows</h3>\n<p>Add arrows or annotations to make the relationships explicit:</p>\n<ul>\n<li>Arrow from <strong>knot axis</strong> to <strong>basis functions</strong>:<ul>\n<li>Label: “Knots define where each basis function is nonzero and how segments join.”</li>\n</ul>\n</li>\n<li>Arrow from a <strong>basis function</strong> curve (e.g. <span><math xmlns=\"http://www.w3.org/1998/Math/MathML\" display=\"inline\"><mrow><msub><mi>N</mi><mrow><mn>2</mn><mo>,</mo><mn>3</mn></mrow></msub><mo stretchy=\"false\">(</mo><mi>u</mi><mo stretchy=\"false\">)</mo></mrow></math></span>) down to the corresponding <strong>control point</strong> <span><math xmlns=\"http://www.w3.org/1998/Math/MathML\" display=\"inline\"><mrow><msub><mi>P</mi><mn>2</mn></msub></mrow></math></span>:<ul>\n<li>Label: “N₂,₃(u) is the weight for control point P₂ at parameter u.”</li>\n</ul>\n</li>\n<li>Arrow from all <strong>control points</strong> to a point on the curve:<ul>\n<li>Pick a specific <span><math xmlns=\"http://www.w3.org/1998/Math/MathML\" display=\"inline\"><mrow><mi>u</mi><mo>=</mo><msup><mi>u</mi><mo>*</mo></msup></mrow></math></span>, mark it on the knot axis, then show up to the basis-function graph (a vertical line), then another arrow to a particular point on the curve <span><math xmlns=\"http://www.w3.org/1998/Math/MathML\" display=\"inline\"><mrow><mi>𝐂</mi><mo stretchy=\"false\">(</mo><msup><mi>u</mi><mo>*</mo></msup><mo stretchy=\"false\">)</mo></mrow></math></span>.</li>\n<li>Label nearby:<ul>\n<li>“C(u<em>) = Σ Nᵢ,ₚ(u</em>) Pᵢ (weighted average of control points)”</li>\n</ul>\n</li>\n</ul>\n</li>\n</ul>\n<hr>\n<h2>7. Short recap in plain language</h2>\n<ul>\n<li>\n<p><strong>Control points</strong>:<br>\n Actual points in 2D/3D that you move around. They form the control polygon and give the curve its shape.</p>\n</li>\n<li>\n<p><strong>Knots</strong> (knot vector):<br>\n Numbers on the parameter line. They mark where each polynomial piece of the B-spline starts/ends and control continuity. They do <em>not</em> live in geometric space.</p>\n</li>\n<li>\n<p><strong>Basis functions</strong> (not “basis points”):<br>\n Smooth functions of the parameter <span><math xmlns=\"http://www.w3.org/1998/Math/MathML\" display=\"inline\"><mrow><mi>u</mi></mrow></math></span>, defined entirely by the knot vector and degree. They act as weights on the control points so that for each <span><math xmlns=\"http://www.w3.org/1998/Math/MathML\" display=\"inline\"><mrow><mi>u</mi></mrow></math></span>, the curve point is a weighted average of those control points.</p>\n</li>\n</ul>\n<p>If you’d like, I can next give you a concrete numeric example (specific control points + knot vector) and walk through how to compute the basis functions and a point on the curve step by step.</p>","md":"<details><summary>Thinking</summary>\n\nHmmm...\n\n\n\n**Explaining concepts clearly**\n\nI'm thinking about how to visually explain \"show me the difference.\" I can imagine a horizontal axis with tick marks as knots, along with another plot of basis functions on top. To the right, I could depict a main 2D plane with a control polygon and curve, labeling everything appropriately. Since I want to keep my explanation concise but not too terse, I realize I don't need citations or external tools right now, but I'm a bit uncertain about some previous instructions on that.\n\n**Clarifying drawing instructions**\n\nSo, I'm realizing I need to answer directly without using any tool references. I plan to structure my explanation in sections with headings and include a simple equation. I'll cover both 1D and 2D aspects.\n\nFor the drawing instructions: \n1. First, I'll draw the control polygon points P0...Pn along with the polygon. \n2. Next, I’ll illustrate the curve. \n3. I’ll add the parameter axis underneath, marking the knots as u0...um and labeling it \"knot vector.\" \n4. Above that, I’ll plot the overlapping basis functions, labeling them as N0, N1, etc. \n\nI may include arrows showing the links from basis functions to control points. A specific example could be a cubic B-spline with control points and a uniform knot vector, clarifying the difference between \"knot points\" on the curve and control points.\n\n</details>\n\nIn B-splines there are **three different kinds of “things”** that people often mix up:\n\n- **Control points** – geometric points in space \n- **Knots / knot vector** – numbers in *parameter* space \n- **Basis functions** (often what people mean when they say “basis points”) – functions of the parameter built from the knots\n\nI’ll explain each, how they work together, and then describe a labeled diagram you can draw (or implement) yourself.\n\n---\n\n## 1. The basic B-spline formula\n\nA B-spline curve of degree \\(p\\) is\n\n\\[\n\\mathbf{C}(u) = \\sum_{i=0}^{n} N_{i,p}(u)\\,\\mathbf{P}_i\n\\]\n\n- \\(\\mathbf{P}_i\\): **control points** (vectors in 2D or 3D)\n- \\(N_{i,p}(u)\\): **B-spline basis functions** of degree \\(p\\)\n- The \\(N_{i,p}\\) are defined using a **knot vector**\n- \\(u\\): the **parameter** along the curve\n\nSo:\n\n- **Control points** live in *geometric space* (e.g. \\(\\mathbb{R}^2\\), \\(\\mathbb{R}^3\\)). \n- **Knots and basis functions** live in *parameter space* (the variable \\(u\\)).\n\n---\n\n## 2. Control points\n\n**What they are**\n\n- A finite set of points \\(\\mathbf{P}_0,\\mathbf{P}_1,\\dots,\\mathbf{P}_n\\) in 2D/3D.\n- If you connect them in order, you get the **control polygon**.\n\n**What they do**\n\n- They **shape** the curve:\n - Moving a control point pulls/pushes the nearby part of the curve.\n- In general, a B-spline curve **does not pass through** its control points (except at certain configurations, e.g. clamped ends or special knot multiplicities).\n- Each control point affects only a **local part** of the curve (one of the key advantages of B-splines).\n\nThink of control points as the **handles** an artist drags around to sculpt the curve.\n\n---\n\n## 3. Knots and the knot vector\n\n**What they are**\n\n- A **knot vector** is a non-decreasing sequence of real numbers\n\n \\[\n U = \\{u_0, u_1, \\dots, u_m\\}, \\quad u_0 \\le u_1 \\le \\dots \\le u_m.\n \\]\n\n- Each \\(u_i\\) is a **knot**.\n- The intervals \\([u_i, u_{i+1})\\) are **knot spans**.\n\n**What they do**\n\n- Knots live in the **parameter domain** of the curve, not in geometric space.\n- They control:\n - **Where** the piecewise polynomial pieces of the curve start and end (segment boundaries).\n - **Smoothness** at those boundaries (repeated knots reduce continuity).\n - **Parameterization** of the curve (uniform vs non-uniform spacing).\n\nIntuition:\n\n- Imagine a ruler along the bottom labeled with parameter \\(u\\).\n- **Tick marks on this ruler are the knots.**\n- Between two ticks, the curve piece is a single polynomial segment (for a fixed degree).\n\n---\n\n## 4. Basis functions (often miscalled “basis points”)\n\nThere isn’t a standard B-spline concept called “basis points”; what you almost certainly want is **basis functions**.\n\n**What they are**\n\n- For each control point \\(\\mathbf{P}_i\\) and degree \\(p\\), we have a basis function \\(N_{i,p}(u)\\).\n- These are scalar functions of \\(u\\) defined **from the knot vector** via the Cox–de Boor recursion.\n- Key properties:\n - Each \\(N_{i,p}(u)\\) is **nonzero only on a small interval** of \\(u\\): \n it is nonzero on \\([u_i, u_{i+p+1})\\). \n (So it spans exactly \\(p+1\\) consecutive knot spans.)\n - For any \\(u\\), only a few basis functions are nonzero → **local control**.\n - At any parameter \\(u\\), the basis functions sum to 1:\n \\[\n \\sum_i N_{i,p}(u) = 1.\n \\]\n This makes the curve a **weighted average** of control points.\n\n**What they do**\n\n- They are the **weights** in the linear combination:\n\n \\[\n \\mathbf{C}(u) = \\sum_i N_{i,p}(u)\\,\\mathbf{P}_i.\n \\]\n\n- For each parameter value \\(u\\), the \\(N_{i,p}(u)\\) tell you **how much each control point influences the curve point** \\(\\mathbf{C}(u)\\).\n\nSo:\n\n- **Knots** → define the parameter intervals where each basis function is active. \n- **Basis functions** → smooth, overlapping “blending” functions over those intervals. \n- **Control points** → positions being blended.\n\n---\n\n## 5. How they work together (conceptual picture)\n\nPut together:\n\n1. The **knot vector** slices the \\(u\\)-axis into segments.\n2. From the knots and degree \\(p\\), we build **basis functions** \\(N_{i,p}(u)\\). Each:\n - Is built piecewise over the knot spans.\n - Is nonzero only over a small range of \\(u\\).\n3. The **control points** are combined using these basis functions:\n\n - For each \\(u\\), you evaluate all \\(N_{i,p}(u)\\).\n - Multiply each control point \\(\\mathbf{P}_i\\) by its weight \\(N_{i,p}(u)\\).\n - Add them up → that gives the curve point \\(\\mathbf{C}(u)\\).\n\n---\n\n## 6. Labeled diagram you can draw or implement\n\nI’m not able to produce an actual image file in this environment right now, but here’s **exactly how to draw a clear diagram** showing all parts and how to label them.\n\nConsider a simple cubic B-spline (degree \\(p = 3\\)).\n\n### Step 1 – Draw the control polygon and curve (geometry view)\n\n1. On a 2D plane, plot four or five points, for example:\n \\[\n \\mathbf{P}_0, \\mathbf{P}_1, \\mathbf{P}_2, \\mathbf{P}_3, \\mathbf{P}_4.\n \\]\n2. Connect them with straight lines in order to make the **control polygon**.\n3. Draw the smooth **B-spline curve** that roughly follows the polygon but does not necessarily pass through the interior control points.\n\n**Labels:**\n\n- Label each point:\n - `P₀`, `P₁`, …, `P₄` \n and write near the figure:\n - “Control points (geometric, in x–y space)”\n- Label the polyline:\n - “Control polygon”\n- Label the smooth curve:\n - “B-spline curve C(u)”\n\n### Step 2 – Draw the knot vector (parameter axis)\n\nBelow the curve drawing, draw a **horizontal line** for the parameter axis:\n\n1. Draw a line and label its horizontal direction as `u`.\n2. Mark knots as vertical tick marks:\n - For example, for a clamped cubic with 5 control points, you might use\n \\[\n U = \\{0,0,0,0,\\; 1,2,3,\\; 3,3,3,3\\}.\n \\]\n3. Place ticks at 0, 1, 2, 3 (or at each value if you want to show multiplicity by stacked labels), and label them:\n - `u₀`, `u₁`, … or simply `0`, `1`, `2`, `3` with a note like “Knots”.\n\n**Labels:**\n\n- Under the line: “Parameter axis u”\n- Above each tick: “knot” or `uᵢ`\n- Near the axis: “Knot vector U = {u₀, …, uₘ} (in parameter space)”\n\n### Step 3 – Draw basis functions above the axis\n\nAbove the same \\(u\\)-axis, make a **separate plot** for the basis functions:\n\n1. Draw a vertical axis for function value and reuse the same horizontal \\(u\\)-axis.\n2. Plot several smooth, overlapping hump-like curves across the interval:\n - These are your **\\(N_{0,3}(u), N_{1,3}(u), \\dots\\)** (for cubic).\n - Each curve should be nonzero over about \\(p+1 = 4\\) consecutive knot spans, then go back to 0.\n3. Ensure they overlap so that at any \\(u\\), a few of them are nonzero.\n\n**Labels:**\n\n- Next to each hump curve:\n - Label, e.g., `N₀,₃(u)`, `N₁,₃(u)`, etc.\n- Near this plot:\n - “B-spline basis functions Nᵢ,ₚ(u) (built from knots)”\n - And optionally: “These functions blend the control points”\n\n### Step 4 – Show relationships with arrows\n\nAdd arrows or annotations to make the relationships explicit:\n\n- Arrow from **knot axis** to **basis functions**:\n - Label: “Knots define where each basis function is nonzero and how segments join.”\n- Arrow from a **basis function** curve (e.g. \\(N_{2,3}(u)\\)) down to the corresponding **control point** \\(P_2\\):\n - Label: “N₂,₃(u) is the weight for control point P₂ at parameter u.”\n- Arrow from all **control points** to a point on the curve:\n - Pick a specific \\(u = u^*\\), mark it on the knot axis, then show up to the basis-function graph (a vertical line), then another arrow to a particular point on the curve \\(\\mathbf{C}(u^*)\\).\n - Label nearby:\n - “C(u*) = Σ Nᵢ,ₚ(u*) Pᵢ (weighted average of control points)”\n\n---\n\n## 7. Short recap in plain language\n\n- **Control points**: \n Actual points in 2D/3D that you move around. They form the control polygon and give the curve its shape.\n\n- **Knots** (knot vector): \n Numbers on the parameter line. They mark where each polynomial piece of the B-spline starts/ends and control continuity. They do *not* live in geometric space.\n\n- **Basis functions** (not “basis points”): \n Smooth functions of the parameter \\(u\\), defined entirely by the knot vector and degree. They act as weights on the control points so that for each \\(u\\), the curve point is a weighted average of those control points.\n\nIf you’d like, I can next give you a concrete numeric example (specific control points + knot vector) and walk through how to compute the basis functions and a point on the curve step by step.","profile":{"id":null,"name":null,"subtitle":"State of the art deep research (>30 secs)","model":"ki_research","model_name":"Research","model_provider":"kagi","model_input_limit":1000000,"recommended":false,"model_info":"\n\n<div class=\"heading\">\n <div class=\"left\">\n \n \n \n <svg class=\"model-icon icon-xs\" data-model=\"ki_research\">\n <use href=\"#icon-kagi\"/>\n </svg>\n <h3>\n \n <span class=\"model-provider\">Kagi</span>\n \n <span class=\"model-name\">none</span>\n </h3>\n </div>\n\n \n <a href=\"/settings?p=custom_assistant&id=none\">\n <svg class=\"icon-sm edit-icon\" aria-hidden=\"true\">\n <use href=\"#icon-pencil\" />\n </svg>\n </a>\n \n</div>\n\n\n<hr />\n<ul>\n \n <li>\n <h4>\n Cost\n </h4>\n <span>\n \n \n \n\n \n \n \n\n <div class=\"score\" aria-label=\"Expensive\">\n \n \n \n \n <div aria-hidden=\"true\" class=\"filled-cost --high\"></div>\n \n \n \n \n \n <div aria-hidden=\"true\" class=\"filled-cost --high\"></div>\n \n \n \n \n \n <div aria-hidden=\"true\" class=\"filled-cost --high\"></div>\n \n \n \n \n \n <div aria-hidden=\"true\" class=\"filled-cost --high\"></div>\n \n \n \n \n \n <div aria-hidden=\"true\" class=\"filled-cost --high\"></div>\n \n \n </div>\n</span>\n </li>\n <li>\n <h4>\n Quality\n </h4>\n <span>\n \n \n \n\n \n \n \n\n <div class=\"score\" aria-label=\"Rated 5 out of 5\">\n \n \n \n <div aria-hidden=\"true\" class=\"filled-bubble\"></div>\n \n \n \n \n <div aria-hidden=\"true\" class=\"filled-bubble\"></div>\n \n \n \n \n <div aria-hidden=\"true\" class=\"filled-bubble\"></div>\n \n \n \n \n <div aria-hidden=\"true\" class=\"filled-bubble\"></div>\n \n \n \n \n <div aria-hidden=\"true\" class=\"filled-bubble\"></div>\n \n \n </div>\n</span>\n </li>\n <li>\n <h4>\n Speed\n </h4>\n <span>\n \n \n \n\n \n \n \n\n <div class=\"score\" aria-label=\"Rated 1 out of 5\">\n \n \n \n <div aria-hidden=\"true\" class=\"filled-bubble\"></div>\n \n \n \n \n <div aria-hidden=\"true\" class=\"unfilled-bubble\"></div>\n \n \n \n \n <div aria-hidden=\"true\" class=\"unfilled-bubble\"></div>\n \n \n \n \n <div aria-hidden=\"true\" class=\"unfilled-bubble\"></div>\n \n \n \n \n <div aria-hidden=\"true\" class=\"unfilled-bubble\"></div>\n \n \n </div>\n</span>\n </li>\n <li>\n <h4>\n Privacy\n </h4>\n <span>\n \n \n \n\n \n \n \n\n <div class=\"score\" aria-label=\"Rated 4 out of 5\">\n \n \n \n <div aria-hidden=\"true\" class=\"filled-bubble\"></div>\n \n \n \n \n <div aria-hidden=\"true\" class=\"filled-bubble\"></div>\n \n \n \n \n <div aria-hidden=\"true\" class=\"filled-bubble\"></div>\n \n \n \n \n <div aria-hidden=\"true\" class=\"filled-bubble\"></div>\n \n \n \n \n <div aria-hidden=\"true\" class=\"unfilled-bubble\"></div>\n \n \n </div>\n</span>\n </li>\n <li class=\"divider\" aria-hidden=\"true\"></li>\n <li>\n <h4>Last updated</h4>\n <span class=\"date\">\n \n \n 2025-11-18\n \n \n </span>\n </li>\n \n</ul>\n","model_provider_name":"Kagi","internet_access":true,"personalizations":true,"shortcut":null,"is_default_profile":false},"metadata":"<li>\n <span class=\"attribute\">Model</span>\n <span class=\"value\"><i class=\"icon-xs mr-2\"><svg><use href=\"#icon-kagi\"></use></svg></i>Research</span>\n</li>\n<li>\n <span class=\"attribute\">Version</span>\n <span class=\"value\">ki_research-2025-11-18</span>\n</li>\n<li>\n <span class=\"attribute\">Speed (tok/s)</span>\n <span class=\"value\">54</span>\n</li>\n<li>\n <span class=\"attribute\">Tokens</span>\n <span class=\"value\">13,881</span>\n</li>\n<li>\n <span class=\"attribute\">Cost / Total ($)</span>\n <span class=\"value\">0.15 / 0.15</span>\n</li>\n<li>\n <span class=\"attribute\">End to end time (s)</span>\n <span class=\"value\">112.33</span>\n</li>\n\n","documents":[]}]