# HG changeset patch # User Sascha L. Teichmann # Date 1358083084 -3600 # Node ID 43e69af28b3cdf1b25bcf620fa8bc9344c77b222 # Parent 729a5edb03139f9534d690a984d90fff81f33bf5 A naive algorithm to figure out the "Umhuellende" of a set of WQKms. diff -r 729a5edb0313 -r 43e69af28b3c flys-artifacts/src/main/java/de/intevation/flys/artifacts/model/QRangeTree.java --- a/flys-artifacts/src/main/java/de/intevation/flys/artifacts/model/QRangeTree.java Sat Jan 12 11:30:46 2013 +0100 +++ b/flys-artifacts/src/main/java/de/intevation/flys/artifacts/model/QRangeTree.java Sun Jan 13 14:18:04 2013 +0100 @@ -101,8 +101,52 @@ return current.q; } } + + public Node findNode(double pos) { + Node current = this; + while (current != null) { + if (pos < current.a) { + current = current.left; + } + else if (pos > current.b) { + current = current.right; + } + return current; + } + return null; + } + + public boolean contains(double c) { + return c >= a && c <= b; + } } // class Node + /** Class to cache the last found tree leaf in a search for Q. + * Its likely that a neighbored pos search + * results in using the same leaf node. So + * caching this leaf will minimize expensive + * tree traversals. + * Modeled as inner class because the QRangeTree + * itself is a shared data structure. + * Using this class omits interpolation between + * leaves. + */ + public final class QuickQFinder { + + private Node last; + + public QuickQFinder() { + } + + public double findQ(double pos) { + if (last != null && last.contains(pos)) { + return last.q; + } + last = QRangeTree.this.findNode(pos); + return last != null ? last.q : Double.NaN; + } + } // class QuickQFinder + protected Node root; public QRangeTree() { @@ -212,6 +256,10 @@ return root != null ? root.findQ(pos) : Double.NaN; } + public Node findNode(double pos) { + return root != null ? root.findNode(pos) : null; + } + protected Node head() { Node head = root; while (head.left != null) { diff -r 729a5edb0313 -r 43e69af28b3c flys-artifacts/src/main/java/de/intevation/flys/artifacts/model/WstValueTable.java --- a/flys-artifacts/src/main/java/de/intevation/flys/artifacts/model/WstValueTable.java Sat Jan 12 11:30:46 2013 +0100 +++ b/flys-artifacts/src/main/java/de/intevation/flys/artifacts/model/WstValueTable.java Sun Jan 13 14:18:04 2013 +0100 @@ -59,7 +59,7 @@ this.name = name; } - public QRangeTree getQRangeTree() { + public QRangeTree getQRangeTree() { return qRangeTree; } @@ -540,6 +540,10 @@ this.rows = rows; } + public Column [] getColumns() { + return columns; + } + /** Sort rows (by km). */ public void sortRows() { Collections.sort(rows);