Gravitational Attraction Force
Course Content
0 / 192 completedHow to Take this Course
A Quick Review of Vector Math
Introduction & Learning Outcomes
What is Game Physics
Using the P5js Web Editor
Visualizing Errors in the Web Editor
Coding a Vec2 Class
Vector & Scalar Quantities
Vector Magnitude
Vector Equality
Vector Addition & Subtraction
Scaling Vectors
Methods for Vector Addition & Subtraction
Static Methods
Applications of Vector Addition & Subtraction
Is the Dot Product Commutative
Dot Product
Cross Product
Coding the Cross Product Method
Exercise Perpendicular 2D Vector
Perpendicular 2D Vector
Vec3 Methods
Exercise Vec3 Methods
Coding the Normalization Method
Vector Normalization
Scaling, Translating, and Rotating Vectors
Quick Review of Sine & Cosine
Vector Rotation Proof (y-component)
Coding the Vec2 Rotate Method
Concluding our JavaScript Vector Class
Vector Rotation Proof (x-component)
Vec2 C++ Header File
Vec2 Operator Overloading
A Quick Look at C++ Vec2 Syntax
Technologies & Dependencies
Folder Structure
Compiling using GCC & Linux
Makefile
Initial Project Files
Configuring Visual Studio on Windows
Particle Class
Particle Velocity
Introduction to Particle Physics
Using the + Operator to Add Vectors
Clamping Invalid DeltaTime Values
Controlling our Framerate
Framerate Independent Movement
Moving in a Constant Velocity
Keeping the Particle Inside the Window
Constant Acceleration
Changing the Particle's Velocity
Particle Integrate Function
Discrete vs. Continuous
Different Integration Methods
Integration & Movement Simulation
Applying Forces to Particles
Function to Add Force
Particles with Different Mass
The Weight Force
Inverse of the Mass
Applying Forces with the Keyboard
Drag Force Function
Drag Force
Unexpected Drag Behavior
Handling Mouse Clicks with SDL
Friction Force
Friction Force Function
Gravitational Attraction Force Function
Gravitational Attraction Force
Spring Force
Spring Force Function
Exercise Spring Forces
Multiple Particles Chain
Multiple Particles Soft body
Soft Bodies & Verlet Integration
Rigid-Bodies
Shapes
Shape Class
Shape Class Implementation
Angular Velocity & Angular Acceleration
Circle Shape
Torque & Moment of Inertia
Circle Shape Angular Motion
Box Vertices
Local Space vs. World Space
Body Update Function
Why Not a Shape Draw Function
No Draw Method in the Shape Class
Circle-Circle Collision Detection
Circle-Circle Collision Class
Circle-Circle Collision Implementation
Collision Contact Information
Implementing the Projection Method
Collision Information Code
Broad Phase & Narrow Phase
Objects with Infinite Mass
The Projection Method
Impulse Method & Momentum
Impulse
Simplifying the Impulse Method Formula
Is Linear Collision Response Enough
Coding the Linear Impulse Method
Deriving the Linear Impulse Formula
AABB Collision Detection
Polygon-Polygon Collision Code
Finding Minimum Separation with SAT
SAT Separating Axis Theorem
Code to Find SAT Minimum Separation
Refactoring the SAT Separation Function
Finding Extra Collision Information with SAT
Polygon-Polygon Collision Information
Linear & Angular Velocity At Point
Computing Linear & Angular Impulse
Post-Collision Velocity At Point
Collision Distance Vectors Ra-Rb
D Cross Product Simplification
Coding the Impulse Along Normal
Friction Impulse Along Tangent
Exercise Impulse Along Tangent
Removing Window Boundaries Check
Circle-Polygon Collision Detection
Finding Polygon's Nearest Edge with Circle
Exercise Circle-Polygon Edge Regions
Circle-Polygon Collision Information
Circle-Polygon Collision Resolution
Polygon with Multiple Vertices
Exercise Polygons with Multiple Vertices
Rendering Circle Texture
Loading SDL Textures
World Class
Implementing World Functions
Refactoring Function to Update Vertices
Local Solvers vs. Global Solvers
A Naive Iterative Positional Correction
Constrained Rigid-Body Physics
Example Velocity Constraint & Bias Factor
Position vs. Velocity Constraints
Example Distance Constraint & Bias Factor
The Constraint Class
Constraint Forces & Constrained Movement
VecN Class
Force-Based vs. Impulse-Based Constraints
Implementing VecN Functions
VecN Operator Overloading
Matrices
MatMN Class
Matrix Transpose
Matrix Multiplication
Matrix Multiplication Function
Seeing Beyond the Matrix
Constraint Class Inheritance
Generalized Velocity Constraint
Solving Violated Velocity Constraints
Distance Constraint
Joint Constraint Class
Converting World Space to Local Space
World List of Constraints
Refactoring Body Update
Populating the Distance Jacobian
Deriving the Distance Jacobian
Gauss-Seidel Method
Constrained Pendulum
Solving System of Equations (Ax=b)
Solving System of Constraints Iteratively
Adding the Bias Term
Warm Starting
Ragdoll with Joint Constraints
Preventing NaN Errors
Penetration Constraint
Deriving the Penetration Jacobian
Solving Penetration Constraints
Penetration Constraint Class
Penetration Warm Starting
Penetration Constraint Friction
Clamping Friction Magnitude Values
Penetration Constraint Bounciness
Unstable Stack of Boxes
Allowing for Multiple Contact Points
Reference & Incident Edges
Finding Incident Edge
Getting Ready for Clipping
Clipping Function
Testing Multi-Contact Boxes
Testing Multiple Objects & Constraints
Broad & Narrow Split
Continuous Collision Detection
Contact Caching
Euler Integration Review
MidPoint & RK4 Integrators
Stick Constraints
Verlet Integration
Conclusion & Next Steps