diff --git a/trajectory-kt/src/commonMain/kotlin/space/kscience/trajectory/Trajectory2D.kt b/trajectory-kt/src/commonMain/kotlin/space/kscience/trajectory/Trajectory2D.kt index 6aaef55..165d047 100644 --- a/trajectory-kt/src/commonMain/kotlin/space/kscience/trajectory/Trajectory2D.kt +++ b/trajectory-kt/src/commonMain/kotlin/space/kscience/trajectory/Trajectory2D.kt @@ -71,7 +71,7 @@ public fun StraightTrajectory2D(segment: LineSegment2D): StraightTrajectory2D = @Serializable @SerialName("arc") public data class CircleTrajectory2D( - public val circle: Circle2D, + @Serializable(Circle2DSerializer::class) public val circle: Circle2D, public val arcStart: Angle, public val arcAngle: Angle, ) : Trajectory2D { diff --git a/trajectory-kt/src/commonMain/kotlin/space/kscience/trajectory/geometryExtensions.kt b/trajectory-kt/src/commonMain/kotlin/space/kscience/trajectory/geometryExtensions.kt index b60c24c..50a0ff5 100644 --- a/trajectory-kt/src/commonMain/kotlin/space/kscience/trajectory/geometryExtensions.kt +++ b/trajectory-kt/src/commonMain/kotlin/space/kscience/trajectory/geometryExtensions.kt @@ -1,7 +1,12 @@ package space.kscience.trajectory +import kotlinx.serialization.KSerializer +import kotlinx.serialization.descriptors.SerialDescriptor +import kotlinx.serialization.encoding.Decoder +import kotlinx.serialization.encoding.Encoder import space.kscience.kmath.geometry.* import space.kscience.kmath.geometry.euclidean2d.Circle2D +import space.kscience.kmath.geometry.euclidean2d.Float64Circle2D import space.kscience.kmath.geometry.euclidean2d.Float64Space2D import space.kscience.kmath.structures.Float64 import kotlin.math.abs @@ -95,3 +100,21 @@ public fun CircleTrajectory2D.containsPoint(point: Vector2D): Boolean = else -> arcAngle < offset - Angle.piTimes2 } } + +internal object Circle2DSerializer : KSerializer> { + private val serializer = Float64Circle2D.serializer() + + override val descriptor: SerialDescriptor + get() = serializer.descriptor + + override fun deserialize(decoder: Decoder): Circle2D { + return decoder.decodeSerializableValue(serializer) + } + + override fun serialize(encoder: Encoder, value: Circle2D) { + encoder.encodeSerializableValue( + serializer, + value as? Float64Circle2D ?: Float64Circle2D(value.center, value.radius) + ) + } +} \ No newline at end of file diff --git a/trajectory-kt/src/commonTest/kotlin/space/kscience/kmath/geometry/ArcTests.kt b/trajectory-kt/src/commonTest/kotlin/space/kscience/trajectory/ArcTests.kt similarity index 89% rename from trajectory-kt/src/commonTest/kotlin/space/kscience/kmath/geometry/ArcTests.kt rename to trajectory-kt/src/commonTest/kotlin/space/kscience/trajectory/ArcTests.kt index dbc273c..b3a3da7 100644 --- a/trajectory-kt/src/commonTest/kotlin/space/kscience/kmath/geometry/ArcTests.kt +++ b/trajectory-kt/src/commonTest/kotlin/space/kscience/trajectory/ArcTests.kt @@ -3,15 +3,13 @@ * Use of this source code is governed by the Apache 2.0 license that can be found in the license/LICENSE.txt file. */ -package space.kscience.kmath.geometry +package space.kscience.trajectory +import space.kscience.kmath.geometry.Angle import space.kscience.kmath.geometry.euclidean2d.Circle2D import space.kscience.kmath.geometry.euclidean2d.Float64Space2D import space.kscience.kmath.geometry.euclidean2d.circumference -import space.kscience.trajectory.CircleTrajectory2D -import space.kscience.trajectory.Trajectory2D -import space.kscience.trajectory.circle -import space.kscience.trajectory.containsPoint +import space.kscience.kmath.geometry.radians import kotlin.math.PI import kotlin.test.Test import kotlin.test.assertEquals diff --git a/trajectory-kt/src/commonTest/kotlin/space/kscience/kmath/geometry/CircleTests.kt b/trajectory-kt/src/commonTest/kotlin/space/kscience/trajectory/CircleTests.kt similarity index 95% rename from trajectory-kt/src/commonTest/kotlin/space/kscience/kmath/geometry/CircleTests.kt rename to trajectory-kt/src/commonTest/kotlin/space/kscience/trajectory/CircleTests.kt index aae26d5..cb35191 100644 --- a/trajectory-kt/src/commonTest/kotlin/space/kscience/kmath/geometry/CircleTests.kt +++ b/trajectory-kt/src/commonTest/kotlin/space/kscience/trajectory/CircleTests.kt @@ -3,16 +3,13 @@ * Use of this source code is governed by the Apache 2.0 license that can be found in the license/LICENSE.txt file. */ -package space.kscience.kmath.geometry +package space.kscience.trajectory +import space.kscience.kmath.geometry.LineSegment2D import space.kscience.kmath.geometry.euclidean2d.Circle2D import space.kscience.kmath.geometry.euclidean2d.Float64Space2D import space.kscience.kmath.geometry.euclidean2d.circumference import space.kscience.kmath.structures.Float64 -import space.kscience.trajectory.circle -import space.kscience.trajectory.intersects -import space.kscience.trajectory.intersectsOrInside -import space.kscience.trajectory.segment import kotlin.math.pow import kotlin.math.sqrt import kotlin.test.Test diff --git a/trajectory-kt/src/commonTest/kotlin/space/kscience/kmath/geometry/LineTests.kt b/trajectory-kt/src/commonTest/kotlin/space/kscience/trajectory/LineTests.kt similarity index 93% rename from trajectory-kt/src/commonTest/kotlin/space/kscience/kmath/geometry/LineTests.kt rename to trajectory-kt/src/commonTest/kotlin/space/kscience/trajectory/LineTests.kt index eaea514..d304289 100644 --- a/trajectory-kt/src/commonTest/kotlin/space/kscience/kmath/geometry/LineTests.kt +++ b/trajectory-kt/src/commonTest/kotlin/space/kscience/trajectory/LineTests.kt @@ -3,10 +3,9 @@ * Use of this source code is governed by the Apache 2.0 license that can be found in the license/LICENSE.txt file. */ -package space.kscience.kmath.geometry +package space.kscience.trajectory import space.kscience.kmath.geometry.euclidean2d.Float64Space2D -import space.kscience.trajectory.StraightTrajectory2D import kotlin.math.pow import kotlin.math.sqrt import kotlin.test.Test