[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
|
* Find the (first) t value for a given [x] value
|
||||||
*/
|
*/
|
||||||
private fun Segment2D.tForX(x: Double): Double {
|
private fun Segment2D.tForX(x: Double): Double {
|
||||||
|
if (x == start.x) return 0.0
|
||||||
|
if (x == end.x) return 1.0
|
||||||
|
|
||||||
if (linear) {
|
if (linear) {
|
||||||
return (x - start.x) / (end.x - start.x)
|
return (x - start.x) / (end.x - start.x)
|
||||||
} else {
|
} else {
|
||||||
@@ -155,7 +158,7 @@ data class FCurve(val segments: List<Segment2D>) {
|
|||||||
if (segments.isEmpty()) {
|
if (segments.isEmpty()) {
|
||||||
return Pair(0.0, null)
|
return Pair(0.0, null)
|
||||||
}
|
}
|
||||||
if (t < segments.first().start.x) {
|
if (t <= segments.first().start.x) {
|
||||||
val segment = segments.first()
|
val segment = segments.first()
|
||||||
return Pair(segment.start.y, segment)
|
return Pair(segment.start.y, segment)
|
||||||
} else if (t > segments.last().end.x) {
|
} else if (t > segments.last().end.x) {
|
||||||
|
|||||||
@@ -1,4 +1,5 @@
|
|||||||
import org.openrndr.extra.fcurve.efcurve
|
import org.openrndr.extra.fcurve.efcurve
|
||||||
|
import org.openrndr.extra.fcurve.fcurve
|
||||||
import kotlin.test.Test
|
import kotlin.test.Test
|
||||||
import kotlin.test.assertEquals
|
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}", 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]"))
|
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