diff --git a/orx-kdtree/README.md b/orx-kdtree/README.md new file mode 100644 index 00000000..c6d21315 --- /dev/null +++ b/orx-kdtree/README.md @@ -0,0 +1,2 @@ +# orx-kdtree + diff --git a/orx-kdtree/build.gradle b/orx-kdtree/build.gradle new file mode 100644 index 00000000..dec3965b --- /dev/null +++ b/orx-kdtree/build.gradle @@ -0,0 +1,17 @@ +sourceSets { + demo { + java { + srcDirs = ["src/demo/kotlin"] + compileClasspath += main.getCompileClasspath() + runtimeClasspath += main.getRuntimeClasspath() + } + } +} + +dependencies { + demoImplementation("org.openrndr:openrndr-core:$openrndrVersion") + demoImplementation("org.openrndr:openrndr-extensions:$openrndrVersion") + demoRuntimeOnly("org.openrndr:openrndr-gl3:$openrndrVersion") + demoRuntimeOnly("org.openrndr:openrndr-gl3-natives-$openrndrOS:$openrndrVersion") + demoImplementation(sourceSets.getByName("main").output) +} \ No newline at end of file diff --git a/orx-kdtree/src/demo/kotlin/DemoNearestNeighbour01.kt b/orx-kdtree/src/demo/kotlin/DemoNearestNeighbour01.kt new file mode 100644 index 00000000..7d511871 --- /dev/null +++ b/orx-kdtree/src/demo/kotlin/DemoNearestNeighbour01.kt @@ -0,0 +1,34 @@ +import org.openrndr.application +import org.openrndr.extensions.SingleScreenshot +import org.openrndr.extra.kdtree.buildKDTree +import org.openrndr.extra.kdtree.findNearest +import org.openrndr.extra.kdtree.vector2Mapper +import org.openrndr.math.Vector2 + +fun main() { + application { + configure { + width = 1280 + height = 720 + } + program { + if (System.getProperty("takeScreenshot") == "true") { + extend(SingleScreenshot()) { + this.outputFile = System.getProperty("screenshotPath") + } + } + + val points = MutableList(1000) { + Vector2(Math.random() * width, Math.random() * height) + } + val tree = buildKDTree(points, 2, ::vector2Mapper) + extend { + drawer.circles(points, 5.0) + val nearest = findNearest(tree, mouse.position, 2, ::vector2Mapper) + nearest?.let { + drawer.circle(it.x, it.y, 20.0) + } + } + } + } +} \ No newline at end of file