68 lines
2.0 KiB
Kotlin
68 lines
2.0 KiB
Kotlin
import org.openrndr.extra.triangulation.Delaunay
|
|
import org.openrndr.math.Vector2
|
|
import org.openrndr.shape.Circle
|
|
import kotlin.test.Test
|
|
import kotlin.test.assertEquals
|
|
import kotlin.test.assertTrue
|
|
|
|
class TestDelaunay {
|
|
/**
|
|
* Test if an empty triangulation can be made
|
|
*/
|
|
@Test
|
|
fun testEmpty() {
|
|
val points = listOf<Vector2>()
|
|
val d = Delaunay.from(points)
|
|
assertEquals(0, d.triangles.size)
|
|
assertEquals(0, d.halfedges.size)
|
|
assertEquals(0, d.hull.size)
|
|
assertEquals(0, (d.neighbors(0).toList().size))
|
|
}
|
|
|
|
/**
|
|
* Test if a one point triangulation can be made
|
|
*/
|
|
@Test
|
|
fun testOnePoint() {
|
|
val points = listOf(Vector2(100.0, 100.0))
|
|
val d = Delaunay.from(points)
|
|
assertEquals(0, (d.neighbors(0).toList().size))
|
|
}
|
|
|
|
/**
|
|
* Test if a two point triangulation can be made
|
|
*/
|
|
@Test
|
|
fun testTwoPoints() {
|
|
val points = listOf(Vector2(100.0, 100.0), Vector2(300.0, 100.0))
|
|
val d = Delaunay.from(points)
|
|
println(d.triangles.size)
|
|
println("${d.triangles[0]}, ${d.triangles[1]}, ${d.triangles[2]}")
|
|
|
|
// this will be one degenerate triangle since we only have 2 points
|
|
assertEquals(3, d.triangles.size)
|
|
assertEquals(2, d.hull.size)
|
|
|
|
assertEquals(1, (d.neighbors(0).toList().size))
|
|
assertEquals(1, (d.neighbors(0).toList().first()))
|
|
|
|
assertEquals(1, (d.neighbors(1).toList().size))
|
|
assertEquals(0, (d.neighbors(1).toList().first()))
|
|
}
|
|
|
|
@Test
|
|
fun testThreePointsCollinear() {
|
|
val points = listOf(Vector2(100.0, 100.0), Vector2(200.0, 100.0), Vector2(300.0, 100.0))
|
|
val d = Delaunay.from(points)
|
|
assertEquals(3, d.triangles.size)
|
|
}
|
|
|
|
@Test
|
|
fun testNeighbors() {
|
|
val c = Circle(200.0, 200.0, 150.0).contour.equidistantPositions(20).take(20)
|
|
val d = Delaunay.from(c)
|
|
for (j in c.indices) {
|
|
assertTrue(d.neighbors(j).toList().isNotEmpty())
|
|
}
|
|
}
|
|
} |