comparison flys-artifacts/src/main/java/de/intevation/flys/artifacts/model/WstValueTable.java @ 3736:da1969b05292

WST tables: Added interpolation of tabulated values only. flys-artifacts/trunk@5411 c6561f87-3c4e-4783-a992-168aeb5c3f6f
author Sascha L. Teichmann <sascha.teichmann@intevation.de>
date Sun, 09 Sep 2012 15:29:06 +0000
parents 4c4ec9e9650a
children 51f76225823b
comparison
equal deleted inserted replaced
3735:f48396deca91 3736:da1969b05292
1215 } 1215 }
1216 double q1 = columns[index-1].getQRangeTree().findQ(km); 1216 double q1 = columns[index-1].getQRangeTree().findQ(km);
1217 double q2 = columns[index ].getQRangeTree().findQ(km); 1217 double q2 = columns[index ].getQRangeTree().findQ(km);
1218 return Linear.weight(weight, q1, q2); 1218 return Linear.weight(weight, q1, q2);
1219 } 1219 }
1220
1221 public double [][] interpolateTabulated(double km) {
1222 return interpolateTabulated(km, new double[2][columns.length]);
1223 }
1224
1225 public double [][] interpolateTabulated(double km, double [][] result) {
1226
1227 int rowIndex = Collections.binarySearch(rows, new Row(km));
1228
1229 if (rowIndex >= 0) {
1230 // Direct hit -> copy ws.
1231 Row row = rows.get(rowIndex);
1232 System.arraycopy(
1233 row.ws, 0, result[0], 0,
1234 Math.min(row.ws.length, result[0].length));
1235 }
1236 else {
1237 rowIndex = -rowIndex -1;
1238 if (rowIndex < 1 || rowIndex >= rows.size()) {
1239 // Out of bounds.
1240 return null;
1241 }
1242 // Interpolate ws.
1243 Row r1 = rows.get(rowIndex-1);
1244 Row r2 = rows.get(rowIndex);
1245 double factor = Linear.factor(km, r1.km, r2.km);
1246 Linear.weight(factor, r1.ws, r2.ws, result[0]);
1247 }
1248
1249 double [] qs = result[1];
1250 for (int i = Math.min(qs.length, columns.length)-1; i >= 0; --i) {
1251 qs[i] = columns[i].getQRangeTree().findQ(km);
1252 }
1253 return result;
1254 }
1220 } 1255 }
1221 // vim:set ts=4 sw=4 si et sta sts=4 fenc=utf8 : 1256 // vim:set ts=4 sw=4 si et sta sts=4 fenc=utf8 :

http://dive4elements.wald.intevation.org