<?xml version="1.0"?>
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.1 plus MathML 2.0//EN" 
               "http://www.w3.org/TR/MathML2/dtd/xhtml-math11-f.dtd" [
  <!ENTITY mathml "http://www.w3.org/1998/Math/MathML">
]>
<html xmlns="http://www.w3.org/1999/xhtml" xml:lang="en">
<head>
<link rel="stylesheet" type="text/css" href="../../../comsci/css/s011.css"/>
<link rel='SHORTCUT ICON' href='../../../comsci/images/FrameHome.ico' />
<style type="text/css">
</style>
<title> Patches
 </title>
</head>
<body>

<div class="message_right">
  <a href="http://validator.w3.org/check/referer">

    <img src="http://www.w3.org/Icons/valid-xhtml11" alt="Valid
	XHTML 1.1!" height="31" width="88" />
  </a>

  <a href="http://jigsaw.w3.org/css-validator/">
    <img style="width:88px;height:31px"
       src="http://jigsaw.w3.org/css-validator/images/vcss" 
       alt="Valid CSS!" />
  </a>
  <br/>
  Created 2006-09-28 &nbsp; Modified 
<!--UPDATE_DATE_MODIFIED-->
<!--UPDATE_DATE_BEGIN-->
2007-01-10
<br/>
<a href="mailto:chelton.evans@yahoo.com">Chelton Evans</a>
<!--UPDATE_DATE_END-->
</div>


<h1> 
<a href="geom.html"> <img alt="proj" src="../../../comsci/images/compgeom.png" /></a>
Patches
<a href="../../../../index.html">
<img alt="home" src="../../../comsci/images/Frame.gif" /> </a>
</h1>

<p>
<a href="#Intro">Intro</a><br/>
<a href="#Bernstein_Polynomials">
  Bernstein Polynomials</a><br/>
  &nbsp; &nbsp;
  <a href="#Bernstein_Polynomial_Approximation">
    Bernstein Polynomial Approximation</a><br/>
<a href="#Bezier_Patches">Bezier Patches</a><br/>
  &nbsp; &nbsp;
  <a href="#Bilinear_Interpolation">
    Bilinear Interpolation</a><br/>
<a href="#Bezier_Triangles">Bezier Triangles</a><br/>
<a href="../../../misc/proj/bezier/doc.html">C++ implementation</a><br/>
<a href="#Bezier_Curve">Bezier Curve</a><br/>
<a href="#References">References</a>

</p>



<div class="float25">
<a id="Intro"></a>
<h2>Intro</h2>

<p>
Patches are what 3D surfaces are composed of.  They are used
 for modeling, rendering and interpreting where a surface is.
</p>

<p>I have quoted results from [1] as it a good reference
 as it is not just concerned with the mathematics but
 primarily maths for rendering.
</p>


</div>


<div class="float25">

<a id="Bernstein_Polynomials"></a>
<h2>Bernstein Polynomials</h2>

<p class="equ">
<math xmlns="&mathml;">
  <msubsup>
    <mo>B</mo>
    <mrow>
      <mi>i</mi>
    </mrow>
    <mrow>
      <mi>n</mi>
    </mrow>
  </msubsup>
  <mo>(</mo>
  <mi>t</mi>
  <mo>)</mo>
  <mo>=</mo>
  <mfenced open='(' close=')'>
    <mtable>
      <mtr>
         <mtd><mi>n</mi></mtd>
      </mtr>
      <mtr>
         <mtd><mi>i</mi></mtd>
      </mtr>
    </mtable>
  </mfenced>
  <mi>t</mi>
  <msup>
    <mi></mi>
    <mrow><mi>i</mi></mrow>
  </msup>
  <mo>(</mo>
  <mi>1</mi>
  <mo>-</mo>
  <mi>t</mi>
  <mo>)</mo>
  <msup>
    <mi></mi>
    <mrow><mi>n</mi><mo>-</mo><mi>i</mi></mrow>
  </msup>
</math>

<br/>

<math xmlns="&mathml;">
  <msubsup>
    <mo>B</mo>
    <mrow>
      <mi>i</mi>
    </mrow>
    <mrow>
      <mi>n</mi>
    </mrow>
  </msubsup>
  <mo>(</mo>
  <mi>t</mi>
  <mo>)</mo>
  <mo>=</mo>

  <mfrac>
    <mrow><mi>n</mi><mo>!</mo></mrow>
    <mrow><mo>(</mo><mi>n</mi><mo>-</mo><mi>i</mi><mo>)</mo><mo>!</mo><mi>i</mi><mo>!</mo></mrow>
  </mfrac>

  <mi>t</mi>
  <msup>
    <mi></mi>
    <mrow><mi>i</mi></mrow>
  </msup>
  <mo>(</mo>
  <mi>1</mi>
  <mo>-</mo>
  <mi>t</mi>
  <mo>)</mo>
  <msup>
    <mi></mi>
    <mrow><mi>n</mi><mo>-</mo><mi>i</mi></mrow>
  </msup>
</math>


</p>

<p>These have been generalized for two dimensions in
 <a href="#Bezier_Triangles">Bezier Triangles.</a></p>

<p>
Bernstein polynomials form a basis, which I believe lets
 them be used as a sum to form a polynomial approximation.
 I would expect that the patches too would approximate
 the surface and approach it as the number of sample points
 goes to infinity.
</p>


<a id="Bernstein_Polynomial_Approximation"></a>
<h3>Bernstein Polynomial Approximation</h3>

<p class="equ">
Let f be continuous on [0,1].<br/>

<math xmlns="&mathml;">
  <msubsup>
    <mo>&Sum;</mo>
    <mrow>
      <mi>k</mi><mo>=</mo><mi>0</mi>
    </mrow>
    <mrow>
      <mi>n</mi>
    </mrow>
  </msubsup>
  <mi>f</mi>
  <mo>(</mo>
  <mfrac>
    <mrow><mi>k</mi></mrow>
    <mrow><mi>n</mi></mrow>
  </mfrac>
  <mo>)</mo>
  <msubsup>
    <mo>B</mo>
    <mrow>
      <mi>k</mi>
    </mrow>
    <mrow>
      <mi>n</mi>
    </mrow>
  </msubsup>
  <mo>(</mo>
  <mi>x</mi>
  <mo>)</mo>

  <mo>&RightArrow;</mo>
  <mi>f</mi>
  <mo>(</mo>
  <mi>x</mi>
  <mo>)</mo>

</math>
<br/>
 &nbsp; &nbsp; as  
<math xmlns="&mathml;">
  <mi>n</mi>
  <mo>&RightArrow;</mo>
  <mi>&infin;</mi>
</math>


</p>


</div>

<div class="float25">
<h2>Bezier Patches</h2>

<p>These are described as rectangular patches.  The four
 corners are fixed and the surface passes through these.
 All other points are viewed as control points. 
</p>

<p>For example a cubic bezier surface has two control points
 all sides. If the tangent is known at the corner points
 then the inner control points can be used to interpolate the
 tangent and the corner points.
</p>

<p>The bezier patch is most generally defined with Bernstein polynomials.
</p>

<p class="equ">
<math xmlns="&mathml;">
  <mi>p</mi>
  <mo>(</mo>
  <mi>u</mi>
  <mo>,</mo>
  <mi>v</mi>
  <mo>)</mo>
  <mo>=</mo>
  <munderover>
    <mo>&Sum;</mo>
    <mrow><mi>i</mi><mo>=</mo><mi>0</mi></mrow>
    <mrow><mi>m</mi></mrow>
  </munderover>
  <munderover>
    <mo>&Sum;</mo>
    <mrow><mi>j</mi><mo>=</mo><mi>0</mi></mrow>
    <mrow><mi>n</mi></mrow>
  </munderover>
  <msubsup>
    <mo>B</mo>
    <mrow>
      <mi>i</mi>
    </mrow>
    <mrow>
      <mi>m</mi>
    </mrow>
  </msubsup>
  <mo>(</mo>
  <mi>u</mi>
  <mo>)</mo>
  <msubsup>
    <mo>B</mo>
    <mrow>
      <mi>j</mi>
    </mrow>
    <mrow>
      <mi>n</mi>
    </mrow>
  </msubsup>
  <mo>(</mo>
  <mi>v</mi>
  <mo>)</mo>
  <mi>p</mi>
  <msub>
    <mi></mi>
    <mrow><mi>i</mi><mo>,</mo><mi>j</mi></mrow>
  </msub>
 
</math>

</p>

<p class="equ">
<math xmlns="&mathml;">
  <mi>p</mi>
  <mo>(</mo>
  <mi>u</mi>
  <mo>,</mo>
  <mi>v</mi>
  <mo>)</mo>
  <mo>=</mo>
  <munderover>
    <mo>&Sum;</mo>
    <mrow><mi>i</mi><mo>=</mo><mi>0</mi></mrow>
    <mrow><mi>m</mi></mrow>
  </munderover>
  <munderover>
    <mo>&Sum;</mo>
    <mrow><mi>j</mi><mo>=</mo><mi>0</mi></mrow>
    <mrow><mi>n</mi></mrow>
  </munderover>
  <mfenced open='(' close=')'>
    <mtable>
      <mtr>
         <mtd><mi>m</mi></mtd>
      </mtr>
      <mtr>
         <mtd><mi>i</mi></mtd>
      </mtr>
    </mtable>
  </mfenced>
  <mfenced open='(' close=')'>
    <mtable>
      <mtr>
         <mtd><mi>n</mi></mtd>
      </mtr>
      <mtr>
         <mtd><mi>j</mi></mtd>
      </mtr>
    </mtable>
  </mfenced>
  <mi>u</mi>
  <msup>
    <mi></mi>
    <mrow><mi>i</mi></mrow>
  </msup>
  <mo>(</mo>
  <mi>1</mi>
  <mo>-</mo>
  <mi>u</mi>
  <mo>)</mo>
  <msup>
    <mi></mi>
    <mrow><mi>m</mi><mo>-</mo><mi>i</mi></mrow>
  </msup>

  <mi>v</mi>
  <msup>
    <mi></mi>
    <mrow><mi>j</mi></mrow>
  </msup>
  <mo>(</mo>
  <mi>1</mi>
  <mo>-</mo>
  <mi>v</mi>
  <mo>)</mo>
  <msup>
    <mi></mi>
    <mrow><mi>n</mi><mo>-</mo><mi>j</mi></mrow>
  </msup>
  <mi>p</mi>
  <msub>
    <mi></mi>
    <mrow><mi>i</mi><mo>,</mo><mi>j</mi></mrow>
  </msub>
</math>
</p>

<p class="equ">

<math xmlns="&mathml;">
  <mfrac>
    <mrow><mo>&PartialD;</mo><mi>p</mi></mrow>
    <mrow><mo>&PartialD;</mo><mi>u</mi></mrow>
  </mfrac>
  <mo>=</mo>
  <mi>m</mi>
  <munderover>
    <mo>&Sum;</mo>
    <mrow><mi>i</mi><mo>=</mo><mi>0</mi></mrow>
    <mrow><mi>m</mi><mo>-</mo><mi>1</mi></mrow>
  </munderover>
  <munderover>
    <mo>&Sum;</mo>
    <mrow><mi>j</mi><mo>=</mo><mi>0</mi></mrow>
    <mrow><mi>n</mi></mrow>
  </munderover>
  <msubsup>
    <mo>B</mo>
    <mrow>
      <mi>i</mi>
    </mrow>
    <mrow>
      <mi>m</mi><mo>-</mo><mi>1</mi>
    </mrow>
  </msubsup>
  <mo>(</mo>
  <mi>u</mi>
  <mo>)</mo>
  <msubsup>
    <mo>B</mo>
    <mrow>
      <mi>j</mi>
    </mrow>
    <mrow>
      <mi>n</mi>
    </mrow>
  </msubsup>
  <mo>(</mo>
  <mi>v</mi>
  <mo>)</mo>
  <mo>(</mo>
  <mi>p</mi>
  <msub>
    <mi></mi>
    <mrow><mi>i+1</mi><mo>,</mo><mi>j</mi></mrow>
  </msub>
  <mo>-</mo>
  <mi>p</mi>
  <msub>
    <mi></mi>
    <mrow><mi>i</mi><mo>,</mo><mi>j</mi></mrow>
  </msub>
  <mo>)</mo>
</math>

<br/>

<math xmlns="&mathml;">
  <mfrac>
    <mrow><mo>&PartialD;</mo><mi>p</mi></mrow>
    <mrow><mo>&PartialD;</mo><mi>v</mi></mrow>
  </mfrac>
  <mo>=</mo>
  <mi>n</mi>
  <munderover>
    <mo>&Sum;</mo>
    <mrow><mi>i</mi><mo>=</mo><mi>0</mi></mrow>
    <mrow><mi>m</mi></mrow>
  </munderover>
  <munderover>
    <mo>&Sum;</mo>
    <mrow><mi>j</mi><mo>=</mo><mi>0</mi></mrow>
    <mrow><mi>n</mi><mo>-</mo><mi>1</mi></mrow>
  </munderover>
  <msubsup>
    <mo>B</mo>
    <mrow>
      <mi>i</mi>
    </mrow>
    <mrow>
      <mi>m</mi>
    </mrow>
  </msubsup>
  <mo>(</mo>
  <mi>u</mi>
  <mo>)</mo>
  <msubsup>
    <mo>B</mo>
    <mrow>
      <mi>j</mi>
    </mrow>
    <mrow>
      <mi>n</mi><mo>-</mo><mi>1</mi>
    </mrow>
  </msubsup>
  <mo>(</mo>
  <mi>v</mi>
  <mo>)</mo>
  <mo>(</mo>
  <mi>p</mi>
  <msub>
    <mi></mi>
    <mrow><mi>i</mi><mo>,</mo><mi>j+1</mi></mrow>
  </msub>
  <mo>-</mo>
  <mi>p</mi>
  <msub>
    <mi></mi>
    <mrow><mi>i</mi><mo>,</mo><mi>j</mi></mrow>
  </msub>
  <mo>)</mo>
</math>



</p>



</div>

<div class="float25">
<a id="Bilinear_Interpolation"></a>
<h3>Bilinear Interpolation</h3>

<p>Bilinear interpolation is a bezier patch with n=m=1.</p>

<p class="equ">
<math xmlns="&mathml;">
  <mi>p</mi>
  <mo>(</mo>
  <mi>u</mi>
  <mo>,</mo>
  <mi>v</mi>
  <mo>)</mo>
  <mo>=</mo>
</math>
<br/>

 &nbsp; &nbsp; 

<math xmlns="&mathml;">
  <mo>(</mo>
  <mi>1</mi>
  <mo>-</mo>
  <mi>u</mi>
  <mo>)</mo>
  <mo>(</mo>
  <mi>1</mi>
  <mo>-</mo>
  <mi>v</mi>
  <mo>)</mo>
  <mi>p</mi>
  <msub>
    <mi></mi>
    <mrow><mi>0</mi><mo>,</mo><mi>0</mi></mrow>
  </msub>
  <mo>+</mo>

  <mo>(</mo>
  <mi>1</mi>
  <mo>-</mo>
  <mi>u</mi>
  <mo>)</mo>
  <mi>v</mi>
  <mi>p</mi>
  <msub>
    <mi></mi>
    <mrow><mi>0</mi><mo>,</mo><mi>1</mi></mrow>
  </msub>
  <mo>+</mo>

</math>
<br/>


 &nbsp; &nbsp; 

<math xmlns="&mathml;">

  <mi>u</mi>
  <mo>(</mo>
  <mi>1</mi>
  <mo>-</mo>
  <mi>v</mi>
  <mo>)</mo>
  <mi>p</mi>
  <msub>
    <mi></mi>
    <mrow><mi>1</mi><mo>,</mo><mi>0</mi></mrow>
  </msub>

  <mo>+</mo>
  <mi>u</mi>
  <mi>v</mi>
  <mi>p</mi>
  <msub>
    <mi></mi>
    <mrow><mi>1</mi><mo>,</mo><mi>1</mi></mrow>
  </msub>

</math>

</p>


<img src="diagg04202.png" alt="diagg04202.png" />
<img src="diagg04203.png" alt="diagg04203.png" />

</div>

<div class="spacer" />

<div class="float25">
<a id="Bezier_Triangles"></a>
<h2>Bezier Triangles</h2>

<img src="diagg04201.png" alt="diagg04201.png" />

</div>

<div class="float25">

<p class="equ">

<math xmlns="&mathml;">
  <msubsup>
    <mo>B</mo>
    <mrow>
      <mi>ijk</mi>
    </mrow>
    <mrow>
      <mi>n</mi>
    </mrow>
  </msubsup>
  <mo>(</mo>
  <mi>u</mi>
  <mo>,</mo>
  <mi>v</mi>
  <mo>)</mo>
  <mo>=</mo>
  <mfrac>
    <mrow><mi>n</mi><mo>!</mo></mrow>
    <mrow><mi>i</mi><mo>!</mo><mi>j</mi><mo>!</mo><mi>k</mi><mo>!</mo></mrow>
  </mfrac>
  <mi>u</mi>
  <msup>
    <mi></mi>
    <mrow><mi>i</mi></mrow>
  </msup>
  <mi>v</mi>
  <msup>
    <mi></mi>
    <mrow><mi>j</mi></mrow>
  </msup>
  <mo>(</mo>
  <mi>1</mi>
  <mo>-</mo>
  <mi>u</mi>
  <mo>-</mo>
  <mi>v</mi>
  <mo>)</mo>
  <msup>
    <mi></mi>
    <mrow><mi>k</mi></mrow>
  </msup>


</math>

<br/>

 &nbsp; &nbsp; where &nbsp;

<math xmlns="&mathml;">
  <mi>i</mi>
  <mo>+</mo>
  <mi>j</mi>
  <mo>+</mo>
  <mi>k</mi>
  <mo>=</mo>
  <mi>n</mi>
</math>

</p>

<p class="equ">
<math xmlns="&mathml;">
  <mi>p</mi>
  <mo>(</mo>
  <mi>u</mi>
  <mo>,</mo>
  <mi>v</mi>
  <mo>)</mo>
  <mo>=</mo>
  <munderover>
    <mo>&Sum;</mo>
    <mrow>
  <mi>i</mi>
  <mo>+</mo>
  <mi>j</mi>
  <mo>+</mo>
  <mi>k</mi>
  <mo>=</mo>
  <mi>n</mi>
    </mrow>
    <mrow></mrow>
  </munderover>
  <msubsup>
    <mo>B</mo>
    <mrow>
      <mi>ijk</mi>
    </mrow>
    <mrow>
      <mi>n</mi>
    </mrow>
  </msubsup>
  <mo>(</mo>
  <mi>u</mi>
  <mo>,</mo>
  <mi>v</mi>
  <mo>)</mo>
  <mi>p</mi>
  <msub>
    <mi></mi>
    <mrow><mi>ijk</mi></mrow>
  </msub>


</math>
</p>

<p>This is a fancy way of iterating through the
 combinations and may be a little off putting.
 Here is the simplest way of iterating through
 the combinations.
</p>


<p class="equ">
<math xmlns="&mathml;">
  <munderover>
    <mo>&Sum;</mo>
    <mrow>
  <mi>i</mi>
  <mo>+</mo>
  <mi>j</mi>
  <mo>+</mo>
  <mi>k</mi>
  <mo>=</mo>
  <mi>n</mi>
    </mrow>
    <mrow></mrow>
  </munderover>
  <mo>=</mo>
  <munderover>
    <mo>&Sum;</mo>
    <mrow>
  <mi>i</mi>
  <mo>=</mo>
  <mi>0</mi>
    </mrow>
    <mrow><mi>n</mi></mrow>
  </munderover>
  <munderover>
    <mo>&Sum;</mo>
    <mrow>
  <mi>j</mi>
  <mo>=</mo>
  <mi>0</mi>
    </mrow>
    <mrow><mi>n</mi><mo>-</mo><mi>i</mi></mrow>
  </munderover>
  <munderover>
    <mo>&Sum;</mo>
    <mrow>
  <mi>k</mi>
  <mo>=</mo>
  <mi>n</mi>
<mo>-</mo><mi>i</mi><mo>-</mo><mi>j</mi>
    </mrow>
    <mrow><mi>n</mi><mo>-</mo><mi>i</mi><mo>-</mo><mi>j</mi></mrow>
  </munderover>


</math>
</p>

<p class="equ">

<math xmlns="&mathml;">

  <mfrac>
    <mrow><mo>&PartialD;</mo><mi>p</mi></mrow>
    <mrow><mo>&PartialD;</mo><mi>u</mi></mrow>
  </mfrac>
  <mo>=</mo>
  <munderover>
    <mo>&Sum;</mo>
    <mrow>
  <mi>i</mi>
  <mo>+</mo>
  <mi>j</mi>
  <mo>+</mo>
  <mi>k</mi>
  <mo>=</mo>
  <mi>n</mi>
  <mo>-</mo>
  <mi>1</mi>
    </mrow>
    <mrow></mrow>
  </munderover>
  <msubsup>
    <mo>B</mo>
    <mrow>
      <mi>ijk</mi>
    </mrow>
    <mrow>
      <mi>n</mi><mo>-</mo><mi>1</mi>
    </mrow>
  </msubsup>
  <mo>(</mo>
  <mi>u</mi>
  <mo>,</mo>
  <mi>v</mi>
  <mo>)</mo>
  <mi>p</mi>
  <msub>
    <mi></mi>
    <mrow><mi>i+1jk</mi></mrow>
  </msub>
</math>

<br/>

<math xmlns="&mathml;">

  <mfrac>
    <mrow><mo>&PartialD;</mo><mi>p</mi></mrow>
    <mrow><mo>&PartialD;</mo><mi>v</mi></mrow>
  </mfrac>
  <mo>=</mo>
  <munderover>
    <mo>&Sum;</mo>
    <mrow>
  <mi>i</mi>
  <mo>+</mo>
  <mi>j</mi>
  <mo>+</mo>
  <mi>k</mi>
  <mo>=</mo>
  <mi>n</mi>
  <mo>-</mo>
  <mi>1</mi>
    </mrow>
    <mrow></mrow>
  </munderover>
  <msubsup>
    <mo>B</mo>
    <mrow>
      <mi>ijk</mi>
    </mrow>
    <mrow>
      <mi>n</mi><mo>-</mo><mi>1</mi>
    </mrow>
  </msubsup>
  <mo>(</mo>
  <mi>u</mi>
  <mo>,</mo>
  <mi>v</mi>
  <mo>)</mo>
  <mi>p</mi>
  <msub>
    <mi></mi>
    <mrow><mi>ij+1k</mi></mrow>
  </msub>
</math>




</p>




</div>

<div class="spacer" />

<div class="float50">
<a id="Bezier_Curve"></a>
<h2>Bezier Curve</h2>

<p class="equ">
<math xmlns="&mathml;">
  <mi>p</mi>
  <mo>(</mo>
  <mi>t</mi>
  <mo>)</mo>
  <mo>=</mo>
  <msubsup>
    <mo>&Sum;</mo>
    <mrow>
      <mi>i</mi><mo>=</mo><mi>0</mi>
    </mrow>
    <mrow>
      <mi>n</mi>
    </mrow>
  </msubsup>
  <msubsup>
    <mo>B</mo>
    <mrow>
      <mi>i</mi>
    </mrow>
    <mrow>
      <mi>n</mi>
    </mrow>
  </msubsup>
  <mo>(</mo>
  <mi>t</mi>
  <mo>)</mo>
  <mi>p</mi>
  <msub>
    <mi></mi>
    <mrow><mi>i</mi></mrow>
  </msub>
</math>

<br/>

<math xmlns="&mathml;">
  <mfrac>
    <mrow><mi>d</mi></mrow>
    <mrow><mi>dt</mi></mrow>
  </mfrac>
  <mi>p</mi>
  <mo>(</mo>
  <mi>t</mi>
  <mo>)</mo>
  <mo>=</mo>
  <mi>n</mi>
  <msubsup>
    <mo>&Sum;</mo>
    <mrow>
      <mi>i</mi><mo>=</mo><mi>0</mi>
    </mrow>
    <mrow>
      <mi>n</mi><mo>-</mo><mi>1</mi>
    </mrow>
  </msubsup>
  <msubsup>
    <mo>B</mo>
    <mrow>
      <mi>i</mi>
    </mrow>
    <mrow>
      <mi>n</mi>
    </mrow>
  </msubsup>
  <mo>(</mo>
  <mi>t</mi>
  <mo>)</mo>
  <mo>(</mo>
  <mi>p</mi>
  <msub>
    <mi></mi>
    <mrow><mi>i</mi><mo>+</mo><mi>1</mi></mrow>
  </msub>
  <mo>-</mo>
  <mi>p</mi>
  <msub>
    <mi></mi>
    <mrow><mi>i</mi></mrow>
  </msub>
  <mo>)</mo>
</math>

</p>

<p>Here is the maths to derive the above result.</p>

<p class="equ">
<math xmlns="&mathml;">
  <mi>p</mi>
  <mo>=</mo>
  <msubsup>
    <mo>&Sum;</mo>
    <mrow>
      <mi>i</mi><mo>=</mo><mi>0</mi>
    </mrow>
    <mrow>
      <mi>n</mi>
    </mrow>
  </msubsup>
  <mfrac>
    <mrow><mi>n</mi><mo>!</mo></mrow>
    <mrow><mo>(</mo><mi>n</mi><mo>-</mo><mi>i</mi><mo>)</mo><mo>!</mo><mi>i</mi><mo>!</mo></mrow>
  </mfrac>

  <mi>t</mi>
  <msup>
    <mi></mi>
    <mrow><mi>i</mi></mrow>
  </msup>
  <mo>(</mo>
  <mi>1</mi>
  <mo>-</mo>
  <mi>t</mi>
  <mo>)</mo>
  <msup>
    <mi></mi>
    <mrow><mi>n</mi><mo>-</mo><mi>i</mi></mrow>
  </msup>
  <mi>p</mi>
  <msub>
    <mi></mi>
    <mrow><mi>i</mi></mrow>
  </msub>
</math>

<br/>

<math xmlns="&mathml;">
  <mfrac>
    <mrow><mi>dp</mi></mrow>
    <mrow><mi>dt</mi></mrow>
  </mfrac>
  <mo>=</mo>
  <msubsup>
    <mo>&Sum;</mo>
    <mrow>
      <mi>i</mi><mo>=</mo><mi>0</mi>
    </mrow>
    <mrow>
      <mi>n</mi>
    </mrow>
  </msubsup>

  <mi>p</mi>
  <msub>
    <mi></mi>
    <mrow><mi>i</mi></mrow>
  </msub>
  <mfrac>
    <mrow><mi>n</mi><mo>!</mo></mrow>
    <mrow><mo>(</mo><mi>n</mi><mo>-</mo><mi>i</mi><mo>)</mo><mo>!</mo><mi>i</mi><mo>!</mo></mrow>
  </mfrac>
  <mo>{</mo>
  <mi>t</mi>
  <msup>
    <mi></mi>
    <mrow><mi>i</mi></mrow>
  </msup>
  <mo>(</mo>
  <mi>n</mi>
  <mo>-</mo>
  <mi>i</mi>
  <mo>)</mo>
  <mo>(</mo>
  <mi>1</mi>
  <mo>-</mo>
  <mi>t</mi>
  <mo>)</mo>
  <msup>
    <mi></mi>
    <mrow><mi>n</mi><mo>-</mo><mi>1</mi><mo>-</mo><mi>i</mi></mrow>
  </msup>
  <mo>.</mo>
  <mo>-</mo>
  <mi>1</mi>
  <mo>+</mo>
  <mo>(</mo>
  <mi>1</mi>
  <mo>-</mo>
  <mi>t</mi>
  <mo>)</mo>
  <msup>
    <mi></mi>
    <mrow><mi>n</mi><mo>-</mo><mi>i</mi></mrow>
  </msup>
  <mo>.</mo>
  <mi>i</mi>
  <mi>t</mi>
  <msup>
    <mi></mi>
    <mrow><mi>i</mi><mo>-</mo><mi>1</mi></mrow>
  </msup>
  
  <mo>}</mo>
</math>

</p>

<p>Looking at the first sum.</p>

<p class="equ">
<math xmlns="&mathml;">
  <msubsup>
    <mo>&Sum;</mo>
    <mrow>
      <mi>i</mi><mo>=</mo><mi>0</mi>
    </mrow>
    <mrow>
      <mi>n</mi>
    </mrow>
  </msubsup>

  <mi>p</mi>
  <msub>
    <mi></mi>
    <mrow><mi>i</mi></mrow>
  </msub>
  <mfrac>
    <mrow><mi>n</mi><mo>!</mo></mrow>
    <mrow><mo>(</mo><mi>n</mi><mo>-</mo><mi>i</mi><mo>)</mo><mo>!</mo><mi>i</mi><mo>!</mo></mrow>
  </mfrac>
  <mi>t</mi>
  <msup>
    <mi></mi>
    <mrow><mi>i</mi></mrow>
  </msup>
  <mo>(</mo>
  <mi>n</mi>
  <mo>-</mo>
  <mi>i</mi>
  <mo>)</mo>
  <mo>(</mo>
  <mi>1</mi>
  <mo>-</mo>
  <mi>t</mi>
  <mo>)</mo>
  <msup>
    <mi></mi>
    <mrow><mi>n</mi><mo>-</mo><mi>1</mi><mo>-</mo><mi>i</mi></mrow>
  </msup>
  <mo>.</mo>
  <mo>-</mo>
  <mi>1</mi>
</math>
<br/>


<math xmlns="&mathml;">
  <mo>=</mo>
  <msubsup>
    <mo>&Sum;</mo>
    <mrow>
      <mi>i</mi><mo>=</mo><mi>0</mi>
    </mrow>
    <mrow>
      <mi>n</mi><mo>-</mo><mi>1</mi>
    </mrow>
  </msubsup>
  <mi>p</mi>
  <msub>
    <mi></mi>
    <mrow><mi>i</mi></mrow>
  </msub>
  <mfrac>
    <mrow><mi>n</mi><mo>!</mo></mrow>
    <mrow><mo>(</mo><mi>n</mi><mo>-</mo><mi>i</mi><mo>)</mo><mo>!</mo><mi>i</mi><mo>!</mo></mrow>
  </mfrac>
  <mi>t</mi>
  <msup>
    <mi></mi>
    <mrow><mi>i</mi></mrow>
  </msup>
  <mo>(</mo>
  <mi>n</mi>
  <mo>-</mo>
  <mi>i</mi>
  <mo>)</mo>
  <mo>(</mo>
  <mi>1</mi>
  <mo>-</mo>
  <mi>t</mi>
  <mo>)</mo>
  <msup>
    <mi></mi>
    <mrow><mi>n</mi><mo>-</mo><mi>1</mi><mo>-</mo><mi>i</mi></mrow>
  </msup>
  <mo>.</mo>
  <mo>-</mo>
  <mi>1</mi>
</math>
<br/>


<math xmlns="&mathml;">
  <mo>=</mo>
  <mi>n</mi>
  <msubsup>
    <mo>&Sum;</mo>
    <mrow>
      <mi>i</mi><mo>=</mo><mi>0</mi>
    </mrow>
    <mrow>
      <mi>n</mi><mo>-</mo><mi>1</mi>
    </mrow>
  </msubsup>
  <mi>p</mi>
  <msub>
    <mi></mi>
    <mrow><mi>i</mi></mrow>
  </msub>
  <mfrac>
    <mrow><mo>(</mo><mi>n</mi><mo>-</mo><mi>1</mi><mo>)</mo><mo>!</mo></mrow>
    <mrow><mo>(</mo><mi>n</mi><mo>-</mo><mi>1</mi><mo>-</mo><mi>i</mi><mo>)</mo><mo>!</mo><mi>i</mi><mo>!</mo></mrow>
  </mfrac>
  <mi>t</mi>
  <msup>
    <mi></mi>
    <mrow><mi>i</mi></mrow>
  </msup>
  <mo>(</mo>
  <mi>1</mi>
  <mo>-</mo>
  <mi>t</mi>
  <mo>)</mo>
  <msup>
    <mi></mi>
    <mrow><mi>n</mi><mo>-</mo><mi>1</mi><mo>-</mo><mi>i</mi></mrow>
  </msup>
  <mo>.</mo>
  <mo>-</mo>
  <mi>1</mi>
</math>
<br/>

<math xmlns="&mathml;">
  <mo>=</mo>
  <mi>n</mi>
  <msubsup>
    <mo>&Sum;</mo>
    <mrow>
      <mi>i</mi><mo>=</mo><mi>0</mi>
    </mrow>
    <mrow>
      <mi>n</mi><mo>-</mo><mi>1</mi>
    </mrow>
  </msubsup>
  <mi>p</mi>
  <msub>
    <mi></mi>
    <mrow><mi>i</mi></mrow>
  </msub>

  <msubsup>
    <mo>B</mo>
    <mrow>
      <mi>i</mi>
    </mrow>
    <mrow>
      <mi>n</mi><mo>-</mo><mi>1</mi>
    </mrow>
  </msubsup>

  <mo>.</mo>
  <mo>-</mo>
  <mi>1</mi>
</math>

</p>

<p>Looking at the second sum.</p>

<p class="equ">
<math xmlns="&mathml;">
  <msubsup>
    <mo>&Sum;</mo>
    <mrow>
      <mi>i</mi><mo>=</mo><mi>0</mi>
    </mrow>
    <mrow>
      <mi>n</mi>
    </mrow>
  </msubsup>

  <mi>p</mi>
  <msub>
    <mi></mi>
    <mrow><mi>i</mi></mrow>
  </msub>
  <mfrac>
    <mrow><mi>n</mi><mo>!</mo></mrow>
    <mrow><mo>(</mo><mi>n</mi><mo>-</mo><mi>i</mi><mo>)</mo><mo>!</mo><mi>i</mi><mo>!</mo></mrow>
  </mfrac>
  <mo>(</mo>
  <mi>1</mi>
  <mo>-</mo>
  <mi>t</mi>
  <mo>)</mo>
  <msup>
    <mi></mi>
    <mrow><mi>n</mi><mo>-</mo><mi>i</mi></mrow>
  </msup>
  <mo>.</mo>
  <mi>i</mi>
  <mi>t</mi>
  <msup>
    <mi></mi>
    <mrow><mi>i</mi><mo>-</mo><mi>1</mi></mrow>
  </msup>
</math>
<br/>

<math xmlns="&mathml;">
  <mo>=</mo>
  <msubsup>
    <mo>&Sum;</mo>
    <mrow>
      <mi>i</mi><mo>=</mo><mi>1</mi>
    </mrow>
    <mrow>
      <mi>n</mi>
    </mrow>
  </msubsup>

  <mi>p</mi>
  <msub>
    <mi></mi>
    <mrow><mi>i</mi></mrow>
  </msub>
  <mfrac>
    <mrow><mi>n</mi><mo>!</mo></mrow>
    <mrow><mo>(</mo><mi>n</mi><mo>-</mo><mi>i</mi><mo>)</mo><mo>!</mo><mi>i</mi><mo>!</mo></mrow>
  </mfrac>
  <mo>(</mo>
  <mi>1</mi>
  <mo>-</mo>
  <mi>t</mi>
  <mo>)</mo>
  <msup>
    <mi></mi>
    <mrow><mi>n</mi><mo>-</mo><mi>i</mi></mrow>
  </msup>
  <mo>.</mo>
  <mi>i</mi>
  <mi>t</mi>
  <msup>
    <mi></mi>
    <mrow><mi>i</mi><mo>-</mo><mi>1</mi></mrow>
  </msup>
</math>
<br/>

<math xmlns="&mathml;">
  <mo>=</mo>
  <msubsup>
    <mo>&Sum;</mo>
    <mrow>
      <mi>i</mi><mo>=</mo><mi>1</mi>
    </mrow>
    <mrow>
      <mi>n</mi>
    </mrow>
  </msubsup>

  <mi>p</mi>
  <msub>
    <mi></mi>
    <mrow><mi>i</mi></mrow>
  </msub>
  <mfrac>
    <mrow><mi>n</mi><mo>!</mo></mrow>
    <mrow><mo>(</mo><mi>n</mi><mo>-</mo><mi>i</mi><mo>)</mo><mo>!</mo><mo>(</mo><mi>i</mi><mo>-</mo><mi>1</mi><mo>)</mo><mo>!</mo></mrow>
  </mfrac>
  <mo>(</mo>
  <mi>1</mi>
  <mo>-</mo>
  <mi>t</mi>
  <mo>)</mo>
  <msup>
    <mi></mi>
    <mrow><mi>n</mi><mo>-</mo><mi>i</mi></mrow>
  </msup>
  <mo>.</mo>
  <mi>t</mi>
  <msup>
    <mi></mi>
    <mrow><mi>i</mi><mo>-</mo><mi>1</mi></mrow>
  </msup>
</math>

</p>

<p>Here is a trick from "Concret Mathematics" but I can
 not find the reference.  Subtract 1 in the sum and
 add 1 in the body to variable i.  This is the same as
 the operation of shifting in an integral, except in a discrete
 sense. This fundamental technique was never taught in my
 maths degree where generally only the continuous variables
 are considered as part of calculus.
</p>

<p class="equ">
<math xmlns="&mathml;">
  <mo>=</mo>
  <msubsup>
    <mo>&Sum;</mo>
    <mrow>
      <mi>i</mi><mo>=</mo><mi>0</mi>
    </mrow>
    <mrow>
      <mi>n</mi><mo>-</mo><mi>1</mi>
    </mrow>
  </msubsup>

  <mi>p</mi>
  <msub>
    <mi></mi>
    <mrow><mi>i</mi><mo>+</mo><mi>1</mi></mrow>
  </msub>
  <mfrac>
    <mrow><mi>n</mi><mo>!</mo></mrow>
    <mrow><mo>(</mo><mi>n</mi><mo>-</mo><mi>1</mi><mo>-</mo><mi>i</mi><mo>)</mo><mo>!</mo><mi>i</mi><mo>!</mo></mrow>
  </mfrac>
  <mo>(</mo>
  <mi>1</mi>
  <mo>-</mo>
  <mi>t</mi>
  <mo>)</mo>
  <msup>
    <mi></mi>
    <mrow><mi>n</mi><mo>-</mo><mi>1</mi><mo>-</mo><mi>i</mi></mrow>
  </msup>
  <mo>.</mo>
  <mi>t</mi>
  <msup>
    <mi></mi>
    <mrow><mi>i</mi></mrow>
  </msup>
</math>
<br/>

<math xmlns="&mathml;">
  <mo>=</mo>
  <mi>n</mi>
  <msubsup>
    <mo>&Sum;</mo>
    <mrow>
      <mi>i</mi><mo>=</mo><mi>0</mi>
    </mrow>
    <mrow>
      <mi>n</mi><mo>-</mo><mi>1</mi>
    </mrow>
  </msubsup>

  <mi>p</mi>
  <msub>
    <mi></mi>
    <mrow><mi>i</mi><mo>+</mo><mi>1</mi></mrow>
  </msub>
  <mfrac>
    <mrow><mo>(</mo><mi>n</mi><mo>-</mo><mi>1</mi><mo>)</mo><mo>!</mo></mrow>
    <mrow><mo>(</mo><mi>n</mi><mo>-</mo><mi>1</mi><mo>-</mo><mi>i</mi><mo>)</mo><mo>!</mo><mi>i</mi><mo>!</mo></mrow>
  </mfrac>
  <mo>(</mo>
  <mi>1</mi>
  <mo>-</mo>
  <mi>t</mi>
  <mo>)</mo>
  <msup>
    <mi></mi>
    <mrow><mi>n</mi><mo>-</mo><mi>1</mi><mo>-</mo><mi>i</mi></mrow>
  </msup>
  <mo>.</mo>
  <mi>t</mi>
  <msup>
    <mi></mi>
    <mrow><mi>i</mi></mrow>
  </msup>
</math>
<br/>

<math xmlns="&mathml;">
  <mo>=</mo>
  <mi>n</mi>
  <msubsup>
    <mo>&Sum;</mo>
    <mrow>
      <mi>i</mi><mo>=</mo><mi>0</mi>
    </mrow>
    <mrow>
      <mi>n</mi><mo>-</mo><mi>1</mi>
    </mrow>
  </msubsup>

  <mi>p</mi>
  <msub>
    <mi></mi>
    <mrow><mi>i</mi><mo>+</mo><mi>1</mi></mrow>
  </msub>

  <msubsup>
    <mo>B</mo>
    <mrow>
      <mi>i</mi>
    </mrow>
    <mrow>
      <mi>n</mi><mo>-</mo><mi>1</mi>
    </mrow>
  </msubsup>

</math>

</p>


<p>Adding the two sums gives the derivative of the Bezier
 sum curve.
</p>


</div>


<div class="spacer" />

<div class="float25">
<a id="References"></a>
<h2>References</h2>

<ol>

<li>
Tomas Akenine-Moller and Eric Haines (2002). Real-Time Rendering (Second Edition).
 ISBN 1-56881-182-9. Pages 496-504.
</li>

</ol>

</div>



</body>
</html>



