@Override public double minDist(SpatialComparable mbr1, SpatialComparable mbr2) { final int dim1 = mbr1.getDimensionality(), dim2 = mbr2.getDimensionality(); final int mindim = dim1 < dim2 ? dim1 : dim2; final NumberVector v1 = (mbr1 instanceof NumberVector) ? (NumberVector) mbr1 : null; final NumberVector v2 = (mbr2 instanceof NumberVector) ? (NumberVector) mbr2 : null; double agg = (v1 != null) // ? (v2 != null) ? preDistance(v1, v2, 0, mindim) : preDistanceVM(v1, mbr2, 0, mindim) // : (v2 != null) ? preDistanceVM(v2, mbr1, 0, mindim) : preDistanceMBR(mbr1, mbr2, 0, mindim); // first object has more dimensions. if(dim1 > mindim) { agg += (v1 != null) ? preNorm(v1, mindim, dim1) : preNormMBR(mbr1, mindim, dim1); } // second object has more dimensions. if(dim2 > mindim) { agg += (v2 != null) ? preNorm(v2, mindim, dim2) : preNormMBR(mbr2, mindim, dim2); } return FastMath.pow(agg, invp); }
@Override public double minDist(SpatialComparable mbr1, SpatialComparable mbr2) { final int dim1 = mbr1.getDimensionality(), dim2 = mbr2.getDimensionality(); final int mindim = dim1 < dim2 ? dim1 : dim2; final NumberVector v1 = (mbr1 instanceof NumberVector) ? (NumberVector) mbr1 : null; final NumberVector v2 = (mbr2 instanceof NumberVector) ? (NumberVector) mbr2 : null; double agg = (v1 != null) // ? (v2 != null) ? preDistance(v1, v2, 0, mindim) : preDistanceVM(v1, mbr2, 0, mindim) // : (v2 != null) ? preDistanceVM(v2, mbr1, 0, mindim) : preDistanceMBR(mbr1, mbr2, 0, mindim); // first object has more dimensions. if(dim1 > mindim) { agg += (v1 != null) ? preNorm(v1, mindim, dim1) : preNormMBR(mbr1, mindim, dim1); } // second object has more dimensions. if(dim2 > mindim) { agg += (v2 != null) ? preNorm(v2, mindim, dim2) : preNormMBR(mbr2, mindim, dim2); } return FastMath.pow(agg, invp); }
agg = preDistanceVM(v1, mbr2, 0, mindim, agg); agg = preDistanceVM(v2, mbr1, 0, mindim, agg);