Move coordinate systems to Kinemat.Coordinates
This commit is contained in:
parent
f74836dfd3
commit
e5b6b812d9
26 changed files with 90 additions and 81 deletions
|
@ -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()
|
|
@ -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()
|
|
@ -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()
|
|
@ -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
|
||||
|
||||
|
|
|
@ -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
|
||||
"""
|
|
@ -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
|
|
@ -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
|
11
lib/kinemat/coordinates.ex
Normal file
11
lib/kinemat/coordinates.ex
Normal 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
|
|
@ -1,5 +1,6 @@
|
|||
defmodule Kinemat.Frame do
|
||||
use Kinemat
|
||||
use Kinemat.Coordinates
|
||||
defstruct ~w(point orientation)a
|
||||
|
||||
@moduledoc """
|
||||
|
|
|
@ -1,6 +0,0 @@
|
|||
defmodule Kinemat.Helical do
|
||||
@moduledoc """
|
||||
Describes a helical joint.
|
||||
FIXME Not yet done.
|
||||
"""
|
||||
end
|
|
@ -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()
|
||||
|
|
|
@ -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}}
|
||||
|
|
|
@ -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}
|
||||
|
|
|
@ -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}
|
||||
|
|
|
@ -1,6 +0,0 @@
|
|||
defmodule Kinemat.Prismatic do
|
||||
@moduledoc """
|
||||
Describes a kinematic joint.
|
||||
FIXME Not yet done.
|
||||
"""
|
||||
end
|
6
test/kinemat/coordinates/cartesian_test.exs
Normal file
6
test/kinemat/coordinates/cartesian_test.exs
Normal file
|
@ -0,0 +1,6 @@
|
|||
defmodule KinematCoordinatesCartesianTest do
|
||||
use ExUnit.Case
|
||||
use Kinemat
|
||||
use Kinemat.Coordinates
|
||||
doctest Kinemat.Coordinates.Cartesian
|
||||
end
|
6
test/kinemat/coordinates/cylindrical_test.exs
Normal file
6
test/kinemat/coordinates/cylindrical_test.exs
Normal file
|
@ -0,0 +1,6 @@
|
|||
defmodule KinematCoordinatesCylindricalTest do
|
||||
use ExUnit.Case
|
||||
use Kinemat
|
||||
use Kinemat.Coordinates
|
||||
doctest Kinemat.Coordinates.Cylindrical
|
||||
end
|
6
test/kinemat/coordinates/spherical_test.exs
Normal file
6
test/kinemat/coordinates/spherical_test.exs
Normal file
|
@ -0,0 +1,6 @@
|
|||
defmodule KinematCoordinatesSphericalTest do
|
||||
use ExUnit.Case
|
||||
use Kinemat
|
||||
use Kinemat.Coordinates
|
||||
doctest Kinemat.Coordinates.Spherical
|
||||
end
|
|
@ -1,5 +0,0 @@
|
|||
defmodule KinematCylindricalTest do
|
||||
use ExUnit.Case
|
||||
use Kinemat
|
||||
doctest Kinemat.Cylindrical
|
||||
end
|
|
@ -1,5 +1,6 @@
|
|||
defmodule KinematFrameTest do
|
||||
use ExUnit.Case
|
||||
use Kinemat
|
||||
use Kinemat.Coordinates
|
||||
doctest Kinemat.Frame
|
||||
end
|
||||
|
|
|
@ -1,5 +1,6 @@
|
|||
defmodule KinematHomogeneousTransformationTest do
|
||||
use ExUnit.Case
|
||||
use Kinemat
|
||||
use Kinemat.Coordinates
|
||||
doctest Kinemat.HomogeneousTransformation
|
||||
end
|
||||
|
|
|
@ -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
|
||||
|
|
|
@ -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
|
||||
|
|
|
@ -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
|
||||
|
|
|
@ -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
|
||||
|
|
|
@ -1,5 +0,0 @@
|
|||
defmodule KinematSphericalTest do
|
||||
use ExUnit.Case
|
||||
use Kinemat
|
||||
doctest Kinemat.Spherical
|
||||
end
|
Loading…
Reference in a new issue