org.apache.commons.math3.geometry.partitioning.utilities
Class OrderedTuple

java.lang.Object
  extended by org.apache.commons.math3.geometry.partitioning.utilities.OrderedTuple
All Implemented Interfaces:
Comparable<OrderedTuple>

public class OrderedTuple
extends Object
implements Comparable<OrderedTuple>

This class implements an ordering operation for T-uples.

Ordering is done by encoding all components of the T-uple into a single scalar value and using this value as the sorting key. Encoding is performed using the method invented by Georg Cantor in 1877 when he proved it was possible to establish a bijection between a line and a plane. The binary representations of the components of the T-uple are mixed together to form a single scalar. This means that the 2k bit of component 0 is followed by the 2k bit of component 1, then by the 2k bit of component 2 up to the 2k bit of component t, which is followed by the 2k-1 bit of component 0, followed by the 2k-1 bit of component 1 ... The binary representations are extended as needed to handle numbers with different scales and a suitable 2p offset is added to the components in order to avoid negative numbers (this offset is adjusted as needed during the comparison operations).

The more interesting property of the encoding method for our purpose is that it allows to select all the points that are in a given range. This is depicted in dimension 2 by the following picture:

This picture shows a set of 100000 random 2-D pairs having their first component between -50 and +150 and their second component between -350 and +50. We wanted to extract all pairs having their first component between +30 and +70 and their second component between -120 and -30. We built the lower left point at coordinates (30, -120) and the upper right point at coordinates (70, -30). All points smaller than the lower left point are drawn in red and all points larger than the upper right point are drawn in blue. The green points are between the two limits. This picture shows that all the desired points are selected, along with spurious points. In this case, we get 15790 points, 4420 of which really belonging to the desired rectangle. It is possible to extract very small subsets. As an example extracting from the same 100000 points set the points having their first component between +30 and +31 and their second component between -91 and -90, we get a subset of 11 points, 2 of which really belonging to the desired rectangle.

the previous selection technique can be applied in all dimensions, still using two points to define the interval. The first point will have all its components set to their lower bounds while the second point will have all its components set to their upper bounds.

T-uples with negative infinite or positive infinite components are sorted logically.

Since the specification of the Comparator interface allows only ClassCastException errors, some arbitrary choices have been made to handle specific cases. The rationale for these choices is to keep regular and consistent T-uples together.

Since:
3.0
Version:
$Id: OrderedTuple.java 1416643 2012-12-03 19:37:14Z tn $

Constructor Summary
OrderedTuple(double... components)
          Build an ordered T-uple from its components.
 
Method Summary
 int compareTo(OrderedTuple ot)
          Compares this ordered T-uple with the specified object.
 boolean equals(Object other)
          
 double[] getComponents()
          Get the components array.
 int hashCode()
          
 
Methods inherited from class java.lang.Object
clone, finalize, getClass, notify, notifyAll, toString, wait, wait, wait
 

Constructor Detail

OrderedTuple

public OrderedTuple(double... components)
Build an ordered T-uple from its components.

Parameters:
components - double components of the T-uple
Method Detail

compareTo

public int compareTo(OrderedTuple ot)
Compares this ordered T-uple with the specified object.

The ordering method is detailed in the general description of the class. Its main property is to be consistent with distance: geometrically close T-uples stay close to each other when stored in a sorted collection using this comparison method.

T-uples with negative infinite, positive infinite are sorted logically.

Some arbitrary choices have been made to handle specific cases. The rationale for these choices is to keep normal and consistent T-uples together.

Specified by:
compareTo in interface Comparable<OrderedTuple>
Parameters:
ot - T-uple to compare instance with
Returns:
a negative integer if the instance is less than the object, zero if they are equal, or a positive integer if the instance is greater than the object

equals

public boolean equals(Object other)

Overrides:
equals in class Object

hashCode

public int hashCode()

Overrides:
hashCode in class Object

getComponents

public double[] getComponents()
Get the components array.

Returns:
array containing the T-uple components


Copyright © 2003-2012 The Apache Software Foundation. All Rights Reserved.