14#include "src/system/ext/math8.h"
45 theta_rad(atan2(positionCartesian.y, positionCartesian.x)),
46 z_mm(positionCartesian.z)
52 Particle(
const float positionTheta_rad,
const float positionZ_mm) :
81 const utils::vec3d& accelerationVector = tangantialVector.
add(directVector);
95 const float deltaTime_s,
96 const bool shouldContrain =
true)
111 const float angularPositionIncrement =
112 lmpd_constrain<float>(
thetaSpeed_radS * deltaTime_s, -angularUnit, angularUnit);
113 const float verticalPositionIncrement =
114 lmpd_constrain<float>(
zSpeed_mS * deltaTime_s, -verticalUnit, verticalUnit) * 1000.0;
117 z_mm += verticalPositionIncrement;
137 const float deltaTime_s,
138 const bool shouldContrain =
true)
const
Contains basic interface types to implement custom user modes.
Definition: control_fixed_modes.hpp:12
static constexpr float angularSpeedGain
this gain compensate the angular acceleration for better display
Definition: particle.hpp:25
static constexpr float maxVerticalSpeed_mmS
max vertical speed in mm/S
Definition: particle.hpp:31
static constexpr uint16_t to_led_index(const float angle_rad, const float z)
convert a lamp coordinate to a led index
Definition: lamp_type.hpp:1208
static constexpr float speedDampening
low speed dampening [0-0.99] at every steps (viscosity)
Definition: particle.hpp:28
static constexpr int16_t to_led_index_no_bounds(const float angle_rad, const float z)
convert a lamp coordinate to a led index, the result can be an index out of the lamp body
Definition: lamp_type.hpp:1243
static constexpr float linearSpeedGain
gain for the linear speeds
Definition: particle.hpp:26
static constexpr bool is_led_index_valid(const int16_t ledIndex)
True if the given strip index is a valid one.
Definition: lamp_type.hpp:1189
static constexpr float maxAngularSpeed_radS
max angular speed in radians/s
Definition: particle.hpp:30
static constexpr float cylinderRadius_m
radius of the cylinder, in meters
Definition: particle.hpp:24
static constexpr float reboundCoeff
low rebound [0 - 1] on walls
Definition: particle.hpp:27
static constexpr float wrap_angle(const float angle_rad)
Wrap an angle in radians between 0 and 2*PI.
Definition: utils.h:115
static constexpr float c_TWO_PI
2*PI constant
Definition: constants.h:21
Define a particle in 3D space. it has a position and speed.
Definition: particle.hpp:37
Particle(const utils::vec3d &positionCartesian)
Construct a Particle from a 3D cartesian position.
Definition: particle.hpp:42
float theta_rad
position, in radians
Definition: particle.hpp:203
void apply_acceleration(const utils::vec3d &accelerationCartesian_m, const float deltaTime_s, const bool shouldContrain=true)
apply a cartesian acceleration to this particulate
Definition: particle.hpp:94
utils::vec2d compute_speed_increment(const utils::vec3d &accelerationCartesian_m, const float deltaTime_s) const
Compute the speed increment in the constraint lamp body.
Definition: particle.hpp:70
uint16_t to_lamp_index() const
Convert this particle coordinates to a constraint lamp index.
Definition: particle.hpp:196
int16_t _savedLampIndex
optimization
Definition: particle.hpp:207
int16_t to_lamp_index_no_bounds() const
Convert this particle coordinates to an unconstraint lamp index.
Definition: particle.hpp:198
Particle()
Default particle init.
Definition: particle.hpp:39
Particle simulate_after_acceleration(const utils::vec3d &accelerationCartesian_m, const float deltaTime_s, const bool shouldContrain=true) const
Simulate this particle movement as a new particle.
Definition: particle.hpp:136
float thetaSpeed_radS
angular speed, in radian/seconds
Definition: particle.hpp:200
Particle(const Particle &other)=default
Copy constructor for a particle.
float zSpeed_mS
linear speed, in meter/seconds
Definition: particle.hpp:201
void constraint_into_lamp_body()
Contrain the particle movement to the cylinder, limiting the movement at the extremities.
Definition: particle.hpp:148
float z_mm
height, in millimeters.
Definition: particle.hpp:204
void dampen_speed(const float dampenFactor)
Bleed off some speed. Simulate a dampening factor (like friction loss)
Definition: particle.hpp:189
Particle(const float positionTheta_rad, const float positionZ_mm)
Construct a particle from an angle and height.
Definition: particle.hpp:52
Main interface between the user and the hardware of the lamp.
Definition: lamp_type.hpp:114
static constexpr float lampHeight_mm
Computation of the lamp height.
Definition: lamp_type.hpp:437
static constexpr float maxWidthFloat
Width as a precise floating point number, equal to stripXCoordinates.
Definition: lamp_type.hpp:369
static constexpr float ledStripWidth_mm
real size of the led strip in use
Definition: lamp_type.hpp:423
static constexpr float lampBodyRadius_mm
real radius of the lamp body
Definition: lamp_type.hpp:420
2d vector in any space
Definition: vector_math.h:15
3d vector in any space
Definition: vector_math.h:54
vec3d add(const vec3d &other) const
Coefficient wise addition.
Definition: vector_math.h:71
float dot(const vec3d &other) const
Dot product in 3D, representing the arcos of the angle between this vector and another.
Definition: vector_math.h:65
vec3d multiply(const vec3d &other) const
Coefficient wise multiplication.
Definition: vector_math.h:67
Define the system hardware constants.
User defined constants, relative to specific lamp types.
Define vectors and rotation matrices, and the possibility to rotate vectors.