Mercurial > hg > de.mpg.mpiwg.itgroup.digilib.core
diff libs/commons-math-2.1/docs/userguide/geometry.html @ 10:5f2c5fb36e93
commons-math-2.1 added
author | dwinter |
---|---|
date | Tue, 04 Jan 2011 10:00:53 +0100 |
parents | |
children |
line wrap: on
line diff
--- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/libs/commons-math-2.1/docs/userguide/geometry.html Tue Jan 04 10:00:53 2011 +0100 @@ -0,0 +1,282 @@ +<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd"> + + + + + + + + + + + +<html xmlns="http://www.w3.org/1999/xhtml"> + <head> + <title>Math - The Commons Math User Guide - Geometry</title> + <style type="text/css" media="all"> + @import url("../css/maven-base.css"); + @import url("../css/maven-theme.css"); + @import url("../css/site.css"); + </style> + <link rel="stylesheet" href="../css/print.css" type="text/css" media="print" /> + <meta http-equiv="Content-Type" content="text/html; charset=ISO-8859-1" /> + </head> + <body class="composite"> + <div id="banner"> + <span id="bannerLeft"> + + Commons Math User Guide + + </span> + <div class="clear"> + <hr/> + </div> + </div> + <div id="breadcrumbs"> + + + + + + + + + <div class="xright"> + + + + + + + + </div> + <div class="clear"> + <hr/> + </div> + </div> + <div id="leftColumn"> + <div id="navcolumn"> + + + + + + + + + <h5>User Guide</h5> + <ul> + + <li class="none"> + <a href="../userguide/index.html">Contents</a> + </li> + + <li class="none"> + <a href="../userguide/overview.html">Overview</a> + </li> + + <li class="none"> + <a href="../userguide/stat.html">Statistics</a> + </li> + + <li class="none"> + <a href="../userguide/random.html">Data Generation</a> + </li> + + <li class="none"> + <a href="../userguide/linear.html">Linear Algebra</a> + </li> + + <li class="none"> + <a href="../userguide/analysis.html">Numerical Analysis</a> + </li> + + <li class="none"> + <a href="../userguide/special.html">Special Functions</a> + </li> + + <li class="none"> + <a href="../userguide/utilities.html">Utilities</a> + </li> + + <li class="none"> + <a href="../userguide/complex.html">Complex Numbers</a> + </li> + + <li class="none"> + <a href="../userguide/distribution.html">Distributions</a> + </li> + + <li class="none"> + <a href="../userguide/fraction.html">Fractions</a> + </li> + + <li class="none"> + <a href="../userguide/transform.html">Transform Methods</a> + </li> + + <li class="none"> + <strong>3D Geometry</strong> + </li> + + <li class="none"> + <a href="../userguide/optimization.html">Optimization</a> + </li> + + <li class="none"> + <a href="../userguide/ode.html">Ordinary Differential Equations</a> + </li> + + <li class="none"> + <a href="../userguide/genetics.html">Genetic Algorithms</a> + </li> + </ul> + <a href="http://maven.apache.org/" title="Built by Maven" class="poweredBy"> + <img alt="Built by Maven" src="../images/logos/maven-feather.png"></img> + </a> + + + + + + + + + </div> + </div> + <div id="bodyColumn"> + <div id="contentBox"> + <div class="section"><h2><a name="a11_Geometry"></a>11 Geometry</h2> +<div class="section"><h3><a name="a11.1_Overview"></a>11.1 Overview</h3> +<p> + The geometry package provides classes useful for many physical simulations + in the real 3D space, namely vectors and rotations. + </p> +</div> +<div class="section"><h3><a name="a11.2_Vectors"></a>11.2 Vectors</h3> +<p><a href="../apidocs/org/apache/commons/math/geometry/Vector3D.html"> + org.apache.commons.math.geometry.Vector3D</a> provides a simple vector + type. One important feature is that instances of this class are guaranteed + to be immutable, this greatly simplifies modelling dynamical systems + with changing states: once a vector has been computed, a reference to it + is known to preserve its state as long as the reference itself is preserved. + </p> +<p> + Numerous constructors are available to create vectors. In addition to the + straightforward cartesian coordinates constructor, a constructor using + azimuthal coordinates can build normalized vectors and linear constructors + from one, two, three or four base vectors are also available. Constants have + been defined for the most commons vectors (plus and minus canonical axes, + null vector, and special vectors with infinite or NaN coordinates). + </p> +<p> + The generic vectorial space operations are available including dot product, + normalization, orthogonal vector finding and angular separation computation + which have a specific meaning in 3D. The 3D geometry specific cross product + is of course also implemented. + </p> +<p><a href="../apidocs/org/apache/commons/math/geometry/Vector3DFormat.html"> + org.apache.commons.math.geometry.Vector3DFormat</a> is a specialized format + for formatting output or parsing input with text representation of 3D vectors. + </p> +</div> +<div class="section"><h3><a name="a11.3_Rotations"></a>11.3 Rotations</h3> +<p><a href="../apidocs/org/apache/commons/math/geometry/Rotation.html"> + org.apache.commons.math.geometry.Rotation</a> represents 3D rotations. + Rotation instances are also immutable objects, as Vector3D instances. + </p> +<p> + Rotations can be represented by several different mathematical + entities (matrices, axe and angle, Cardan or Euler angles, + quaternions). This class presents a higher level abstraction, more + user-oriented and hiding implementation details. Well, for the + curious, we use quaternions for the internal representation. The user + can build a rotation from any of these representations, and any of + these representations can be retrieved from a <code>Rotation</code> + instance (see the various constructors and getters). In addition, a + rotation can also be built implicitely from a set of vectors and their + image. + </p> +<p> + This implies that this class can be used to convert from one + representation to another one. For example, converting a rotation + matrix into a set of Cardan angles can be done using the + following single line of code: + </p> +<div class="source"><pre>double[] angles = new Rotation(matrix, 1.0e-10).getAngles(RotationOrder.XYZ);</pre> +</div> +<p> + Focus is oriented on what a rotation <em>does</em> rather than on its + underlying representation. Once it has been built, and regardless of + its internal representation, a rotation is an <em>operator</em> which + basically transforms three dimensional vectors into other three + dimensional vectors. Depending on the application, the meaning of + these vectors may vary as well as the semantics of the rotation. + </p> +<p> + For example in a spacecraft attitude simulation tool, users will + often consider the vectors are fixed (say the Earth direction for + example) and the rotation transforms the coordinates coordinates of + this vector in inertial frame into the coordinates of the same vector + in satellite frame. In this case, the rotation implicitly defines the + relation between the two frames (we have fixed vectors and moving frame). + Another example could be a telescope control application, where the + rotation would transform the sighting direction at rest into the desired + observing direction when the telescope is pointed towards an object of + interest. In this case the rotation transforms the direction at rest in + a topocentric frame into the sighting direction in the same topocentric + frame (we have moving vectors in fixed frame). In many case, both + approaches will be combined, in our telescope example, we will probably + also need to transform the observing direction in the topocentric frame + into the observing direction in inertial frame taking into account the + observatory location and the Earth rotation. + </p> +<p> + These examples show that a rotation means what the user wants it to + mean, so this class does not push the user towards one specific + definition and hence does not provide methods like + <code>projectVectorIntoDestinationFrame</code> or + <code>computeTransformedDirection</code>. It provides simpler and more + generic methods: <code>applyTo(Vector3D)</code> and + <code>applyInverseTo(Vector3D)</code>. + </p> +<p> + Since a rotation is basically a vectorial operator, several + rotations can be composed together and the composite operation + <code>r = r<sub>1</sub> o r<sub>2</sub></code> (which means that for each + vector <code>u</code>, <code>r(u) = r<sub>1</sub>(r<sub>2</sub>(u))</code>) + is also a rotation. Hence we can consider that in addition to vectors, a + rotation can be applied to other rotations as well (or to itself). With our + previous notations, we would say we can apply <code>r<sub>1</sub></code> to + <code>r<sub>2</sub></code> and the result we get is <code>r = + r<sub>1</sub> o r<sub>2</sub></code>. For this purpose, the class + provides the methods: <code>applyTo(Rotation)</code> and + <code>applyInverseTo(Rotation)</code>. + </p> +</div> +</div> + + </div> + </div> + <div class="clear"> + <hr/> + </div> + <div id="footer"> + <div class="xright">© + 2003-2010 + + + + + + + + + + </div> + <div class="clear"> + <hr/> + </div> + </div> + </body> +</html>