commonMain.jetbrains.datalore.base.geometry.DoubleRectangles.kt Maven / Gradle / Ivy
Go to download
Show more of this group Show more artifacts with this name
Show all versions of lets-plot-common Show documentation
Show all versions of lets-plot-common Show documentation
Lets-Plot JVM package without rendering part
/*
* Copyright (c) 2019. JetBrains s.r.o.
* Use of this source code is governed by the MIT license that can be found in the LICENSE file.
*/
package jetbrains.datalore.base.geometry
import kotlin.math.max
import kotlin.math.min
object DoubleRectangles {
/*
Returns null if point collection is empty
*/
fun boundingBox(points: Iterable): DoubleRectangle? {
return calculateBoundingBox(points, DoubleVector::x, DoubleVector::y)
{ minX, minY, maxX, maxY ->
DoubleRectangle.span(
DoubleVector(minX, minY),
DoubleVector(maxX, maxY)
)
}
}
fun calculateBoundingBox(
points: Iterable,
getX: (PointT) -> Double,
getY: (PointT) -> Double,
factory: (minX: Double, minY: Double, maxX: Double, maxY: Double) -> BoxT
): BoxT? {
if (!points.iterator().hasNext()) {
return null
}
val first = points.iterator().next()
var minLon = getX(first)
var minLat = getY(first)
var maxLon = minLon
var maxLat = minLat
for (point in points) {
minLon = min(minLon, getX(point))
maxLon = max(maxLon, getX(point))
minLat = min(minLat, getY(point))
maxLat = max(maxLat, getY(point))
}
return factory(minLon, minLat, maxLon, maxLat)
}
}
© 2015 - 2025 Weber Informatics LLC | Privacy Policy