NPack Wiki & Documentation Rss Feedhttp://www.codeplex.com/NPack/Wiki/View.aspx?title=HomeNPack Wiki Rss DescriptionUPDATED WIKI: Homehttp://www.codeplex.com/NPack/Wiki/View.aspx?title=Home&version=16<div class="wikidoc">
<img src="http://www.codeplex.com/NPack/Project/FileDownload.aspx?DownloadId=15527" alt="NPack.png" /><br /> <br />An implementation of linear algebra numerical structures and methods for the CLR. NPack is unique in that it uses generics for matrix element definitions, and a set of matrix operations via an interface, allowing a CLR-based operations engine as well as the opportunity to use GPGPU-based operation engines. NPack was initially ported from Java Matrix Package (JAMA) by the US National Institute of Standards and Technology. JAMA in turn is a Java reinterpretation of LINPACK.
<br /> <br /><table>
<tr>
<th> Graphics </th><th> Numerical Linear Algebra </th>
</tr><tr>
<td> <a href="http://www.codeplex.com/NPack/Wiki/View.aspx?title=Graphics%20How%20To&referringTitle=Home">Graphics How To</a> </td><td> <a href="http://www.codeplex.com/NPack/Wiki/View.aspx?title=Numerics%20How%20To&referringTitle=Home">Numerics How To</a> </td>
</tr><tr>
<td> <a href="http://www.codeplex.com/NPack/Wiki/View.aspx?title=Graphics%20Examples&referringTitle=Home">Graphics Examples</a> </td><td> <a href="http://www.codeplex.com/NPack/Wiki/View.aspx?title=Numerics%20Examples&referringTitle=Home">Numerics Examples</a> </td>
</tr><tr>
<td> <a href="http://www.codeplex.com/NPack/Wiki/View.aspx?title=Linear%20algebra%20for%20computer%20graphics&referringTitle=Home">Linear algebra for computer graphics</a> <img src="http://www.codeplex.com/NPack/Project/FileDownload.aspx?DownloadId=14997" alt="CodePlexTableSpacing.png" /> </td><td> <img src="http://www.codeplex.com/NPack/Project/FileDownload.aspx?DownloadId=14997" alt="CodePlexTableSpacing.png" /> </td>
</tr>
</table> <br /><h1>
Current Status (2007-07-21)
</h1><img src="http://www.codeplex.com/NPack/Project/FileDownload.aspx?DownloadId=16147" alt="NpackCoverageStatus.png" /><br /> <br /><h1>
FAQ
</h1><ul>
<li><a href="http://www.codeplex.com/NPack/Wiki/View.aspx?title=Why%20NPack%3f&referringTitle=Home">Why NPack?</a></li><li><a href="http://www.codeplex.com/NPack/Wiki/View.aspx?title=What%20are%20the%20Alternatives%3f&referringTitle=Home">What are the Alternatives?</a></li>
</ul>
</div>codekaizenSat, 21 Jul 2007 08:56:24 GMTUPDATED WIKI: Home 20070721085624AUPDATED WIKI: Homehttp://www.codeplex.com/NPack/Wiki/View.aspx?title=Home&version=15<div class="wikidoc">
<img src="http://www.codeplex.com/NPack/Project/FileDownload.aspx?DownloadId=15527" alt="NPack.png" /><br /> <br />An implementation of linear algebra numerical structures and methods for the CLR. NPack is unique in that it uses generics for matrix element definitions, and a set of matrix operations via an interface, allowing a CLR-based operations engine as well as the opportunity to use GPGPU-based operation engines. NPack was initially ported from Java Matrix Package (JAMA) by the US National Institute of Standards and Technology. JAMA in turn is a Java reinterpretation of LINPACK.
<br /> <br /><table>
<tr>
<th> Graphics </th><th> Numerical Linear Algebra </th>
</tr><tr>
<td> <a href="http://www.codeplex.com/NPack/Wiki/View.aspx?title=Graphics%20How%20To&referringTitle=Home">Graphics How To</a> </td><td> <a href="http://www.codeplex.com/NPack/Wiki/View.aspx?title=Numerics%20How%20To&referringTitle=Home">Numerics How To</a> </td>
</tr><tr>
<td> <a href="http://www.codeplex.com/NPack/Wiki/View.aspx?title=Graphics%20Examples&referringTitle=Home">Graphics Examples</a> </td><td> <a href="http://www.codeplex.com/NPack/Wiki/View.aspx?title=Numerics%20Examples&referringTitle=Home">Numerics Examples</a> </td>
</tr><tr>
<td> <a href="http://www.codeplex.com/NPack/Wiki/View.aspx?title=Linear%20algebra%20for%20computer%20graphics&referringTitle=Home">Linear algebra for computer graphics</a> <img src="http://www.codeplex.com/NPack/Project/FileDownload.aspx?DownloadId=14997" alt="CodePlexTableSpacing.png" /> </td><td> <img src="http://www.codeplex.com/NPack/Project/FileDownload.aspx?DownloadId=14997" alt="CodePlexTableSpacing.png" /> </td>
</tr>
</table> <br /><h1>
Current Status
</h1><img src="http://www.codeplex.com/NPack/Project/FileDownload.aspx?DownloadId=16147" alt="NpackCoverageStatus.png" /><br /> <br /><h1>
FAQ
</h1><ul>
<li><a href="http://www.codeplex.com/NPack/Wiki/View.aspx?title=Why%20NPack%3f&referringTitle=Home">Why NPack?</a></li><li><a href="http://www.codeplex.com/NPack/Wiki/View.aspx?title=What%20are%20the%20Alternatives%3f&referringTitle=Home">What are the Alternatives?</a></li>
</ul>
</div>codekaizenSat, 21 Jul 2007 08:56:03 GMTUPDATED WIKI: Home 20070721085603AUPDATED WIKI: Graphics Exampleshttp://www.codeplex.com/NPack/Wiki/View.aspx?title=Graphics Examples&version=2<div class="wikidoc">
<h1>
Using NPack for Graphics Processing
</h1> <br />One of the primary scenarios supported by NPack is to abstract graphics transformations so that they can be represented in any graphics rendering system without having to have a reference to the specific graphics library. Almost all graphics libraries have a concept of an <b>affine transform</b> (see: <a href="http://www.codeplex.com/NPack/Wiki/View.aspx?title=Linear%20algebra%20for%20computer%20graphics&referringTitle=Graphics%20Examples">Linear algebra for computer graphics</a>), and NPack constructs map simply and nicely onto the classes used by graphics packages to represent affine transforms.<br /> <br /><h2>
GDI
</h2><pre>
using System;
using System.Drawing;
using GdiMatrix = System.Drawing.Drawing2D.Matrix;
using AffineMatrixF = NPack.AffineMatrix<NPack.SingleComponent>;
using IVectorF = NPack.Interfaces.IVector<NPack.SingleComponent>;
using VectorF = NPack.Vector<NPack.SingleComponent>;
...
// GdiMatrix is an alias for System.Drawing.Drawing2D.Matrix, which is a GDI affine transform
GdiMatrix m1 = new GdiMatrix();
// We want to use an AffineMatrix with a format of MatrixFormat.RowMajor, since
// GDI uses row-major format for matrixes.
AffineMatrixF a1 = new AffineMatrixF(MatrixFormat.RowMajor, 3);
m1.Rotate(45);
m1.Translate(10, 103);
m1.Scale(-1, 13);
m1.RotateAt(30, new PointF(33, 33));
a1.RotateAlong(null, Math.PI / 4);
a1.Translate(new VectorF(10, 103));
a1.Scale(new VectorF(-1, 13));
a1.RotateAt(new VectorF(33, 33), null, Math.PI / 6);
PointF[] gdiPoints = new PointF[] { new PointF(1, 0), new PointF(0, 1) };
m1.TransformPoints(gdiPoints);
VectorF[] npackPoints = new VectorF[] { new VectorF(1, 0, 1), new VectorF(0, 1, 1) };
a1.TransformVectors(npackPoints);
</pre> <br /><h2>
DirectX
</h2><pre>
using Microsoft.DirectX;
using AffineMatrixF = NPack.AffineMatrix<NPack.SingleComponent>;
using VectorF = NPack.Vector<NPack.SingleComponent>;
using IVectorF = NPack.Interfaces.IVector<NPack.SingleComponent>;
...
Matrix r = Matrix.RotationX((float) Math.PI/4);
Matrix t = Matrix.Translation(new Vector3(1, 2, -3));
Matrix s = Matrix.Scaling(new Vector3(-1, 3, 5));
Matrix m1 = r*t*s;
// We want to use an AffineMatrix with a format of MatrixFormat.RowMajor, since
// DirectX uses row-major format for matrixes.
AffineMatrixF a1 = new AffineMatrixF(MatrixFormat.RowMajor, 4);
a1.RotateAlong(new VectorF(1, 0, 0), Math.PI / 4);
a1.Translate(new VectorF(1, 2, -3));
a1.Scale(new VectorF(-1, 3, 5));
Vector4[] dxPoints = new Vector4[]
{
new Vector4(1, 0, 0, 1),
new Vector4(0, 1, 0, 1),
new Vector4(0, 0, 1, 1)
};
dxPoints = Vector4.Transform(dxPoints, m1);
VectorF[] npackPoints = new VectorF[]
{
new VectorF(1, 0, 0, 1),
new VectorF(0, 1, 0, 1),
new VectorF(0, 0, 1, 1),
};
a1.TransformVectors(npackPoints);
</pre> <br /><h2>
OpenGL
</h2> <br /><h2>
WPF
</h2><pre>
using System.Windows.Media.Media3D;
using AffineMatrixD = NPack.AffineMatrix<NPack.DoubleComponent>;
using VectorD = NPack.Vector<NPack.DoubleComponent>;
using IVectorD = NPack.Interfaces.IVector<NPack.DoubleComponent>;
...
Matrix3D m1 = new Matrix3D();
m1.Rotate(new Quaternion(new Vector3D(1, 0, 0), 135));
m1.Translate(new Vector3D(1, 2, -3));
m1.Scale(new Vector3D(-1, 3, 5));
// We want to use an AffineMatrix with a format of MatrixFormat.RowMajor, since
// WPFuses row-major format for matrixes. WPF also uses doubles instead
// of floats, so we set the generic parameter appropriately.
AffineMatrixD a1 = new AffineMatrixD(MatrixFormat.RowMajor, 4);
a1.RotateAlong(new VectorD(1, 0, 0), Math.PI - Math.PI / 4);
a1.Translate(new VectorD(1, 2, -3));
a1.Scale(new VectorD(-1, 3, 5));
Point4D[] points = new Point4D[]
{
new Point4D(1, 0, 0, 1),
new Point4D(0, 1, 0, 1),
new Point4D(0, 0, 1, 1)
};
m1.Transform(points);
VectorD[] npackPoints = new VectorD[]
{
new VectorD(1, 0, 0, 1),
new VectorD(0, 1, 0, 1),
new VectorD(0, 0, 1, 1),
};
a1.TransformVectors(npackPoints);
</pre> <br /><h2>
Flash
</h2> <br /><h2>
SVG
</h2>
</div>codekaizenWed, 18 Jul 2007 23:40:18 GMTUPDATED WIKI: Graphics Examples 20070718114018PUPDATED WIKI: Graphics Exampleshttp://www.codeplex.com/NPack/Wiki/View.aspx?title=Graphics Examples&version=1<div class="wikidoc">
<h1>
Using NPack for Graphics Processing
</h1> <br />One of the primary scenarios supported by NPack is to abstract graphics transformations so that they can be represented in any graphics rendering system without having to have a reference to the specific graphics library. Almost all graphics libraries have a concept of an <b>affine transform</b> (see: <a href="http://www.codeplex.com/NPack/Wiki/View.aspx?title=Linear%20algebra%20for%20computer%20graphics&referringTitle=Graphics%20Examples">Linear algebra for computer graphics</a>), and NPack constructs map simply and nicely onto the classes used by graphics packages to represent affine transforms.<br /> <br /><h2>
GDI
</h2> <br /><h2>
DirectX
</h2> <br /><h2>
OpenGL
</h2> <br /><h2>
WPF
</h2> <br /><h2>
Flash
</h2> <br /><h2>
SVG
</h2>
</div>codekaizenWed, 18 Jul 2007 22:57:35 GMTUPDATED WIKI: Graphics Examples 20070718105735PUPDATED WIKI: Homehttp://www.codeplex.com/NPack/Wiki/View.aspx?title=Home&version=14<div class="wikidoc">
<img src="http://www.codeplex.com/NPack/Project/FileDownload.aspx?DownloadId=15527" alt="NPack.png" /><br /> <br />An implementation of linear algebra numerical structures and methods for the CLR. NPack is unique in that it uses generics for matrix element definitions, and a set of matrix operations via an interface, allowing a CLR-based operations engine as well as the opportunity to use GPGPU-based operation engines. NPack was initially ported from Java Matrix Package (JAMA) by the US National Institute of Standards and Technology (which was a Java reinterpretation of LINPACK).
<br /> <br /><table>
<tr>
<th> Graphics </th><th> Numerical Linear Algebra </th>
</tr><tr>
<td> <a href="http://www.codeplex.com/NPack/Wiki/View.aspx?title=Graphics%20How%20To&referringTitle=Home">Graphics How To</a> </td><td> <a href="http://www.codeplex.com/NPack/Wiki/View.aspx?title=Numerics%20How%20To&referringTitle=Home">Numerics How To</a> </td>
</tr><tr>
<td> <a href="http://www.codeplex.com/NPack/Wiki/View.aspx?title=Graphics%20Examples&referringTitle=Home">Graphics Examples</a> </td><td> <a href="http://www.codeplex.com/NPack/Wiki/View.aspx?title=Numerics%20Examples&referringTitle=Home">Numerics Examples</a> </td>
</tr><tr>
<td> <a href="http://www.codeplex.com/NPack/Wiki/View.aspx?title=Linear%20algebra%20for%20computer%20graphics&referringTitle=Home">Linear algebra for computer graphics</a> <img src="http://www.codeplex.com/NPack/Project/FileDownload.aspx?DownloadId=14997" alt="CodePlexTableSpacing.png" /> </td><td> <img src="http://www.codeplex.com/NPack/Project/FileDownload.aspx?DownloadId=14997" alt="CodePlexTableSpacing.png" /> </td>
</tr>
</table> <br /><h1>
Current Status
</h1><img src="http://www.codeplex.com/NPack/Project/FileDownload.aspx?DownloadId=15730" alt="NPackCoverage20070715.png" /><br /> <br /><h1>
FAQ
</h1><ul>
<li><a href="http://www.codeplex.com/NPack/Wiki/View.aspx?title=Why%20NPack%3f&referringTitle=Home">Why NPack?</a></li><li><a href="http://www.codeplex.com/NPack/Wiki/View.aspx?title=What%20are%20the%20Alternatives%3f&referringTitle=Home">What are the Alternatives?</a></li>
</ul>
</div>codekaizenSun, 15 Jul 2007 12:43:58 GMTUPDATED WIKI: Home 20070715124358PUPDATED WIKI: Homehttp://www.codeplex.com/NPack/Wiki/View.aspx?title=Home&version=13<div class="wikidoc">
<img src="http://www.codeplex.com/NPack/Project/FileDownload.aspx?DownloadId=15527" alt="NPack.png" /><br /> <br />An implementation of linear algebra numerical structures and methods for the CLR. NPack is unique in that it uses generics for matrix element definitions, and a set of matrix operations via an interface, allowing a CLR-based operations engine as well as the opportunity to use GPGPU-based operation engines. NPack was initially ported from Java Matrix Package (JAMA) by the US National Institute of Standards and Technology (which was a Java reinterpretation of LINPACK).
<br /> <br /><table>
<tr>
<th> Graphics </th><th> Numerical Linear Algebra </th>
</tr><tr>
<td> <a href="http://www.codeplex.com/NPack/Wiki/View.aspx?title=Graphics%20How%20To&referringTitle=Home">Graphics How To</a> </td><td> <a href="http://www.codeplex.com/NPack/Wiki/View.aspx?title=Numerics%20How%20To&referringTitle=Home">Numerics How To</a> </td>
</tr><tr>
<td> <a href="http://www.codeplex.com/NPack/Wiki/View.aspx?title=Graphics%20Examples&referringTitle=Home">Graphics Examples</a> </td><td> <a href="http://www.codeplex.com/NPack/Wiki/View.aspx?title=Numerics%20Examples&referringTitle=Home">Numerics Examples</a> </td>
</tr><tr>
<td> <a href="http://www.codeplex.com/NPack/Wiki/View.aspx?title=Linear%20algebra%20for%20computer%20graphics&referringTitle=Home">Linear algebra for computer graphics</a> <img src="http://www.codeplex.com/NPack/Project/FileDownload.aspx?DownloadId=14997" alt="CodePlexTableSpacing.png" /> </td><td> <img src="http://www.codeplex.com/NPack/Project/FileDownload.aspx?DownloadId=14997" alt="CodePlexTableSpacing.png" /> </td>
</tr>
</table> <br /><h1>
Current Status
</h1><img src="http://www.codeplex.com/NPack/Project/FileDownload.aspx?DownloadId=15729" alt="NPackCoverage20070715.png" /><br /> <br /><h1>
FAQ
</h1><ul>
<li><a href="http://www.codeplex.com/NPack/Wiki/View.aspx?title=Why%20NPack%3f&referringTitle=Home">Why NPack?</a></li><li><a href="http://www.codeplex.com/NPack/Wiki/View.aspx?title=What%20are%20the%20Alternatives%3f&referringTitle=Home">What are the Alternatives?</a></li>
</ul>
</div>codekaizenSun, 15 Jul 2007 12:41:48 GMTUPDATED WIKI: Home 20070715124148PUPDATED WIKI: Homehttp://www.codeplex.com/NPack/Wiki/View.aspx?title=Home&version=12<div class="wikidoc">
<img src="http://www.codeplex.com/NPack/Project/FileDownload.aspx?DownloadId=15527" alt="NPack.png" /><br /> <br />An implementation of linear algebra numerical structures and methods for the CLR. NPack is unique in that it uses generics for matrix element definitions, and a set of matrix operations via an interface, allowing a CLR-based operations engine as well as the opportunity to use GPGPU-based operation engines. NPack was initially ported from Java Matrix Package (JAMA) by the US National Institute of Standards and Technology (which was a Java reinterpretation of LINPACK).
<br /> <br /><table>
<tr>
<th> Graphics </th><th> Numerical Linear Algebra </th>
</tr><tr>
<td> <a href="http://www.codeplex.com/NPack/Wiki/View.aspx?title=Graphics%20How%20To&referringTitle=Home">Graphics How To</a> </td><td> <a href="http://www.codeplex.com/NPack/Wiki/View.aspx?title=Numerics%20How%20To&referringTitle=Home">Numerics How To</a> </td>
</tr><tr>
<td> <a href="http://www.codeplex.com/NPack/Wiki/View.aspx?title=Graphics%20Examples&referringTitle=Home">Graphics Examples</a> </td><td> <a href="http://www.codeplex.com/NPack/Wiki/View.aspx?title=Numerics%20Examples&referringTitle=Home">Numerics Examples</a> </td>
</tr><tr>
<td> <a href="http://www.codeplex.com/NPack/Wiki/View.aspx?title=Linear%20algebra%20for%20computer%20graphics&referringTitle=Home">Linear algebra for computer graphics</a> <img src="http://www.codeplex.com/NPack/Project/FileDownload.aspx?DownloadId=14997" alt="CodePlexTableSpacing.png" /> </td><td> <img src="http://www.codeplex.com/NPack/Project/FileDownload.aspx?DownloadId=14997" alt="CodePlexTableSpacing.png" /> </td>
</tr>
</table> <br /><h1>
Current Status
</h1><span class="unresolved">Cannot resolve link: </span>[image:NPackCoverage20070715.png]<br /> <br /><h1>
FAQ
</h1><ul>
<li><a href="http://www.codeplex.com/NPack/Wiki/View.aspx?title=Why%20NPack%3f&referringTitle=Home">Why NPack?</a></li><li><a href="http://www.codeplex.com/NPack/Wiki/View.aspx?title=What%20are%20the%20Alternatives%3f&referringTitle=Home">What are the Alternatives?</a></li>
</ul>
</div>codekaizenSun, 15 Jul 2007 12:41:12 GMTUPDATED WIKI: Home 20070715124112PUPDATED WIKI: Homehttp://www.codeplex.com/NPack/Wiki/View.aspx?title=Home&version=11<div class="wikidoc">
<img src="http://www.codeplex.com/NPack/Project/FileDownload.aspx?DownloadId=15527" alt="NPack.png" /><br /> <br />An implementation of linear algebra numerical structures and methods for the CLR. NPack is unique in that it uses generics for matrix element definitions, and a set of matrix operations via an interface, allowing a CLR-based operations engine as well as the opportunity to use GPGPU-based operation engines. NPack was initially ported from Java Matrix Package (JAMA) by the US National Institute of Standards and Technology (which was a Java reinterpretation of LINPACK).
<br /> <br /><table>
<tr>
<th> Graphics </th><th> Numerical Linear Algebra </th>
</tr><tr>
<td> <a href="http://www.codeplex.com/NPack/Wiki/View.aspx?title=Graphics%20How%20To&referringTitle=Home">Graphics How To</a> </td><td> <a href="http://www.codeplex.com/NPack/Wiki/View.aspx?title=Numerics%20How%20To&referringTitle=Home">Numerics How To</a> </td>
</tr><tr>
<td> <a href="http://www.codeplex.com/NPack/Wiki/View.aspx?title=Graphics%20Examples&referringTitle=Home">Graphics Examples</a> </td><td> <a href="http://www.codeplex.com/NPack/Wiki/View.aspx?title=Numerics%20Examples&referringTitle=Home">Numerics Examples</a> </td>
</tr><tr>
<td> <a href="http://www.codeplex.com/NPack/Wiki/View.aspx?title=Linear%20algebra%20for%20computer%20graphics&referringTitle=Home">Linear algebra for computer graphics</a> <img src="http://www.codeplex.com/NPack/Project/FileDownload.aspx?DownloadId=14997" alt="CodePlexTableSpacing.png" /> </td><td> <img src="http://www.codeplex.com/NPack/Project/FileDownload.aspx?DownloadId=14997" alt="CodePlexTableSpacing.png" /> </td>
</tr>
</table> <br /><h1>
FAQ
</h1><ul>
<li><a href="http://www.codeplex.com/NPack/Wiki/View.aspx?title=Why%20NPack%3f&referringTitle=Home">Why NPack?</a></li><li><a href="http://www.codeplex.com/NPack/Wiki/View.aspx?title=What%20are%20the%20Alternatives%3f&referringTitle=Home">What are the Alternatives?</a></li>
</ul>
</div>codekaizenTue, 10 Jul 2007 20:59:55 GMTUPDATED WIKI: Home 20070710085955PUPDATED WIKI: Linear algebra for computer graphicshttp://www.codeplex.com/NPack/Wiki/View.aspx?title=Linear algebra for computer graphics&version=3<div class="wikidoc">
<h1>
Linear Algebra for Computer Graphics
</h1>Both 2D and 3D computer graphics can be represented using the same concepts on which linear algebra is established - the vector and the matrix (which are really just different manifiestations of the same phenomenon: ordered tuples of measurement). In both the 2nd and 3rd dimension, there is a natural, concrete geometrical representation of the concepts related to vectors. However, if we treat a vector's representation symbolically, using algebraic definitions, statements and equations, we can manupulate them using a computer quite easily and powerfully. <br /> <br /><h2>
Computer Graphics as a Linear System
</h2><h3>
Vectors and Euclidian Space
</h3>Think of space. You're everyday experiences give you a good understanding of 2- and 3-dimensional space. Things that are in space are at a particular location, and these locations have a particular relationship among them. First, the space in between two objects can be measured. Second, you can say that one object is located at a particular angle away from the other relative to some third object, or some fixed position in space.<br /> <br />If we had a 2D space (like a piece of paper or a flat plot of land) and a lot of objects in it, we could choose one point and measure all objects from this one point. This would give us a useful system to compare objects - where and how far away they are. We can call this point the <b>origin</b> and then measure away from the origin to find out how far away objects are. In order to know what direction they are in, however, it is useful to define direction in a similar manner as the origin. If we consider the origin as zero, since it has no distance between it and itself, then let's make a "zero" for direction as well. If we draw a straight line through the origin, and call this line's direction "zero", then any point that lies along it could be considered to be at a direction of "zero" from the origin. For points not on this line, we can go along the line until we get to a point where the point not on it is a straight line from our "zero" line. The point along our line which makes the shortest line to get to the point not on the "zero" line gives us another important direction. So now we have two directions, along our "zero" line and away from our "zero" line. If we move the "away from" direction to the origin, we can now measure along the "zero" line, and along the "away from zero" line and hit any point in our space. This is in fact what one of the best-known coordinate systems - the Cartesian coordinate system -does. The "zero" line is called the <b>X axis</b>, and the "away from zero" line is called the <b>Y axis</b>. We can address any point in 2D space as a pairing of a measurement along the X axis and a measurement along the Y axis. This same idea can be extended to 3D space if you imaging a line coming out of the origin and extending back through it.<br /> <br />Now back to our objects in our 2D space. If we draw a straight line out to an object of interest, we can describe this line as a measure along the X axis and a measure along the Y axis. If you make measurements of these pairings, or tuples, of X values and Y values, we have a consistent, consice method of describing locations of objects in our system. This tuple of values is known as a <b>vector</b>.<br /> <br /><h2>
Linear and Affine Transformations
</h2><h2>
Color as a Vector Space
</h2>
</div>codekaizenMon, 02 Jul 2007 18:19:12 GMTUPDATED WIKI: Linear algebra for computer graphics 20070702061912PUPDATED WIKI: Linear algebra for computer graphicshttp://www.codeplex.com/NPack/Wiki/View.aspx?title=Linear algebra for computer graphics&version=2<div class="wikidoc">
<h1>
Linear Algebra for Computer Graphics
</h1>Both 2D and 3D computer graphics can be represented using the same concepts on which linear algebra is established - the vector and the matrix (which are really just different manifiestations of the same phenomenon: ordered tuples of measurement). In both the 2nd and 3rd dimension, there is a natural, concrete geometrical representation of the concepts related to vectors. However, if we treat a vector's representation symbolically, using algebraic definitions, statements and equations, we can manupulate them using a computer quite easily and powerfully. <br /> <br /><h2>
Computer Graphics as a Linear System
</h2><h3>
Vectors and Euclidian Space
</h3>Think of space. You're everyday experiences give you a good understanding of 2- and 3-dimensional space. Things that are in space are at a particular location, and these locations have a particular relationship among them. First, the space in between two objects can be measured. Second, you can say that one object is located at a particular angle away from the other relative to some third object, or some fixed position in space.<br /> <br />If we had a space and a lot of objects in it, we could choose one point and measure all objects from this one point. This would give us a useful system to compare objects - where and how far away they are. We can call this point the <b>origin</b> and then measure away from the origin to find out how far away objects are. In order to know what direction they are in, however, it is useful to define direction in a similar manner as the origin. If we consider the origin as zero, since it has no distance between it and itself, then let's make a "zero" for direction as well. If we draw a straight line through the origin, and call this line's direction "zero", then any point that lies along it could be considered to be at a direction of "zero" from the origin. For points not on this line, we can go along the line until we get to a point where the point not on it is a straight line from our "zero" line. The point along our line which makes the shortest line to get to the point not on the "zero" line gives us another important direction. So now we have two directions, along our "zero" line and away from our "zero" line. If we move the "away from" direction to the origin, we can now measure along the "zero" line, and along the "away from zero" line and hit any point in our space. This is in fact what one of the best-known coordinate systems - the Cartesian coordinate system -does. The "zero" line is called the <b>X axis</b>, and the "away from zero" line is called the <b>Y axis</b>.<br /> <br /><h2>
Linear and Affine Transformations
</h2><h2>
Color as a Vector Space
</h2>
</div>codekaizenMon, 02 Jul 2007 17:45:50 GMTUPDATED WIKI: Linear algebra for computer graphics 20070702054550PUPDATED WIKI: Linear algebra for computer graphicshttp://www.codeplex.com/NPack/Wiki/View.aspx?title=Linear algebra for computer graphics&version=1<div class="wikidoc">
<h1>
Linear Algebra for Computer Graphics
</h1>Both 2D and 3D computer graphics can be represented using the same concepts on which linear algebra is established - the vector and the matrix (which are really just different manifiestations of the same phenomenon: ordered tuples of measurement). In both the 2nd and 3rd dimension, there is a natural, concrete geometrical representation of the concepts related to vectors. However, if we treat a vector's representation symbolically, using algebraic definitions, statements and equations, we can manupulate them using a computer quite easily and powerfully. <br /> <br /><h2>
Computer Graphics as a Linear System
</h2><h3>
Vectors and Euclidian Space
</h3>Think of space. You're everyday experiences give you a good understanding of 2- and 3-dimensional space. Things that are in space are at a particular location, and these locations have a particular relationship among them. First, the space in between two objects can be measured. Second, you can say that one object is located at a particular angle away from the other relative to some third object, or some fixed position in space.<br /> <br />If we had a space and a lot of objects in it, we could choose one point and measure all objects from this one point. This would give us a useful system to compare objects - where and how far away they are. We can call this point the <b>origin</b> and then measure away from the origin to find out how far away objects are. In order to know what direction they are in, however, it is useful to define direction in a similar manner as the origin. If we consider the origin as zero, since it has no distance between it and itself, then let's make a "zero" for direction as well. <br /> <br /><h2>
Linear and Affine Transformations
</h2><h2>
Color as a Vector Space
</h2>
</div>codekaizenSun, 01 Jul 2007 20:53:17 GMTUPDATED WIKI: Linear algebra for computer graphics 20070701085317PUPDATED WIKI: Homehttp://www.codeplex.com/NPack/Wiki/View.aspx?title=Home&version=10<div class="wikidoc">
<img src="http://www.codeplex.com/NPack/Project/FileDownload.aspx?DownloadId=14972" alt="NPack.png" /><br /> <br />An implementation of linear algebra numerical structures and methods for the CLR. NPack is unique in that it uses generics for matrix element definitions, and a set of matrix operations via an interface, allowing a CLR-based operations engine as well as the opportunity to use GPGPU-based operation engines. NPack was initially ported from Java Matrix Package (JAMA) by the US National Institute of Standards and Technology (which was a Java reinterpretation of LINPACK).
<br /> <br /><table>
<tr>
<th> Graphics </th><th> Numerical Linear Algebra </th>
</tr><tr>
<td> <a href="http://www.codeplex.com/NPack/Wiki/View.aspx?title=Graphics%20How%20To&referringTitle=Home">Graphics How To</a> </td><td> <a href="http://www.codeplex.com/NPack/Wiki/View.aspx?title=Numerics%20How%20To&referringTitle=Home">Numerics How To</a> </td>
</tr><tr>
<td> <a href="http://www.codeplex.com/NPack/Wiki/View.aspx?title=Graphics%20Examples&referringTitle=Home">Graphics Examples</a> </td><td> <a href="http://www.codeplex.com/NPack/Wiki/View.aspx?title=Numerics%20Examples&referringTitle=Home">Numerics Examples</a> </td>
</tr><tr>
<td> <a href="http://www.codeplex.com/NPack/Wiki/View.aspx?title=Linear%20algebra%20for%20computer%20graphics&referringTitle=Home">Linear algebra for computer graphics</a> <img src="http://www.codeplex.com/NPack/Project/FileDownload.aspx?DownloadId=14997" alt="CodePlexTableSpacing.png" /> </td><td> <img src="http://www.codeplex.com/NPack/Project/FileDownload.aspx?DownloadId=14997" alt="CodePlexTableSpacing.png" /> </td>
</tr>
</table> <br /><h1>
FAQ
</h1><ul>
<li><a href="http://www.codeplex.com/NPack/Wiki/View.aspx?title=Why%20NPack%3f&referringTitle=Home">Why NPack?</a></li><li><a href="http://www.codeplex.com/NPack/Wiki/View.aspx?title=What%20are%20the%20Alternatives%3f&referringTitle=Home">What are the Alternatives?</a></li>
</ul>
</div>codekaizenSun, 01 Jul 2007 19:33:33 GMTUPDATED WIKI: Home 20070701073333PUPDATED WIKI: Homehttp://www.codeplex.com/NPack/Wiki/View.aspx?title=Home&version=9<div class="wikidoc">
<img src="http://www.codeplex.com/NPack/Project/FileDownload.aspx?DownloadId=14972" alt="NPack.png" /><br /> <br />An implementation of linear algebra numerical structures and methods for the CLR. NPack is unique in that it uses generics for matrix element definitions, and a set of matrix operations via an interface, allowing a CLR-based operations engine as well as the opportunity to use GPGPU-based operation engines. NPack was initially ported from Java Matrix Package (JAMA) by the US National Institute of Standards and Technology (which was a Java reinterpretation of LINPACK).
<br /> <br /><table>
<tr>
<th> Graphics </th><th> Numerical Linear Algebra </th>
</tr><tr>
<td> <a href="http://www.codeplex.com/NPack/Wiki/View.aspx?title=Graphics%20How%20To&referringTitle=Home">Graphics How To</a> </td><td> <a href="http://www.codeplex.com/NPack/Wiki/View.aspx?title=Numerics%20How%20To&referringTitle=Home">Numerics How To</a> </td>
</tr><tr>
<td> <a href="http://www.codeplex.com/NPack/Wiki/View.aspx?title=Graphics%20Examples&referringTitle=Home">Graphics Examples</a> <img src="http://www.codeplex.com/NPack/Project/FileDownload.aspx?DownloadId=14997" alt="CodePlexTableSpacing.png" /> </td><td> <a href="http://www.codeplex.com/NPack/Wiki/View.aspx?title=Numerics%20Examples&referringTitle=Home">Numerics Examples</a> <img src="http://www.codeplex.com/NPack/Project/FileDownload.aspx?DownloadId=14997" alt="CodePlexTableSpacing.png" /> </td>
</tr>
</table> <br /><h1>
FAQ
</h1><ul>
<li><a href="http://www.codeplex.com/NPack/Wiki/View.aspx?title=Why%20NPack%3f&referringTitle=Home">Why NPack?</a></li><li><a href="http://www.codeplex.com/NPack/Wiki/View.aspx?title=What%20are%20the%20Alternatives%3f&referringTitle=Home">What are the Alternatives?</a></li>
</ul>
</div>codekaizenSun, 01 Jul 2007 17:09:05 GMTUPDATED WIKI: Home 20070701050905PUPDATED WIKI: Homehttp://www.codeplex.com/NPack/Wiki/View.aspx?title=Home&version=8<div class="wikidoc">
<img src="http://www.codeplex.com/NPack/Project/FileDownload.aspx?DownloadId=14972" alt="NPack.png" /><br /> <br />An implementation of linear algebra numerical structures and methods for the CLR. NPack is unique in that it uses generics for matrix element definitions, and a set of matrix operations via an interface, allowing a CLR-based operations engine as well as the opportunity to use GPGPU-based operation engines. NPack was initially ported from Java Matrix Package (JAMA) by the US National Institute of Standards and Technology (which was a Java reinterpretation of LINPACK).
<br /> <br /><table>
<tr>
<th> Graphics </th><th> Numerical Linear Algebra </th>
</tr><tr>
<td> <a href="http://www.codeplex.com/NPack/Wiki/View.aspx?title=Graphics%20How%20To&referringTitle=Home">Graphics How To</a> </td><td> <a href="http://www.codeplex.com/NPack/Wiki/View.aspx?title=Numerics%20How%20To&referringTitle=Home">Numerics How To</a> </td>
</tr><tr>
<td> <a href="http://www.codeplex.com/NPack/Wiki/View.aspx?title=Graphics%20Examples&referringTitle=Home">Graphics Examples</a> </td><td> <a href="http://www.codeplex.com/NPack/Wiki/View.aspx?title=Numerics%20Examples&referringTitle=Home">Numerics Examples</a> </td>
</tr>
</table> <br /><h1>
FAQ
</h1><ul>
<li><a href="http://www.codeplex.com/NPack/Wiki/View.aspx?title=Why%20NPack%3f&referringTitle=Home">Why NPack?</a></li><li><a href="http://www.codeplex.com/NPack/Wiki/View.aspx?title=What%20are%20the%20Alternatives%3f&referringTitle=Home">What are the Alternatives?</a></li>
</ul>
</div>codekaizenSun, 01 Jul 2007 16:08:39 GMTUPDATED WIKI: Home 20070701040839PUPDATED WIKI: Homehttp://www.codeplex.com/NPack/Wiki/View.aspx?title=Home&version=7<div class="wikidoc">
<img src="http://www.codeplex.com/NPack/Project/FileDownload.aspx?DownloadId=14972" alt="NPack.png" /><br /> <br />An implementation of linear algebra numerical structures and methods for the CLR. NPack is unique in that it uses generics for matrix element definitions, and a set of matrix operations via an interface, allowing a CLR-based operations engine as well as the opportunity to use GPGPU-based operation engines. NPack was initially ported from Java Matrix Package (JAMA) by the US National Institute of Standards and Technology (which was a Java reinterpretation of LINPACK).
<br /> <br />|| Graphics || Numerical Linear Algebra || <br /><table>
<tr>
<td> <a href="http://www.codeplex.com/NPack/Wiki/View.aspx?title=Graphics%20How%20To&referringTitle=Home">Graphics How To</a> </td><td> <a href="http://www.codeplex.com/NPack/Wiki/View.aspx?title=Numerics%20How%20To&referringTitle=Home">Numerics How To</a> </td>
</tr><tr>
<td> <a href="http://www.codeplex.com/NPack/Wiki/View.aspx?title=Graphics%20Examples&referringTitle=Home">Graphics Examples</a> </td><td> <a href="http://www.codeplex.com/NPack/Wiki/View.aspx?title=Numerics%20Examples&referringTitle=Home">Numerics Examples</a> </td>
</tr>
</table> <br /><h1>
FAQ
</h1><ul>
<li><a href="http://www.codeplex.com/NPack/Wiki/View.aspx?title=Why%20NPack%3f&referringTitle=Home">Why NPack?</a></li><li><a href="http://www.codeplex.com/NPack/Wiki/View.aspx?title=What%20are%20the%20Alternatives%3f&referringTitle=Home">What are the Alternatives?</a></li>
</ul>
</div>codekaizenSun, 01 Jul 2007 16:07:07 GMTUPDATED WIKI: Home 20070701040707PUPDATED WIKI: Homehttp://www.codeplex.com/NPack/Wiki/View.aspx?title=Home&version=6<div class="wikidoc">
<img src="http://www.codeplex.com/NPack/Project/FileDownload.aspx?DownloadId=14972" alt="NPack.png" /><br /> <br />An implementation of linear algebra numerical structures and methods for the CLR. NPack is unique in that it uses generics for matrix element definitions, and a set of matrix operations via an interface, allowing a CLR-based operations engine as well as the opportunity to use GPGPU-based operation engines. NPack was initially ported from Java Matrix Package (JAMA) by the US National Institute of Standards and Technology (which was a Java reinterpretation of LINPACK).
<br /> <br /><h1>
FAQ
</h1><ul>
<li><a href="http://www.codeplex.com/NPack/Wiki/View.aspx?title=Why%20NPack%3f&referringTitle=Home">Why NPack?</a></li><li><a href="http://www.codeplex.com/NPack/Wiki/View.aspx?title=What%20are%20the%20Alternatives%3f&referringTitle=Home">What are the Alternatives?</a></li>
</ul>
</div>codekaizenSat, 30 Jun 2007 19:43:42 GMTUPDATED WIKI: Home 20070630074342PUPDATED WIKI: Homehttp://www.codeplex.com/NPack/Wiki/View.aspx?title=Home&version=5<div class="wikidoc">
<b>Project Description</b><br />An implementation of linear algebra numerical structures and methods for the CLR. NPack is unique in that it uses generics for matrix element definitions, and a set of matrix operations via an interface, allowing a CLR-based operations engine as well as the opportunity to use GPGPU-based operation engines. NPack was initially ported from Java Matrix Package (JAMA) by the US National Institute of Standards and Technology (which was a Java reinterpretation of LINPACK).
<br /> <br /><img src="http://www.codeplex.com/NPack/Project/FileDownload.aspx?DownloadId=14971" alt="NPack.png" /><br /> <br /><h1>
FAQ
</h1><ul>
<li><a href="http://www.codeplex.com/NPack/Wiki/View.aspx?title=Why%20NPack%3f&referringTitle=Home">Why NPack?</a></li><li><a href="http://www.codeplex.com/NPack/Wiki/View.aspx?title=What%20are%20the%20Alternatives%3f&referringTitle=Home">What are the Alternatives?</a></li>
</ul>
</div>codekaizenSat, 30 Jun 2007 19:21:41 GMTUPDATED WIKI: Home 20070630072141PUPDATED WIKI: What are the Alternatives?http://www.codeplex.com/NPack/Wiki/View.aspx?title=What are the Alternatives?&version=3<div class="wikidoc">
<h1>
What are the Alternatives?
</h1><ul>
<li><a href="http://www.centerspace.net/products.php" class="externalLink">CenterSpace Software's excellent NMath library<span class="externalLinkIcon"></span></a> is probably the first one to look at. While an excellent product, it's not free, making inclusion in an open source project impossible.</li>
</ul> <br /><ul>
<li>There used to be <a href="http://www.jens-thiel.de/archive/dotnum.html" class="externalLink">dotNum by Jens Theil<span class="externalLinkIcon"></span></a>, but the <a href="http://sourceforge.net/projects/dotnum" class="externalLink">SourceForge page for that project is dead<span class="externalLinkIcon"></span></a>.</li>
</ul> <br /><ul>
<li><a href="http://www.cdrnet.net/projects/nmath/" class="externalLink">Math.Net<span class="externalLinkIcon"></span></a> is free and open source, but it is geared more towards signal processing and computer algebra, making the whole package bigger than needed for linear algebra. The linear algebra portion looks like a port of JAMA, as well. It doesn't use generics, support affine transforms, or allow solver engines outside of it's codebase.</li>
</ul> <br /><ul>
<li><a href="http://www.codeplex.com/Wiki/View.aspx?ProjectName=Sharp3D" class="externalLink">Sharp3D.Math<span class="externalLinkIcon"></span></a> is free and open source, but it doesn't provide linear decomposition algorithms for efficient representation and conditioning of multiply composed affine transforms.</li>
</ul> <br /><ul>
<li><a href="http://www.aisto.com/roeder/dotnet/" class="externalLink">MaPack<span class="externalLinkIcon"></span></a> is another port of JAMA to .Net. It is very similar to the linear algebra parts of Math.Net.</li>
</ul> <br /><ul>
<li><a href="http://www.codeproject.com/csharp/PsDotNetMatrix.asp" class="externalLink">DotNetMatrix<span class="externalLinkIcon"></span></a> is yet another port of JAMA. It looks like it has not been developed into an ongoing project.</li>
</ul>
</div>codekaizenThu, 28 Jun 2007 07:01:59 GMTUPDATED WIKI: What are the Alternatives? 20070628070159AUPDATED WIKI: What are the Alternatives?http://www.codeplex.com/NPack/Wiki/View.aspx?title=What are the Alternatives?&version=2<div class="wikidoc">
<h1>
What are the Alternatives?
</h1><ul>
<li><a href="http://www.centerspace.net/products.php" class="externalLink">CenterSpace Software's excellent NMath library<span class="externalLinkIcon"></span></a> is probably the first one to look at. While an excellent product, it's not free, making inclusion in an open source project impossible.</li>
</ul> <br /><ul>
<li>There used to be <a href="http://www.jens-thiel.de/archive/dotnum.html" class="externalLink">dotNum by Jens Theil<span class="externalLinkIcon"></span></a>, but the <a href="http://sourceforge.net/projects/dotnum" class="externalLink">SourceForge page for that project is dead<span class="externalLinkIcon"></span></a>.</li>
</ul> <br /><ul>
<li><a href="http://www.cdrnet.net/projects/nmath/" class="externalLink">Math.Net<span class="externalLinkIcon"></span></a> is free and open source, but it is geared more towards signal processing and computer algebra, making the whole package bigger than needed for linear algebra. The linear algebra portion looks like a port of JAMA, as well. It doesn't use generics, support affine transforms, or allow solver engines outside of it's codebase.</li>
</ul> <br /><ul>
<li><a href="http://www.codeplex.com/Wiki/View.aspx?ProjectName=Sharp3D" class="externalLink">Sharp3D.Math<span class="externalLinkIcon"></span></a> is free and open source, but it doesn't provide linear decomposition algorithms for efficient representation and conditioning of multiply composed affine transforms.</li>
</ul> <br /><ul>
<li><a href="http://www.aisto.com/roeder/dotnet/" class="externalLink">MaPack<span class="externalLinkIcon"></span></a> is another port of JAMA to .Net. It is very similar to the linear algebra parts of Math.Net.</li>
</ul>
</div>codekaizenThu, 28 Jun 2007 06:59:11 GMTUPDATED WIKI: What are the Alternatives? 20070628065911AUPDATED WIKI: What are the Alternatives?http://www.codeplex.com/NPack/Wiki/View.aspx?title=What are the Alternatives?&version=1<div class="wikidoc">
<h1>
What are the Alternatives?
</h1><ul>
<li><a href="http://www.centerspace.net/products.php" class="externalLink">CenterSpace Software's excellent NMath library<span class="externalLinkIcon"></span></a> is probably the first one to look at. While an excellent product, it's not free, making inclusion in an open source project impossible.</li>
</ul> <br /><ul>
<li>There used to be <a href="http://www.jens-thiel.de/archive/dotnum.html" class="externalLink">dotNum by Jens Theil<span class="externalLinkIcon"></span></a>, but the <a href="http://sourceforge.net/projects/dotnum" class="externalLink">SourceForge page for that project is dead<span class="externalLinkIcon"></span></a>.</li>
</ul> <br /><ul>
<li><a href="http://www.cdrnet.net/projects/nmath/" class="externalLink">Math.Net<span class="externalLinkIcon"></span></a> is free and open source, but it is geared more towards signal processing and computer algebra, making the whole package bigger than needed for linear algebra. The linear algebra portion looks like a port of JAMA, as well. It doesn't use generics, support affine transforms, or allow solver engines outside of it's codebase.</li>
</ul> <br /><ul>
<li><a href="http://www.aisto.com/roeder/dotnet/" class="externalLink">MaPack<span class="externalLinkIcon"></span></a> is another port of JAMA to .Net. It is very similar to the linear algebra parts of Math.Net.</li>
</ul>
</div>codekaizenThu, 28 Jun 2007 01:09:39 GMTUPDATED WIKI: What are the Alternatives? 20070628010939A