Move coordinate systems to Kinemat.Coordinates

This commit is contained in:
James Harton 2018-01-19 12:42:32 +13:00
parent f74836dfd3
commit e5b6b812d9
26 changed files with 90 additions and 81 deletions

View file

@ -1,5 +1,5 @@
defimpl Inspect, for: Kinemat.Cartesian do
alias Kinemat.Cartesian
defimpl Inspect, for: Kinemat.Coordinates.Cartesian do
alias Kinemat.Coordinates.Cartesian
import Inspect.Algebra
@spec inspect(Cartesian.t(), any) :: String.t()

View file

@ -1,5 +1,5 @@
defimpl Inspect, for: Kinemat.Cylindrical do
alias Kinemat.Cylindrical
defimpl Inspect, for: Kinemat.Coordinates.Cylindrical do
alias Kinemat.Coordinates.Cylindrical
import Inspect.Algebra
@spec inspect(Cylindrical.t(), any) :: String.t()

View file

@ -1,4 +1,4 @@
defimpl Inspect, for: Kinemat.Spherical do
defimpl Inspect, for: Kinemat.Coordinates.Spherical do
import Inspect.Algebra
@spec inspect(Angle.t(), any) :: String.t()

View file

@ -3,18 +3,17 @@ defmodule Kinemat do
quote do
alias Kinemat.{
Point,
Cartesian,
Cylindrical,
Spherical,
Orientation,
Euler,
RotationMatrix,
Quaternion,
Sperical,
# Joint, Point, Prismatic, Radians, Revolute, Spherical,
Frame
}
import Angle.Sigil
# import Kinemet.Sigil
end
end

View file

@ -1,4 +1,4 @@
defmodule Kinemat.Cartesian do
defmodule Kinemat.Coordinates.Cartesian do
defstruct ~w(x y z)a
alias __MODULE__
@ -13,9 +13,8 @@ defmodule Kinemat.Cartesian do
## Examples
iex> use Kinemat
...> Cartesian.init(3, 4, 5)
%Kinemat.Cartesian{x: 3, y: 4, z: 5}
iex> Cartesian.init(3, 4, 5)
%Kinemat.Coordinates.Cartesian{x: 3, y: 4, z: 5}
"""
@spec init(number, number, number) :: t
def init(x, y, z) do
@ -27,8 +26,7 @@ defmodule Kinemat.Cartesian do
## Examples
iex> use Kinemat
...> Cartesian.init(3, 4, 5)
iex> Cartesian.init(3, 4, 5)
...> |> Cartesian.x()
3
"""
@ -40,8 +38,7 @@ defmodule Kinemat.Cartesian do
## Examples
iex> use Kinemat
...> Cartesian.init(3, 4, 5)
iex> Cartesian.init(3, 4, 5)
...> |> Cartesian.y()
4
"""
@ -53,8 +50,7 @@ defmodule Kinemat.Cartesian do
## Examples
iex> use Kinemat
...> Cartesian.init(3, 4, 5)
iex> Cartesian.init(3, 4, 5)
...> |> Cartesian.z()
5
"""

View file

@ -1,6 +1,7 @@
defmodule Kinemat.Cylindrical do
defmodule Kinemat.Coordinates.Cylindrical do
defstruct ~w(radial azimuth vertical)a
alias Kinemat.Cylindrical
use Kinemat.Coordinates
alias __MODULE__
@moduledoc """
Describes a point in cylindrical coordinates.
@ -14,14 +15,14 @@ defmodule Kinemat.Cylindrical do
## Examples
iex> Cylindrical.init(10, ~a(20)d, 30)
%Kinemat.Cylindrical{radial: 10,
azimuth: ~a(20)d,
vertical: 30}
%Cylindrical{radial: 10,
azimuth: ~a(20)d,
vertical: 30}
iex> Cylindrical.init(10, ~a(0.5)r, 30)
%Kinemat.Cylindrical{radial: 10,
azimuth: ~a(0.5)r,
vertical: 30}
%Cylindrical{radial: 10,
azimuth: ~a(0.5)r,
vertical: 30}
"""
@spec init(number, Angle.t(), number) :: t
def init(rho, %Angle{} = theta, z) do

View file

@ -1,5 +1,5 @@
defmodule Kinemat.Spherical do
alias Kinemat.Spherical
defmodule Kinemat.Coordinates.Spherical do
alias __MODULE__
defstruct ~w(radial azimuth polar)a
@moduledoc """
@ -14,9 +14,9 @@ defmodule Kinemat.Spherical do
## Examples
iex> Spherical.init(10, ~a(20)d, ~a(30)d)
%Kinemat.Spherical{radial: 10,
azimuth: ~a(20)d,
polar: ~a(30)d}
%Kinemat.Coordinates.Spherical{radial: 10,
azimuth: ~a(20)d,
polar: ~a(30)d}
"""
@spec init(number, Angle.t(), Angle.t()) :: t
def init(rho, %Angle{} = theta, %Angle{} = phi) do

View file

@ -0,0 +1,11 @@
defmodule Kinemat.Coordinates do
@moduledoc """
Container module for Kinemat's coodinate representations.
"""
defmacro __using__(_opts) do
quote do
alias Kinemat.Coordinates.{Cartesian, Cylindrical, Spherical}
end
end
end

View file

@ -1,5 +1,6 @@
defmodule Kinemat.Frame do
use Kinemat
use Kinemat.Coordinates
defstruct ~w(point orientation)a
@moduledoc """

View file

@ -1,6 +0,0 @@
defmodule Kinemat.Helical do
@moduledoc """
Describes a helical joint.
FIXME Not yet done.
"""
end

View file

@ -17,8 +17,7 @@ defmodule Kinemat.HomogeneousTransformation do
Creating a homogeneous transformation from a nil rotation and nil offset
returns the identity matrix.
iex> use Kinemat
...> point = Cartesian.init(0.0, 0.0, 0.0)
iex> point = Cartesian.init(0.0, 0.0, 0.0)
...> orientation = Euler.init(:xyz, ~a(0), ~a(0), ~a(0))
...> Frame.init(point, orientation)
...> |> Kinemat.HomogeneousTransformation.to_homogeneous_transformation()

View file

@ -1,6 +1,6 @@
defimpl Kinemat.Point, for: Kinemat.Cartesian do
defimpl Kinemat.Point, for: Kinemat.Coordinates.Cartesian do
import :math, only: [pow: 2, sqrt: 1, atan: 1, acos: 1]
alias Kinemat.{Cartesian, Cylindrical, Spherical}
use Kinemat.Coordinates
alias Angle.Radian
@doc """
@ -8,9 +8,9 @@ defimpl Kinemat.Point, for: Kinemat.Cartesian do
## Examples
iex> Kinemat.Cartesian.init(1,2,3)
iex> Cartesian.init(1,2,3)
...> |> Kinemat.Point.to_cartesian()
%Kinemat.Cartesian{x: 1, y: 2, z: 3}
%Cartesian{x: 1, y: 2, z: 3}
"""
@spec to_cartesian(Cartesian.t()) :: Cartesian.t()
def to_cartesian(%Cartesian{} = point), do: point
@ -20,9 +20,9 @@ defimpl Kinemat.Point, for: Kinemat.Cartesian do
## Examples
iex> Kinemat.Cartesian.init(3, 4, 7)
iex> Cartesian.init(3, 4, 7)
...> |> Kinemat.Point.to_cylindrical()
%Kinemat.Cylindrical{
%Cylindrical{
radial: 5.0,
azimuth: %Angle{r: 0.9272952180016122},
vertical: 7}
@ -39,9 +39,9 @@ defimpl Kinemat.Point, for: Kinemat.Cartesian do
## Examples
iex> Kinemat.Cartesian.init(2,3,8)
iex> Cartesian.init(2,3,8)
...> |> Kinemat.Point.to_spherical()
%Kinemat.Spherical{
%Spherical{
radial: 8.774964387392123,
azimuth: %Angle{r: 0.4234308319224211},
polar: %Angle{r: 0.982793723247329}}

View file

@ -1,5 +1,5 @@
defimpl Kinemat.Point, for: Kinemat.Cylindrical do
alias Kinemat.{Cylindrical, Cartesian, Spherical}
defimpl Kinemat.Point, for: Kinemat.Coordinates.Cylindrical do
use Kinemat.Coordinates
alias Angle.Radian
import :math, only: [atan: 1, pow: 2, sqrt: 1]
import Kinemat.Trig, only: [sin: 1, cos: 1]
@ -15,7 +15,7 @@ defimpl Kinemat.Point, for: Kinemat.Cylindrical do
iex> Cylindrical.init(3, ~a(10)d, 9)
...> |> Point.to_cylindrical()
%Kinemat.Cylindrical{
%Cylindrical{
azimuth: ~a(10)d,
radial: 3,
vertical: 9}
@ -30,7 +30,7 @@ defimpl Kinemat.Point, for: Kinemat.Cylindrical do
iex> Cylindrical.init(3, ~a(10)d, 9)
...> |> Point.to_cartesian()
%Kinemat.Cartesian{x: 2.954423259036624, y: 0.520944533000791, z: 9}
%Cartesian{x: 2.954423259036624, y: 0.520944533000791, z: 9}
"""
@spec to_cartesian(Cylindrical.t()) :: Cartesian.t()
def to_cartesian(%Cylindrical{radial: r, azimuth: theta, vertical: z}) do
@ -44,9 +44,9 @@ defimpl Kinemat.Point, for: Kinemat.Cylindrical do
## Examples
iex> Kinemat.Cylindrical.init(3, ~a(20)d, 4)
...> |> Kinemat.Point.to_spherical()
%Kinemat.Spherical{
iex> Cylindrical.init(3, ~a(20)d, 4)
...> |> Point.to_spherical()
%Spherical{
azimuth: ~a(0.6435011087932844)r,
polar: ~a(20)d,
radial: 5.0}

View file

@ -1,5 +1,5 @@
defimpl Kinemat.Point, for: Kinemat.Spherical do
alias Kinemat.{Spherical, Cylindrical, Cartesian}
defimpl Kinemat.Point, for: Kinemat.Coordinates.Spherical do
use Kinemat.Coordinates
import Kinemat.Trig, only: [sin: 1, cos: 1]
@moduledoc """
@ -11,9 +11,9 @@ defimpl Kinemat.Point, for: Kinemat.Spherical do
## Examples
iex> Kinemat.Spherical.init(8, ~a(30)d, ~a(20)d)
iex> Spherical.init(8, ~a(30)d, ~a(20)d)
...> |> Kinemat.Point.to_cylindrical()
%Kinemat.Cylindrical{
%Cylindrical{
azimuth: ~a(20)d,
radial: 3.9999999999999996,
vertical: 6.92820323027551}
@ -33,9 +33,9 @@ defimpl Kinemat.Point, for: Kinemat.Spherical do
## Examples
iex> Kinemat.Spherical.init(12, ~a(20)d, ~a(60)d)
iex> Spherical.init(12, ~a(20)d, ~a(60)d)
...> |> Kinemat.Point.to_cartesian()
%Kinemat.Cartesian{
%Cartesian{
x: 2.052120859954013,
y: 3.554377592712286,
z: 11.276311449430901}
@ -53,9 +53,9 @@ defimpl Kinemat.Point, for: Kinemat.Spherical do
## Examples
iex> Kinemat.Spherical.init(12, ~a(20)d, ~a(60)d)
iex> Spherical.init(12, ~a(20)d, ~a(60)d)
...> |> Kinemat.Point.to_spherical()
%Kinemat.Spherical{
%Spherical{
azimuth: ~a(20)d,
polar: ~a(60)d,
radial: 12}

View file

@ -1,6 +0,0 @@
defmodule Kinemat.Prismatic do
@moduledoc """
Describes a kinematic joint.
FIXME Not yet done.
"""
end

View file

@ -0,0 +1,6 @@
defmodule KinematCoordinatesCartesianTest do
use ExUnit.Case
use Kinemat
use Kinemat.Coordinates
doctest Kinemat.Coordinates.Cartesian
end

View file

@ -0,0 +1,6 @@
defmodule KinematCoordinatesCylindricalTest do
use ExUnit.Case
use Kinemat
use Kinemat.Coordinates
doctest Kinemat.Coordinates.Cylindrical
end

View file

@ -0,0 +1,6 @@
defmodule KinematCoordinatesSphericalTest do
use ExUnit.Case
use Kinemat
use Kinemat.Coordinates
doctest Kinemat.Coordinates.Spherical
end

View file

@ -1,5 +0,0 @@
defmodule KinematCylindricalTest do
use ExUnit.Case
use Kinemat
doctest Kinemat.Cylindrical
end

View file

@ -1,5 +1,6 @@
defmodule KinematFrameTest do
use ExUnit.Case
use Kinemat
use Kinemat.Coordinates
doctest Kinemat.Frame
end

View file

@ -1,5 +1,6 @@
defmodule KinematHomogeneousTransformationTest do
use ExUnit.Case
use Kinemat
use Kinemat.Coordinates
doctest Kinemat.HomogeneousTransformation
end

View file

@ -1,5 +1,6 @@
defmodule Kinemat.Point.CartesianTest do
use ExUnit.Case
use Kinemat
doctest Kinemat.Point.Kinemat.Cartesian
use Kinemat.Coordinates
doctest Kinemat.Point.Kinemat.Coordinates.Cartesian
end

View file

@ -1,5 +1,6 @@
defmodule Kinemat.Point.CylindricalTest do
use ExUnit.Case
use Kinemat
doctest Kinemat.Point.Kinemat.Cylindrical
use Kinemat.Coordinates
doctest Kinemat.Point.Kinemat.Coordinates.Cylindrical
end

View file

@ -1,5 +1,6 @@
defmodule Kinemat.Point.SphericalTest do
use ExUnit.Case
use Kinemat
doctest Kinemat.Point.Kinemat.Spherical
use Kinemat.Coordinates
doctest Kinemat.Point.Kinemat.Coordinates.Spherical
end

View file

@ -1,5 +1,6 @@
defmodule KinematPointTest do
use Kinemat
use Kinemat.Coordinates
use ExUnit.Case
defp pretty_much_equal(lhs, rhs) when is_number(lhs) and is_number(rhs) do

View file

@ -1,5 +0,0 @@
defmodule KinematSphericalTest do
use ExUnit.Case
use Kinemat
doctest Kinemat.Spherical
end