Symbolic Coord System Notebook

[1]:
import sympy as sp

from mechpy.core.symbolic.coord import (
    SymbolicCoordSystem,
    SymbolicCartesianCoordSystem,
    SymbolicCylindricalCoordSystem,
    SymbolicSphericalCoordSystem,
)

Cartesian Coord System

[2]:
cartesian_system = SymbolicCartesianCoordSystem()
display(cartesian_system)
SymbolicCartesianCoordSystem(origin=(0, 0, 0), basis=(x, y, z))

Cylindrical Coord System

[3]:
cylindrical_system = SymbolicCylindricalCoordSystem()
display(cylindrical_system)
SymbolicCylindricalCoordSystem(origin=(0, 0, 0), basis=(r, theta, z))

Cartesian/Cylindrical Conversion

[4]:
symbolic_cylindrical_system = SymbolicCylindricalCoordSystem()
display(symbolic_cylindrical_system)
new_coord_system = symbolic_cylindrical_system.to_cartesian()
display(new_coord_system)
display(new_coord_system.basis)
SymbolicCylindricalCoordSystem(origin=(0, 0, 0), basis=(r, theta, z))
SymbolicCartesianCoordSystem(origin=(0, 0, 0), basis=(r*cos(theta), r*sin(theta), z))
(r*cos(theta), r*sin(theta), z)
[5]:
symbolic_cartesian_system = SymbolicCartesianCoordSystem()
display(symbolic_cartesian_system)
new_coord_system = symbolic_cartesian_system.to_cylindrical()
display(new_coord_system)
display(new_coord_system.basis)
SymbolicCartesianCoordSystem(origin=(0, 0, 0), basis=(x, y, z))
SymbolicCylindricalCoordSystem(origin=(0, 0, 0), basis=(sqrt(x**2 + y**2), atan2(y, x), z))
(sqrt(x**2 + y**2), atan2(y, x), z)
[6]:
cylindrical_coord = (5, sp.pi/3, 2)
symbolic_cylindrical_system = SymbolicCylindricalCoordSystem()
cartesian_coord = symbolic_cylindrical_system.get_cartesian_coords(cylindrical_coord)
display(cartesian_coord)
(5/2, 5*sqrt(3)/2, 2)
[7]:
cartesian_coord = (0, 1, 1)
symbolic_cartesian_system = SymbolicCartesianCoordSystem()
cylindrical_coord = symbolic_cartesian_system.get_cylindrical_coord(cartesian_coord)
display(cylindrical_coord)
(1, pi/2, 1)

using params

Example 1

[8]:
symbolic_cylindrical_system = SymbolicCylindricalCoordSystem()
display(symbolic_cylindrical_system)
a, b = sp.symbols("a b", positive=True)
cylindrical_coord = (a, sp.pi/3, b)
cartesian_coord = symbolic_cylindrical_system.get_cartesian_coords(cylindrical_coord)
display(cartesian_coord)
SymbolicCylindricalCoordSystem(origin=(0, 0, 0), basis=(r, theta, z))
(a/2, sqrt(3)*a/2, b)

Evaluation

[9]:
eval_coord = SymbolicCoordSystem.coord_eval(cartesian_coord, subs={a: 3, b: 5})
print(eval_coord)
(1.50000000000000, 2.59807621135332, 5.00000000000000)

Example 2

[10]:
a, b = sp.symbols("a b", positive=True)
cartesian_coord = (0, a, b)
symbolic_cartesian_system = SymbolicCartesianCoordSystem()
cylindrical_coord = symbolic_cartesian_system.get_cylindrical_coord(cartesian_coord)
display(cylindrical_coord)
(a, pi/2, b)

Evaluation

[11]:
eval_coord = SymbolicCoordSystem.coord_eval(cylindrical_coord, subs={a: 3, b: 5})
print(eval_coord)
(3.00000000000000, 1.57079632679490, 5.00000000000000)