7#include <janus/janus.hpp>
25template <
typename Scalar>
28 return Vec2<Scalar>{force_x /
mass, force_y /
mass};
37template <
typename Scalar>
50template <
typename Scalar>
78template <
typename Scalar>
80spherical_pendulum_theta_ddot(
const Scalar &theta,
const Scalar &theta_dot,
81 const Scalar &phi_dot,
const Scalar &length,
82 const Scalar &
gravity,
const Scalar &zeta) {
83 Scalar sin_theta = janus::sin(theta);
84 Scalar cos_theta = janus::cos(theta);
85 Scalar omega_n = janus::sqrt(
gravity / length);
88 return sin_theta * cos_theta * phi_dot * phi_dot -
89 (
gravity / length) * sin_theta -
90 Scalar(2) * zeta * omega_n * theta_dot;
106template <
typename Scalar>
107Scalar spherical_pendulum_phi_ddot(
const Scalar &theta,
const Scalar &theta_dot,
108 const Scalar &phi_dot,
const Scalar &length,
109 const Scalar &gravity,
const Scalar &zeta) {
110 Scalar sin_theta = janus::sin(theta);
111 Scalar cos_theta = janus::cos(theta);
112 Scalar omega_n = janus::sqrt(gravity / length);
115 Scalar cot_theta = cos_theta / (sin_theta + Scalar(1e-10));
118 return Scalar(-2) * cot_theta * theta_dot * phi_dot -
119 Scalar(2) * zeta * omega_n * phi_dot;
128template <
typename Scalar>
129Vec3<Scalar> spherical_pendulum_position(
const Scalar &theta,
const Scalar &phi,
130 const Scalar &length) {
131 Scalar sin_theta = janus::sin(theta);
132 Scalar cos_theta = janus::cos(theta);
133 Scalar sin_phi = janus::sin(phi);
134 Scalar cos_phi = janus::cos(phi);
137 length * sin_theta * cos_phi,
138 length * sin_theta * sin_phi,
152template <
typename Scalar>
153Scalar spherical_pendulum_energy(
const Scalar &theta,
const Scalar &theta_dot,
154 const Scalar &phi_dot,
const Scalar &length,
155 const Scalar &mass,
const Scalar &gravity) {
156 Scalar sin_theta = janus::sin(theta);
157 Scalar cos_theta = janus::cos(theta);
161 Scalar(0.5) * mass * length * length *
162 (theta_dot * theta_dot + sin_theta * sin_theta * phi_dot * phi_dot);
165 Scalar PE = mass *
gravity * length * (Scalar(1) - cos_theta);
184template <
typename Scalar>
185Scalar simple_pendulum_acceleration(
const Scalar &theta,
186 const Scalar &theta_dot,
187 const Scalar &length,
const Scalar &gravity,
188 const Scalar &zeta) {
189 Scalar omega_n = janus::sqrt(gravity / length);
190 return -(
gravity / length) * janus::sin(theta) -
191 Scalar(2) * zeta * omega_n * theta_dot;
197template <
typename Scalar>
198Scalar simple_pendulum_period(
const Scalar &length,
const Scalar &gravity) {
199 return Scalar(2) * Scalar(M_PI) * janus::sqrt(length / gravity);
205template <
typename Scalar>
206Scalar simple_pendulum_omega(
const Scalar &length,
const Scalar &gravity) {
207 return janus::sqrt(gravity / length);
Definition Guided5Dof.hpp:13
Vec2< Scalar > planar_acceleration_gravity(const Scalar &force_x, const Scalar &force_y, const Scalar &mass, const Scalar &gravity)
Definition Planar2Dof.hpp:52
Vec2< Scalar > planar_acceleration(const Scalar &force_x, const Scalar &force_y, const Scalar &mass)
Definition Planar2Dof.hpp:26
Definition GravityTypes.hpp:7
Definition MassProperties.hpp:12
Scalar gravity(const Scalar &altitude)
US Standard Atmosphere 1976 - Gravitational Acceleration (table-based).
Definition USSA1976.hpp:248