[orx-fcurve] Fix bug in Segment2D.tForX
This commit is contained in:
@@ -11,6 +11,9 @@ import kotlin.math.abs
|
||||
* Find the (first) t value for a given [x] value
|
||||
*/
|
||||
private fun Segment2D.tForX(x: Double): Double {
|
||||
if (x == start.x) return 0.0
|
||||
if (x == end.x) return 1.0
|
||||
|
||||
if (linear) {
|
||||
return (x - start.x) / (end.x - start.x)
|
||||
} else {
|
||||
@@ -155,7 +158,7 @@ data class FCurve(val segments: List<Segment2D>) {
|
||||
if (segments.isEmpty()) {
|
||||
return Pair(0.0, null)
|
||||
}
|
||||
if (t < segments.first().start.x) {
|
||||
if (t <= segments.first().start.x) {
|
||||
val segment = segments.first()
|
||||
return Pair(segment.start.y, segment)
|
||||
} else if (t > segments.last().end.x) {
|
||||
|
||||
@@ -1,4 +1,5 @@
|
||||
import org.openrndr.extra.fcurve.efcurve
|
||||
import org.openrndr.extra.fcurve.fcurve
|
||||
import kotlin.test.Test
|
||||
import kotlin.test.assertEquals
|
||||
|
||||
@@ -30,4 +31,11 @@ class TestEFCurve {
|
||||
assertEquals("M0 L1.0, ${0.0} L1.0, ${1.0}", efcurve("M0 (L1.0, {it})[2]"))
|
||||
assertEquals("M0 L1.0, ${0.0} L1.0, ${1.0} L1.0, ${0.0} L1.0, ${1.0} L1.0, ${0.0} L1.0, ${1.0}", efcurve("M0 ((L1.0, {it})[2])[3]"))
|
||||
}
|
||||
|
||||
@Test
|
||||
fun testContinuity() {
|
||||
val fc = fcurve("Q1 25% 3 100 Q1 25% 3 0 Q1 25% 3 100 Q1 25% 3 0")
|
||||
val s = fc.sampler()
|
||||
assertEquals(0.0, s(6.0))
|
||||
}
|
||||
}
|
||||
Reference in New Issue
Block a user