Demos: ensure all use fun main() = application {
- Adjust some demo window sizes. - Replace Random.double by Double.uniform - Tweak some demos so screenshots look more interesting
This commit is contained in:
@@ -118,26 +118,25 @@ Drawing FCurves is useful for debugging, but their typical use is for animation.
|
||||
The FCurve sampler allows us to query values for the given time value like this:
|
||||
|
||||
```kotlin
|
||||
fun main() {
|
||||
application {
|
||||
program {
|
||||
val xCurve = fcurve(
|
||||
"""
|
||||
M320 H0.4
|
||||
S2,0, 2,320
|
||||
S2,0, 2,320
|
||||
S2,0, 2,320
|
||||
S2,0, 2,320
|
||||
T0.6,320
|
||||
""".trimIndent()
|
||||
).sampler() // <--
|
||||
extend {
|
||||
drawer.circle(
|
||||
xCurve(seconds % 9.0),
|
||||
height * 0.5,
|
||||
20.0
|
||||
)
|
||||
}
|
||||
fun main() = application {
|
||||
program {
|
||||
val xCurve = fcurve(
|
||||
"""
|
||||
M320 H0.4
|
||||
S2,0, 2,320
|
||||
S2,0, 2,320
|
||||
S2,0, 2,320
|
||||
S2,0, 2,320
|
||||
T0.6,320
|
||||
"""
|
||||
)
|
||||
val xCurveSampler = xCurve.sampler()
|
||||
extend {
|
||||
drawer.circle(
|
||||
xCurveSampler(seconds % 9.0),
|
||||
240.0,
|
||||
20.0
|
||||
)
|
||||
}
|
||||
}
|
||||
}
|
||||
@@ -194,6 +193,7 @@ For example `(M0 (h1 m1)[3])[2]` expands to `M0 h1 m1 h1 m1 h1 m1 M0 h1 m1 h1 m1
|
||||
|
||||
|
||||
# References
|
||||
|
||||
* https://x.com/ruby0x1/status/1258252352672247814
|
||||
* https://blender.stackexchange.com/questions/52403/what-is-the-mathematical-basis-for-f-curves/52468#52468
|
||||
* https://pomax.github.io/bezierinfo/#yforx
|
||||
@@ -210,6 +210,11 @@ For example `(M0 (h1 m1)[3])[2]` expands to `M0 h1 m1 h1 m1 h1 m1 M0 h1 m1 h1 m1
|
||||
|
||||

|
||||
|
||||
### DemoFCurve03
|
||||
[source code](src/jvmDemo/kotlin/DemoFCurve03.kt)
|
||||
|
||||

|
||||
|
||||
### DemoFCurveSheet01
|
||||
[source code](src/jvmDemo/kotlin/DemoFCurveSheet01.kt)
|
||||
|
||||
|
||||
@@ -1,19 +1,17 @@
|
||||
import org.openrndr.application
|
||||
import org.openrndr.extra.fcurve.fcurve
|
||||
|
||||
fun main() {
|
||||
application {
|
||||
configure {
|
||||
width = 720
|
||||
height = 720
|
||||
}
|
||||
program {
|
||||
val xpos = fcurve("M0 Q4,360,5,720").sampler()
|
||||
val ypos = fcurve("M360 h5").sampler()
|
||||
fun main() = application {
|
||||
configure {
|
||||
width = 720
|
||||
height = 720
|
||||
}
|
||||
program {
|
||||
val xpos = fcurve("M0 Q4,360,5,720").sampler()
|
||||
val ypos = fcurve("M360 h5").sampler()
|
||||
|
||||
extend {
|
||||
drawer.circle(xpos(seconds.mod(5.0)), ypos(seconds.mod(5.0)), 100.0)
|
||||
}
|
||||
extend {
|
||||
drawer.circle(xpos(seconds.mod(5.0)), ypos(seconds.mod(5.0)), 100.0)
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
@@ -3,26 +3,24 @@ import org.openrndr.color.ColorRGBa
|
||||
import org.openrndr.extra.fcurve.fcurve
|
||||
import org.openrndr.math.Vector2
|
||||
|
||||
fun main() {
|
||||
application {
|
||||
configure {
|
||||
width = 720
|
||||
height = 720
|
||||
}
|
||||
program {
|
||||
val xposCurve = fcurve("M0 Q4,360,5,720")
|
||||
val xpos = xposCurve.sampler()
|
||||
val yposCurve = fcurve("M360 h5")
|
||||
val ypos = yposCurve.sampler()
|
||||
fun main() = application {
|
||||
configure {
|
||||
width = 720
|
||||
height = 720
|
||||
}
|
||||
program {
|
||||
val xposCurve = fcurve("M0 Q4,360,5,720")
|
||||
val xpos = xposCurve.sampler()
|
||||
val yposCurve = fcurve("M360 h5")
|
||||
val ypos = yposCurve.sampler()
|
||||
|
||||
extend {
|
||||
drawer.circle(xpos(seconds.mod(5.0)), ypos(seconds.mod(5.0)), 100.0)
|
||||
drawer.stroke = ColorRGBa.PINK
|
||||
drawer.contours(xposCurve.contours(Vector2(720.0 / 5.0, -1.0), Vector2(0.0, height * 1.0)))
|
||||
drawer.contours(yposCurve.contours(Vector2(720.0 / 5.0, -1.0), Vector2(0.0, height * 1.0)))
|
||||
drawer.translate(seconds.mod(5.0)*(720.0/5.0), 0.0)
|
||||
drawer.lineSegment(0.0, 0.0, 0.0, 720.0)
|
||||
}
|
||||
extend {
|
||||
drawer.circle(xpos(seconds.mod(5.0)), ypos(seconds.mod(5.0)), 100.0)
|
||||
drawer.stroke = ColorRGBa.PINK
|
||||
drawer.contours(xposCurve.contours(Vector2(720.0 / 5.0, -1.0), Vector2(0.0, height * 1.0)))
|
||||
drawer.contours(yposCurve.contours(Vector2(720.0 / 5.0, -1.0), Vector2(0.0, height * 1.0)))
|
||||
drawer.translate(seconds.mod(5.0) * (720.0 / 5.0), 0.0)
|
||||
drawer.lineSegment(0.0, 0.0, 0.0, 720.0)
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
@@ -3,26 +3,26 @@ import org.openrndr.extra.fcurve.MultiFCurve
|
||||
import org.openrndr.extra.fcurve.fcurve
|
||||
import org.openrndr.extra.fcurve.vector2
|
||||
|
||||
fun main() {
|
||||
application {
|
||||
configure {
|
||||
width = 720
|
||||
height = 720
|
||||
}
|
||||
program {
|
||||
class XYAnimation : MultiFCurve(mapOf(
|
||||
fun main() = application {
|
||||
configure {
|
||||
width = 720
|
||||
height = 720
|
||||
}
|
||||
program {
|
||||
class XYAnimation : MultiFCurve(
|
||||
mapOf(
|
||||
"x" to fcurve("M0 Q4,360,5,720"),
|
||||
"y" to fcurve("M360 h5")
|
||||
)) {
|
||||
val position = vector2("x", "y")
|
||||
}
|
||||
)
|
||||
) {
|
||||
val position = vector2("x", "y")
|
||||
}
|
||||
|
||||
val xyAnimation = XYAnimation()
|
||||
val position = xyAnimation.position.sampler()
|
||||
val xyAnimation = XYAnimation()
|
||||
val position = xyAnimation.position.sampler()
|
||||
|
||||
extend {
|
||||
drawer.circle(position(seconds.mod(5.0)), 100.0)
|
||||
}
|
||||
extend {
|
||||
drawer.circle(position(seconds.mod(5.0)), 100.0)
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
Reference in New Issue
Block a user