[orx-shapes] Add simple alphaShape interface
This commit is contained in:
@@ -8,6 +8,13 @@ import kotlin.math.min
|
|||||||
import kotlin.math.pow
|
import kotlin.math.pow
|
||||||
import kotlin.math.sqrt
|
import kotlin.math.sqrt
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Create an alpha shape from list of [Vector2]
|
||||||
|
*/
|
||||||
|
fun List<Vector2>.alphaShape(): Shape {
|
||||||
|
return AlphaShape(this).createShape()
|
||||||
|
}
|
||||||
|
|
||||||
private fun circumradius(p1: Vector2, p2: Vector2, p3: Vector2): Double {
|
private fun circumradius(p1: Vector2, p2: Vector2, p3: Vector2): Double {
|
||||||
val a = (p2 - p1).length
|
val a = (p2 - p1).length
|
||||||
val b = (p3 - p2).length
|
val b = (p3 - p2).length
|
||||||
@@ -96,8 +103,8 @@ class AlphaShape(val points: List<Vector2>) {
|
|||||||
* As alpha goes to infinity, the alpha shape becomes equal to the convex hull of the input points.
|
* As alpha goes to infinity, the alpha shape becomes equal to the convex hull of the input points.
|
||||||
* @return A list of [LineSegment]s representing the perimeter of the alpha shape.
|
* @return A list of [LineSegment]s representing the perimeter of the alpha shape.
|
||||||
*/
|
*/
|
||||||
fun createSegments(alpha: Double): List<LineSegment>
|
fun createSegments(alpha: Double): List<LineSegment> =
|
||||||
= createBase(alpha).map { LineSegment(getVec(it.first), getVec(it.second)) }
|
createBase(alpha).map { LineSegment(getVec(it.first), getVec(it.second)) }
|
||||||
|
|
||||||
private fun getVec(i: Int) = Vector2(delaunay.points[i], delaunay.points[i + 1])
|
private fun getVec(i: Int) = Vector2(delaunay.points[i], delaunay.points[i + 1])
|
||||||
|
|
||||||
|
|||||||
Reference in New Issue
Block a user