[orx-noise] Optimization. Reduce attempt-count in shape.uniform (#289)
This commit is contained in:
@@ -13,7 +13,8 @@ fun ShapeProvider.uniform(distanceToEdge: Double = 0.0, random: Random = Random.
|
|||||||
val shape = shape
|
val shape = shape
|
||||||
require(!shape.empty)
|
require(!shape.empty)
|
||||||
var attempts = 0
|
var attempts = 0
|
||||||
return Vector2.uniformSequence(shape.bounds, random).first {
|
val innerBounds = shape.bounds.offsetEdges(-distanceToEdge.coerceAtLeast(0.0))
|
||||||
|
return Vector2.uniformSequence(innerBounds, random).first {
|
||||||
attempts++
|
attempts++
|
||||||
require(attempts < 100)
|
require(attempts < 100)
|
||||||
if (distanceToEdge == 0.0) {
|
if (distanceToEdge == 0.0) {
|
||||||
|
|||||||
59
orx-noise/src/demo/kotlin/DemoShapeNoise.kt
Normal file
59
orx-noise/src/demo/kotlin/DemoShapeNoise.kt
Normal file
@@ -0,0 +1,59 @@
|
|||||||
|
import org.openrndr.application
|
||||||
|
import org.openrndr.color.ColorRGBa.Companion.PINK
|
||||||
|
import org.openrndr.color.ColorRGBa.Companion.WHITE
|
||||||
|
import org.openrndr.color.rgb
|
||||||
|
import org.openrndr.draw.colorBuffer
|
||||||
|
import org.openrndr.extra.noise.Random
|
||||||
|
import org.openrndr.extra.noise.filters.*
|
||||||
|
import org.openrndr.extra.noise.uniform
|
||||||
|
import org.openrndr.math.Vector2
|
||||||
|
import org.openrndr.math.Vector3
|
||||||
|
import org.openrndr.math.Vector4
|
||||||
|
import org.openrndr.shape.Circle
|
||||||
|
import org.openrndr.shape.Rectangle
|
||||||
|
import org.openrndr.shape.Shape
|
||||||
|
import org.openrndr.shape.ShapeContour
|
||||||
|
import kotlin.math.sin
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Use [Shape.uniform] to find random points inside shapes
|
||||||
|
*/
|
||||||
|
fun main() = application {
|
||||||
|
program {
|
||||||
|
val c = Circle(150.0, 150.0, 80.0)
|
||||||
|
val cPoints = List(150) {
|
||||||
|
c.uniform(7.0)
|
||||||
|
}
|
||||||
|
|
||||||
|
val r = Rectangle(250.0, 70.0, 160.0, 160.0)
|
||||||
|
val rPoints = List(150) {
|
||||||
|
r.uniform(7.0)
|
||||||
|
}
|
||||||
|
|
||||||
|
val s = ShapeContour.fromPoints(
|
||||||
|
listOf(
|
||||||
|
Vector2(550.0, 50.0),
|
||||||
|
Vector2(480.0, 450.0),
|
||||||
|
Vector2(100.0, 350.0),
|
||||||
|
Vector2(380.0, 320.0)
|
||||||
|
), true
|
||||||
|
).shape
|
||||||
|
val sPoints = List(500) {
|
||||||
|
s.uniform(7.0)
|
||||||
|
}
|
||||||
|
|
||||||
|
extend {
|
||||||
|
drawer.clear(rgb(0.20, 0.18, 0.16))
|
||||||
|
|
||||||
|
drawer.fill = PINK
|
||||||
|
drawer.circle(c)
|
||||||
|
drawer.rectangle(r)
|
||||||
|
drawer.shape(s)
|
||||||
|
|
||||||
|
drawer.fill = WHITE
|
||||||
|
drawer.circles(cPoints, 5.0)
|
||||||
|
drawer.circles(rPoints, 5.0)
|
||||||
|
drawer.circles(sPoints, 5.0)
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
Reference in New Issue
Block a user