210 std::vector<EnvironmentalBoundary>&
boundaries() {
return boundaries_; }
216 const std::vector<EnvironmentalBoundary>&
boundaries()
const {
228 const std::shared_ptr<ForceGenerator>& generator);
245 std::vector<RigidBody>&
bodies() {
return bodies_; }
248 const std::vector<RigidBody>&
bodies()
const {
return bodies_; }
251 std::vector<RigidAssembly>&
assemblies() {
return assemblies_; }
254 const std::vector<RigidAssembly>&
assemblies()
const {
return assemblies_; }
281 const std::vector<Gamepiece>&
gamepieces()
const {
return gamepieces_; }
284 std::vector<Gamepiece>&
balls() {
return gamepieces_; }
287 const std::vector<Gamepiece>&
balls()
const {
return gamepieces_; }
326 void setGravity(
double gx_mps2,
double gy_mps2,
double gz_mps2) {
327 config_.gravity_mps2 =
Vector3{gx_mps2, gy_mps2, gz_mps2};
328 config_.enable_gravity =
true;
339 void gravity(
double* gx_mps2,
double* gy_mps2,
double* gz_mps2)
const {
341 *gx_mps2 = config_.gravity_mps2.x;
344 *gy_mps2 = config_.gravity_mps2.y;
347 *gz_mps2 = config_.gravity_mps2.z;
356 bool shouldInteract(std::uint32_t layer_a, std::uint32_t mask_a,
357 std::uint32_t layer_b, std::uint32_t mask_b)
const;
365 const MaterialInteraction* findMaterialInteraction(
366 std::int32_t material_a_id, std::int32_t material_b_id)
const;
370 std::vector<RigidBody> bodies_{};
371 std::vector<RigidAssembly> assemblies_{};
372 std::vector<Gamepiece> gamepieces_{};
373 std::vector<EnvironmentalBoundary> boundaries_{};
374 std::vector<std::shared_ptr<ForceGenerator>> global_force_generators_{};
375 std::vector<MaterialInteraction> material_interactions_{};
377 std::size_t step_count_{0};
378 double accumulated_sim_time_s_{0.0};
3D rigid-body style ball simulator with drag, Magnus lift, and ground contact.
Definition ball_physics.hpp:22
Generic runtime gamepiece abstraction.
Definition gamepiece.hpp:21
BallPhysicsSim3D::Config Config
Definition gamepiece.hpp:23
BallPhysicsSim3D::BallProperties Properties
Definition gamepiece.hpp:24
PhysicsConfig & config()
Mutable access to world configuration.
Definition physics_world.hpp:309
const std::vector< EnvironmentalBoundary > & boundaries() const
Immutable access to boundary storage.
Definition physics_world.hpp:216
const std::vector< Gamepiece > & gamepieces() const
Immutable access to all registered gamepieces.
Definition physics_world.hpp:281
Gamepiece & createGamepiece(const Gamepiece::Config &config=Gamepiece::Config(), const Gamepiece::Properties &properties=Gamepiece::Properties())
Creates and registers a generic gamepiece.
PhysicsWorld(const PhysicsConfig &config=PhysicsConfig())
Constructs a world with an initial configuration snapshot.
Definition physics_world.hpp:180
const PhysicsConfig & config() const
Read-only access to world configuration.
Definition physics_world.hpp:315
const std::vector< RigidBody > & bodies() const
Immutable access to all rigid bodies currently registered in the world.
Definition physics_world.hpp:248
RigidBody & createBody(double mass_kg)
Creates and registers a dynamic rigid body.
std::vector< EnvironmentalBoundary > & boundaries()
Mutable access to boundary storage.
Definition physics_world.hpp:210
void step()
Advances simulation by exactly one fixed timestep.
BallPhysicsSim3D & createBall(const Gamepiece::Config &config=Gamepiece::Config(), const Gamepiece::Properties &properties=Gamepiece::Properties())
Backwards-compatible helper that creates a ball simulator.
std::vector< Gamepiece > & gamepieces()
Mutable access to all registered gamepieces.
Definition physics_world.hpp:278
void addGlobalForceGenerator(const std::shared_ptr< ForceGenerator > &generator)
Registers a world-level force generator.
const std::vector< Gamepiece > & balls() const
Backwards-compatible const accessor for registered balls (gamepieces).
Definition physics_world.hpp:287
double accumulatedSimTimeS() const
Total accumulated simulation time in seconds.
Definition physics_world.hpp:303
std::vector< RigidBody > & bodies()
Mutable access to all rigid bodies currently registered in the world.
Definition physics_world.hpp:245
void setMaterialInteraction(const MaterialInteraction &interaction)
Registers or updates one material interaction override row.
std::vector< RigidAssembly > & assemblies()
Mutable access to all rigid assemblies currently registered in the world.
Definition physics_world.hpp:251
void setGravity(double gx_mps2, double gy_mps2, double gz_mps2)
Sets world gravity acceleration from scalar components.
Definition physics_world.hpp:326
std::vector< Gamepiece > & balls()
Backwards-compatible accessor name for registered balls (gamepieces).
Definition physics_world.hpp:284
void gravity(double *gx_mps2, double *gy_mps2, double *gz_mps2) const
Reads world gravity acceleration into optional scalar outputs.
Definition physics_world.hpp:339
std::size_t stepCount() const
Number of completed fixed-timestep iterations since construction/reset.
Definition physics_world.hpp:300
RigidAssembly & createAssembly()
Creates and registers a rigid assembly container.
EnvironmentalBoundary & addBoundary()
Adds a new environmental boundary primitive.
void clearMaterialInteractions()
Clears all material interaction override rows.
const std::vector< RigidAssembly > & assemblies() const
Immutable access to all rigid assemblies currently registered in the world.
Definition physics_world.hpp:254
Multi-body articulated system made from rigid links and joints.
Definition rigid_assembly.hpp:29
Simulated rigid body with translational/angular dynamics and optional aero metadata.
Definition rigid_body.hpp:44
Collision or constraint boundary definition used by PhysicsWorld.
Definition boundary.hpp:51
Global runtime settings for PhysicsWorld dynamics and optional features.
Definition physics_world.hpp:32
IntegrationMethod
Definition physics_config.hpp:27
@ kSemiImplicitEuler
Definition physics_config.hpp:28
double default_drag_reference_area_m2
Default drag reference area in square meters.
Definition physics_world.hpp:92
double magnus_coefficient
Magnus lift scaling coefficient.
Definition physics_world.hpp:110
double linear_drag_coefficient_n_per_mps
Linear drag coefficient in N/(m/s) for optional viscous damping.
Definition physics_world.hpp:102
bool enable_aerodynamics
Enables aerodynamic drag and Magnus lift forces.
Definition physics_world.hpp:71
double fixed_dt_s
Fixed timestep in seconds used by PhysicsWorld::step.
Definition physics_world.hpp:41
IntegrationMethod integration_method
Integration scheme used for rigid body translational/rotational updates.
Definition physics_world.hpp:48
bool enable_collision_detection
Enables broad collision/contact processing.
Definition physics_world.hpp:56
double angular_damping_per_s
Angular damping coefficient in 1/s.
Definition physics_world.hpp:131
double linear_damping_per_s
Linear damping coefficient in 1/s.
Definition physics_world.hpp:124
Vector3 gravity_mps2
Gravity acceleration vector in meters per second squared.
Definition physics_world.hpp:117
double air_density_kgpm3
Ambient air density in kilograms per cubic meter.
Definition physics_world.hpp:95
bool enable_joint_constraints
Enables joint/constraint solving for rigid assemblies.
Definition physics_world.hpp:63
double default_drag_coefficient
Default dimensionless drag coefficient (Cd).
Definition physics_world.hpp:85
bool enable_gravity
Enables gravity contribution during body integration.
Definition physics_world.hpp:78
Material-pair contact interaction override entry.
Definition physics_world.hpp:163
std::int32_t material_b_id
Second material numeric id (application-defined namespace).
Definition physics_world.hpp:167
bool enabled
True when this row should be considered during lookup.
Definition physics_world.hpp:173
std::int32_t material_a_id
First material numeric id (application-defined namespace).
Definition physics_world.hpp:165
double friction
Pair-specific friction coefficient, typically >= 0.
Definition physics_world.hpp:171
double restitution
Pair-specific restitution coefficient, typically in [0, 1].
Definition physics_world.hpp:169
3D vector utility used throughout JSim physics.
Definition vector.hpp:22