0.3.1-dev-11 #510

Merged
altavir merged 80 commits from dev into master 2023-04-05 18:46:36 +03:00
6 changed files with 22 additions and 18 deletions
Showing only changes of commit 94489b28e2 - Show all commits

View File

@ -1,3 +1,4 @@
import space.kscience.gradle.isInDevelopment
import space.kscience.gradle.useApache2Licence import space.kscience.gradle.useApache2Licence
import space.kscience.gradle.useSPCTeam import space.kscience.gradle.useSPCTeam
@ -77,12 +78,11 @@ ksciencePublish {
} }
github("kmath", "SciProgCentre") github("kmath", "SciProgCentre")
space( space(
"https://maven.pkg.jetbrains.space/spc/p/sci/maven" if (isInDevelopment) {
// if (isInDevelopment) { "https://maven.pkg.jetbrains.space/spc/p/sci/dev"
// "https://maven.pkg.jetbrains.space/spc/p/sci/dev" } else {
// } else { "https://maven.pkg.jetbrains.space/spc/p/sci/maven"
// "https://maven.pkg.jetbrains.space/spc/p/sci/release" }
// }
) )
sonatype() sonatype()
} }

View File

@ -3,10 +3,12 @@
The Maven coordinates of this project are `${group}:${name}:${version}`. The Maven coordinates of this project are `${group}:${name}:${version}`.
**Gradle:** **Gradle:**
```gradle ```groovy
repositories { repositories {
maven { url 'https://repo.kotlin.link' } maven { url 'https://repo.kotlin.link' }
mavenCentral() mavenCentral()
// development and snapshot versions
maven { url 'https://maven.pkg.jetbrains.space/spc/p/sci/dev' }
} }
dependencies { dependencies {
@ -18,6 +20,8 @@ dependencies {
repositories { repositories {
maven("https://repo.kotlin.link") maven("https://repo.kotlin.link")
mavenCentral() mavenCentral()
// development and snapshot versions
maven("https://maven.pkg.jetbrains.space/spc/p/sci/dev")
} }
dependencies { dependencies {

View File

@ -24,7 +24,7 @@ public class PhaseVector2D(
override val bearing: Double get() = atan2(velocity.x, velocity.y) override val bearing: Double get() = atan2(velocity.x, velocity.y)
} }
internal class Pose2DImpl( private class DubinsPose2DImpl(
override val coordinate: DoubleVector2D, override val coordinate: DoubleVector2D,
override val bearing: Double, override val bearing: Double,
) : DubinsPose2D, DoubleVector2D by coordinate{ ) : DubinsPose2D, DoubleVector2D by coordinate{
@ -33,4 +33,4 @@ internal class Pose2DImpl(
} }
public fun Pose2D(coordinate: DoubleVector2D, theta: Double): DubinsPose2D = Pose2DImpl(coordinate, theta) public fun DubinsPose2D(coordinate: DoubleVector2D, theta: Double): DubinsPose2D = DubinsPose2DImpl(coordinate, theta)

View File

@ -19,12 +19,12 @@ public sealed interface Trajectory2D {
* Straight path segment. The order of start and end defines the direction * Straight path segment. The order of start and end defines the direction
*/ */
public data class StraightTrajectory2D( public data class StraightTrajectory2D(
internal val start: DoubleVector2D, public val start: DoubleVector2D,
internal val end: DoubleVector2D, public val end: DoubleVector2D,
) : Trajectory2D { ) : Trajectory2D {
override val length: Double get() = start.distanceTo(end) override val length: Double get() = start.distanceTo(end)
internal val bearing: Double get() = theta(atan2(end.x - start.x, end.y - start.y)) public val bearing: Double get() = theta(atan2(end.x - start.x, end.y - start.y))
} }
/** /**
@ -56,7 +56,7 @@ public data class CircleTrajectory2D(
circle.radius * arcLength circle.radius * arcLength
} }
internal val direction: Direction by lazy { public val direction: Direction by lazy {
if (start.y < circle.center.y) { if (start.y < circle.center.y) {
if (start.bearing > PI) Direction.RIGHT else Direction.LEFT if (start.bearing > PI) Direction.RIGHT else Direction.LEFT
} else if (start.y > circle.center.y) { } else if (start.y > circle.center.y) {
@ -81,7 +81,7 @@ public data class CircleTrajectory2D(
vector: DoubleVector2D, vector: DoubleVector2D,
theta: Double, theta: Double,
direction: Direction, direction: Direction,
): DubinsPose2D = Pose2D( ): DubinsPose2D = DubinsPose2D(
vector, vector,
when (direction) { when (direction) {
Direction.LEFT -> theta(theta - PI / 2) Direction.LEFT -> theta(theta - PI / 2)

View File

@ -19,8 +19,8 @@ class DubinsTests {
val straight = StraightTrajectory2D(vector(0.0, 0.0), vector(100.0, 100.0)) val straight = StraightTrajectory2D(vector(0.0, 0.0), vector(100.0, 100.0))
val lineP1 = straight.shift(1, 10.0).inverse() val lineP1 = straight.shift(1, 10.0).inverse()
val start = Pose2D(straight.end, straight.bearing) val start = DubinsPose2D(straight.end, straight.bearing)
val end = Pose2D(lineP1.start, lineP1.bearing) val end = DubinsPose2D(lineP1.start, lineP1.bearing)
val radius = 2.0 val radius = 2.0
val dubins = DubinsPath.all(start, end, radius) val dubins = DubinsPath.all(start, end, radius)
@ -51,8 +51,8 @@ class DubinsTests {
assertTrue(path.c.start.equalsFloat(b.end)) assertTrue(path.c.start.equalsFloat(b.end))
} else if (path.b is StraightTrajectory2D) { } else if (path.b is StraightTrajectory2D) {
val b = path.b as StraightTrajectory2D val b = path.b as StraightTrajectory2D
assertTrue(path.a.end.equalsFloat(Pose2D(b.start, b.bearing))) assertTrue(path.a.end.equalsFloat(DubinsPose2D(b.start, b.bearing)))
assertTrue(path.c.start.equalsFloat(Pose2D(b.end, b.bearing))) assertTrue(path.c.start.equalsFloat(DubinsPose2D(b.end, b.bearing)))
} }
} }
} }