All Downloads are FREE. Search and download functionalities are using the official Maven repository.

axle.quanta.Acceleration.scala Maven / Gradle / Ivy

There is a newer version: 0.6.6
Show newest version
package axle.quanta

import axle.algebra.Bijection
import axle.algebra.DirectedGraph
import axle.algebra.Scale
import cats.kernel.Eq
import spire.algebra.Field

case class Acceleration() extends Quantum {

  def wikipediaUrl: String = "http://en.wikipedia.org/wiki/Degree_(angle)"

}

trait AccelerationUnits extends QuantumUnits[Acceleration] {

  lazy val mpsps = unit("mps", "mps") // derive

  lazy val fpsps = unit("fps", "fps") // derive

  lazy val g = unit("g", "g", Some("http://en.wikipedia.org/wiki/Standard_gravity"))

  def units: List[UnitOfMeasurement[Acceleration]] =
    List(mpsps, fpsps, g)

}

trait AccelerationConverter[N] extends UnitConverter[Acceleration, N] with AccelerationUnits {

  def defaultUnit = mpsps

}

object Acceleration {

  import spire.algebra.CModule
  import spire.math._

  def converterGraphK2[N: Field: Eq, DG[_, _]](
    implicit
    module: CModule[N, Rational],
    evDG:   DirectedGraph[DG[UnitOfMeasurement[Acceleration], N => N], UnitOfMeasurement[Acceleration], N => N]) =
    converterGraph[N, DG[UnitOfMeasurement[Acceleration], N => N]]

  def converterGraph[N: Field: Eq, DG](
    implicit
    module: CModule[N, Rational],
    evDG:   DirectedGraph[DG, UnitOfMeasurement[Acceleration], N => N]) =
    new UnitConverterGraph[Acceleration, N, DG] with AccelerationConverter[N] {

      def links: Seq[(UnitOfMeasurement[Acceleration], UnitOfMeasurement[Acceleration], Bijection[N, N])] =
        List[(UnitOfMeasurement[Acceleration], UnitOfMeasurement[Acceleration], Bijection[N, N])](
          (mpsps, g, Scale(9.80665)))
    }

}




© 2015 - 2024 Weber Informatics LLC | Privacy Policy