blob: 957121d7b83ea3cdf714bf70e3da290131354a55 [file] [log] [blame]
<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd">
<!-- NewPage -->
<html lang="en">
<head>
<!-- Generated by javadoc (1.8.0_92) on Wed Jul 13 13:04:20 CEST 2016 -->
<meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
<title>org.apache.sis.referencing.operation.matrix (Apache SIS 0.7 API)</title>
<meta name="date" content="2016-07-13">
<meta name="keywords" content="org.apache.sis.referencing.operation.matrix package">
<link rel="stylesheet" type="text/css" href="../../../../../../stylesheet.css" title="Style">
<script type="text/javascript" src="../../../../../../script.js"></script>
</head>
<body>
<script type="text/javascript"><!--
try {
if (location.href.indexOf('is-external=true') == -1) {
parent.document.title="org.apache.sis.referencing.operation.matrix (Apache SIS 0.7 API)";
}
}
catch(err) {
}
//-->
</script>
<noscript>
<div>JavaScript is disabled on your browser.</div>
</noscript>
<!-- ========= START OF TOP NAVBAR ======= -->
<div class="topNav"><a name="navbar.top">
<!-- -->
</a>
<div class="skipNav"><a href="#skip.navbar.top" title="Skip navigation links">Skip navigation links</a></div>
<a name="navbar.top.firstrow">
<!-- -->
</a>
<ul class="navList" title="Navigation">
<li><a href="../../../../../../overview-summary.html">Overview</a></li>
<li class="navBarCell1Rev">Package</li>
<li>Class</li>
<li><a href="package-use.html">Use</a></li>
<li><a href="package-tree.html">Tree</a></li>
<li><a href="../../../../../../deprecated-list.html">Deprecated</a></li>
<li><a href="../../../../../../index-all.html">Index</a></li>
<li><a href="../../../../../../help-doc.html">Help</a></li>
</ul>
</div>
<div class="subNav">
<ul class="navList">
<li><a href="../../../../../../org/apache/sis/referencing/operation/builder/package-summary.html">Prev&nbsp;Package</a></li>
<li><a href="../../../../../../org/apache/sis/referencing/operation/projection/package-summary.html">Next&nbsp;Package</a></li>
</ul>
<ul class="navList">
<li><a href="../../../../../../index.html?org/apache/sis/referencing/operation/matrix/package-summary.html" target="_top">Frames</a></li>
<li><a href="package-summary.html" target="_top">No&nbsp;Frames</a></li>
</ul>
<ul class="navList" id="allclasses_navbar_top">
<li><a href="../../../../../../allclasses-noframe.html">All&nbsp;Classes</a></li>
</ul>
<div>
<script type="text/javascript"><!--
allClassesLink = document.getElementById("allclasses_navbar_top");
if(window==top) {
allClassesLink.style.display = "block";
}
else {
allClassesLink.style.display = "none";
}
//-->
</script>
</div>
<a name="skip.navbar.top">
<!-- -->
</a></div>
<!-- ========= END OF TOP NAVBAR ========= -->
<div class="header">
<h1 title="Package" class="title">Package&nbsp;org.apache.sis.referencing.operation.matrix</h1>
<div class="docSummary">
<div class="block">Matrix implementations for spatio-temporal referencing.</div>
</div>
<p>See:&nbsp;<a href="#package.description">Description</a></p>
</div>
<div class="contentContainer">
<ul class="blockList">
<li class="blockList">
<table class="typeSummary" border="0" cellpadding="3" cellspacing="0" summary="Class Summary table, listing classes, and an explanation">
<caption><span>Class Summary</span><span class="tabEnd">&nbsp;</span></caption>
<tr>
<th class="colFirst" scope="col">Class</th>
<th class="colLast" scope="col">Description</th>
</tr>
<tbody>
<tr class="altColor">
<td class="colFirst"><a href="../../../../../../org/apache/sis/referencing/operation/matrix/AffineTransforms2D.html" title="class in org.apache.sis.referencing.operation.matrix">AffineTransforms2D</a></td>
<td class="colLast">
<div class="block">Bridge between <a href="http://www.geoapi.org/3.0/javadoc/org/opengis/referencing/operation/Matrix.html?is-external=true" title="class or interface in org.opengis.referencing.operation"><code>Matrix</code></a> and Java2D <a href="http://docs.oracle.com/javase/6/docs/api/java/awt/geom/AffineTransform.html?is-external=true" title="class or interface in java.awt.geom"><code>Affine­Transform</code></a> instances.</div>
</td>
</tr>
<tr class="rowColor">
<td class="colFirst"><a href="../../../../../../org/apache/sis/referencing/operation/matrix/Matrices.html" title="class in org.apache.sis.referencing.operation.matrix">Matrices</a></td>
<td class="colLast">
<div class="block"><a href="http://www.geoapi.org/3.0/javadoc/org/opengis/referencing/operation/Matrix.html?is-external=true" title="class or interface in org.opengis.referencing.operation"><code>Matrix</code></a> factory methods and utilities.</div>
</td>
</tr>
<tr class="altColor">
<td class="colFirst"><a href="../../../../../../org/apache/sis/referencing/operation/matrix/Matrix1.html" title="class in org.apache.sis.referencing.operation.matrix">Matrix1</a></td>
<td class="colLast">
<div class="block">A matrix of fixed <a href="../../../../../../org/apache/sis/referencing/operation/matrix/Matrix1.html#SIZE">1</a>×<a href="../../../../../../org/apache/sis/referencing/operation/matrix/Matrix1.html#SIZE">1</a> size,
typically resulting from <a href="http://www.geoapi.org/3.0/javadoc/org/opengis/referencing/operation/MathTransform1D.html?is-external=true" title="class or interface in org.opengis.referencing.operation"><code>Math­Transform1D</code></a> derivative computation.</div>
</td>
</tr>
<tr class="rowColor">
<td class="colFirst"><a href="../../../../../../org/apache/sis/referencing/operation/matrix/Matrix2.html" title="class in org.apache.sis.referencing.operation.matrix">Matrix2</a></td>
<td class="colLast">
<div class="block">A matrix of fixed <a href="../../../../../../org/apache/sis/referencing/operation/matrix/Matrix2.html#SIZE">2</a>×<a href="../../../../../../org/apache/sis/referencing/operation/matrix/Matrix2.html#SIZE">2</a> size,
typically resulting from <a href="http://www.geoapi.org/3.0/javadoc/org/opengis/referencing/operation/MathTransform2D.html?is-external=true" title="class or interface in org.opengis.referencing.operation"><code>Math­Transform2D</code></a> derivative computation.</div>
</td>
</tr>
<tr class="altColor">
<td class="colFirst"><a href="../../../../../../org/apache/sis/referencing/operation/matrix/Matrix3.html" title="class in org.apache.sis.referencing.operation.matrix">Matrix3</a></td>
<td class="colLast">
<div class="block">A matrix of fixed <a href="../../../../../../org/apache/sis/referencing/operation/matrix/Matrix3.html#SIZE">3</a>×<a href="../../../../../../org/apache/sis/referencing/operation/matrix/Matrix3.html#SIZE">3</a> size.</div>
</td>
</tr>
<tr class="rowColor">
<td class="colFirst"><a href="../../../../../../org/apache/sis/referencing/operation/matrix/Matrix4.html" title="class in org.apache.sis.referencing.operation.matrix">Matrix4</a></td>
<td class="colLast">
<div class="block">A matrix of fixed <a href="../../../../../../org/apache/sis/referencing/operation/matrix/Matrix4.html#SIZE">4</a>×<a href="../../../../../../org/apache/sis/referencing/operation/matrix/Matrix4.html#SIZE">4</a> size, often used in datum shifts.</div>
</td>
</tr>
<tr class="altColor">
<td class="colFirst"><a href="../../../../../../org/apache/sis/referencing/operation/matrix/MatrixSIS.html" title="class in org.apache.sis.referencing.operation.matrix">MatrixSIS</a></td>
<td class="colLast">
<div class="block">A <a href="http://www.geoapi.org/3.0/javadoc/org/opengis/referencing/operation/Matrix.html?is-external=true" title="class or interface in org.opengis.referencing.operation"><code>Matrix</code></a> able to perform some operations of interest to Spatial Information Systems (SIS).</div>
</td>
</tr>
</tbody>
</table>
</li>
<li class="blockList">
<table class="typeSummary" border="0" cellpadding="3" cellspacing="0" summary="Exception Summary table, listing exceptions, and an explanation">
<caption><span>Exception Summary</span><span class="tabEnd">&nbsp;</span></caption>
<tr>
<th class="colFirst" scope="col">Exception</th>
<th class="colLast" scope="col">Description</th>
</tr>
<tbody>
<tr class="altColor">
<td class="colFirst"><a href="../../../../../../org/apache/sis/referencing/operation/matrix/MismatchedMatrixSizeException.html" title="class in org.apache.sis.referencing.operation.matrix">MismatchedMatrixSizeException</a></td>
<td class="colLast">
<div class="block">Thrown when two matrices can not be added or multiplied because the sizes do not match.</div>
</td>
</tr>
<tr class="rowColor">
<td class="colFirst"><a href="../../../../../../org/apache/sis/referencing/operation/matrix/NoninvertibleMatrixException.html" title="class in org.apache.sis.referencing.operation.matrix">NoninvertibleMatrixException</a></td>
<td class="colLast">
<div class="block">Thrown when a matrix can not be inverted.</div>
</td>
</tr>
</tbody>
</table>
</li>
</ul>
<a name="package.description">
<!-- -->
</a>
<h2 title="Package org.apache.sis.referencing.operation.matrix Description">Package org.apache.sis.referencing.operation.matrix Description</h2>
<div class="block">Matrix implementations for spatio-temporal referencing.
Matrices can be of arbitrary size, but the most common ones in the context of geospatial coordinate operations
are not greater than 5×5 (number of spatio-temporal dimensions + 1).
This package differs from other matrix packages by:
<ul>
<li>The class specializations for such small matrices.</li>
<li>Methods specific to coordinate systems support like
<a href="../../../../../../org/apache/sis/referencing/operation/matrix/Matrices.html#createTransform-org.opengis.geometry.Envelope-org.opengis.referencing.cs.AxisDirection:A-org.opengis.geometry.Envelope-org.opengis.referencing.cs.AxisDirection:A-"><code>Matrices​.create­Transform(…)</code></a>.</li>
<li>Matrix inversions tolerant to <a href="http://docs.oracle.com/javase/6/docs/api/java/lang/Double.html?is-external=true#NaN" title="class or interface in java.lang"><code>Na­N</code></a> values and non-square matrix in some situations.</li>
</ul>
<p>This package provides public implementations of small square matrices, with size ranging from 1×1 to 4×4.
Those implementations are made public because in many cases, the user know that (s)he is working with (for
example) three-dimensional Coordinate Reference Systems (CRS). If the number of CRS dimensions is fixed to 3,
then <cite>affine transforms</cite> between those CRS can be represented by 4×4 matrices,
and the <cite>derivatives</cite> of those transforms can be represented by 3×3 matrices.
Since the user know the matrices size, (s)he can use the specific implementation and read or write
directly the <var>m</var><sub><var>row</var> <var>column</var></sub> field.</p>
<p><b>Example:</b> in the two dimensional case, an affine transform from a map projection (units in metres)
to the screen (units in pixels) can be performed by the following matrix multiplication:</p>
<center>
<img src="doc-files/AffineTransform.png" alt="Matrix representation of an affine transform">
</center>
<div class="section">Extended floating point precision</div>
This package uses extended floating point precision for most arithmetic operations like matrix multiplications and
inversions. SIS needs extended precision because <cite>affine transforms</cite> concatenations like conversion from
degrees to radians, followed by some operations, followed by conversion back from radians to degrees, are very frequent.
Without extended precision, we often obtain values like 0.99999… where we would expect an identity transform.
The usual workaround - namely comparing the floating point values with a small <var>epsilon</var> tolerance value -
is dangerous in this particular case because <cite>datum shifts</cite>, when expressed as a matrix from their
<a href="../../../../../../org/apache/sis/referencing/datum/BursaWolfParameters.html" title="class in org.apache.sis.referencing.datum">Bursa-Wolf parameters</a>, are very close to the
identity transform.
<p>The current implementation uses
<a href="http://en.wikipedia.org/wiki/Double-double_%28arithmetic%29#Double-double_arithmetic">double-double
arithmetic</a>. However this may change in any future SIS version.</p>
<div class="section">Related projects</div>
This package is <strong>not</strong> designed for large matrices, and is rooted in
<code>org​.apache​.sis​.referencing</code> for making clearer that this is not a general-purpose library.
For computational intensive calculations, better guarantees on numerical stability, sparse matrices support
and more, consider using an dedicated library like <a href="http://mikiobraun.github.io/jblas">jblas</a> instead.
<p>The <a href="http://java.net/projects/vecmath">Vecmath</a> library shares similar goals than <code>Matrix­SIS</code>.
Like SIS, Vecmath is optimized for small matrices of interest for 2D and 3D graphics.</p></div>
<dl>
<dt><span class="simpleTagLabel">Since:</span></dt>
<dd>0.4</dd>
<p><font size="-1">Defined in the <code>sis-referencing</code> module</font></p>
</dl>
</div>
<!-- ======= START OF BOTTOM NAVBAR ====== -->
<div class="bottomNav"><a name="navbar.bottom">
<!-- -->
</a>
<div class="skipNav"><a href="#skip.navbar.bottom" title="Skip navigation links">Skip navigation links</a></div>
<a name="navbar.bottom.firstrow">
<!-- -->
</a>
<ul class="navList" title="Navigation">
<li><a href="../../../../../../overview-summary.html">Overview</a></li>
<li class="navBarCell1Rev">Package</li>
<li>Class</li>
<li><a href="package-use.html">Use</a></li>
<li><a href="package-tree.html">Tree</a></li>
<li><a href="../../../../../../deprecated-list.html">Deprecated</a></li>
<li><a href="../../../../../../index-all.html">Index</a></li>
<li><a href="../../../../../../help-doc.html">Help</a></li>
</ul>
</div>
<div class="subNav">
<ul class="navList">
<li><a href="../../../../../../org/apache/sis/referencing/operation/builder/package-summary.html">Prev&nbsp;Package</a></li>
<li><a href="../../../../../../org/apache/sis/referencing/operation/projection/package-summary.html">Next&nbsp;Package</a></li>
</ul>
<ul class="navList">
<li><a href="../../../../../../index.html?org/apache/sis/referencing/operation/matrix/package-summary.html" target="_top">Frames</a></li>
<li><a href="package-summary.html" target="_top">No&nbsp;Frames</a></li>
</ul>
<ul class="navList" id="allclasses_navbar_bottom">
<li><a href="../../../../../../allclasses-noframe.html">All&nbsp;Classes</a></li>
</ul>
<div>
<script type="text/javascript"><!--
allClassesLink = document.getElementById("allclasses_navbar_bottom");
if(window==top) {
allClassesLink.style.display = "block";
}
else {
allClassesLink.style.display = "none";
}
//-->
</script>
</div>
<a name="skip.navbar.bottom">
<!-- -->
</a></div>
<!-- ======== END OF BOTTOM NAVBAR ======= -->
<p class="legalCopy"><small>Copyright &#169; 2010&#x2013;2016 <a href="http://www.apache.org/">The Apache Software Foundation</a>. All rights reserved.</small></p>
</body>
</html>