Skip to content

fix: prevent nan in collisions and enable detection#8

Merged
bniladridas merged 2 commits into
mainfrom
fix-collision-nan
Jan 3, 2026
Merged

fix: prevent nan in collisions and enable detection#8
bniladridas merged 2 commits into
mainfrom
fix-collision-nan

Conversation

@bniladridas

@bniladridas bniladridas commented Jan 3, 2026

Copy link
Copy Markdown
Member

Summary

  • Prevent NaN in collisions by enforcing a minimum distance check
  • Enable collision detection in simulate
  • Define MIN_DISTANCE_EPSILON for maintainability
Why this change?

When two objects occupy the same or nearly the same position, the distance used in collision resolution can approach zero.
This can lead to:

  • Division by extremely small values
  • NaN or infinite velocities
  • Downstream state corruption in the simulation

Introducing an epsilon threshold ensures numerical stability while preserving correct collision behavior.
Enabling collisions makes the physics simulation more realistic and complete.

Add epsilon check to avoid division by very small distance in handle_collisions,
preventing potential NaN velocities and data corruption.
@gemini-code-assist

Copy link
Copy Markdown

Summary of Changes

Hello @bniladridas, I'm Gemini Code Assist1! I'm currently reviewing this pull request and will post my feedback shortly. In the meantime, here's a summary to help you and other reviewers quickly get up to speed!

This pull request enhances the stability of the physics engine by addressing a critical edge case in collision handling. By introducing a minimum distance threshold, it effectively prevents numerical instability that could arise from division by near-zero values, ensuring more robust and predictable simulation behavior.

Highlights

  • Collision Detection Robustness: An epsilon check has been added to the handle_collisions function to prevent division by extremely small distances, which could lead to NaN (Not a Number) velocities and potential data corruption when objects are overlapping or very close.
Using Gemini Code Assist

The full guide for Gemini Code Assist can be found on our documentation page, here are some quick tips.

Invoking Gemini

You can request assistance from Gemini at any point by creating a comment using either /gemini <command> or @gemini-code-assist <command>. Below is a summary of the supported commands on the current page.

Feature Command Description
Code Review /gemini review Performs a code review for the current pull request in its current state.
Pull Request Summary /gemini summary Provides a summary of the current pull request in its current state.
Comment @gemini-code-assist Responds in comments when explicitly tagged, both in pull request comments and review comments.
Help /gemini help Displays a list of available commands.

Customization

To customize Gemini Code Assist for GitHub experience, repository maintainers can create a configuration file and/or provide a custom code review style guide (such as PEP-8 for Python) by creating and adding files to a .gemini/ folder in the base of the repository. Detailed instructions can be found here.

Limitations & Feedback

Gemini Code Assist may make mistakes. Please leave feedback on any instances where its feedback is incorrect or counter productive. You can react with 👍 and 👎 on @gemini-code-assist comments. If you're interested in giving your feedback about your experience with Gemini Code Assist for Github and other Google products, sign up here.

You can also get AI-powered code generation, chat, as well as code reviews directly in the IDE at no cost with the Gemini Code Assist IDE Extension.

Footnotes

  1. Review the Privacy Notices, Generative AI Prohibited Use Policy, Terms of Service, and learn how to configure Gemini Code Assist in GitHub here. Gemini can make mistakes, so double check it and use code with caution.

@gemini-code-assist gemini-code-assist Bot left a comment

Copy link
Copy Markdown

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Code Review

This pull request correctly fixes a potential NaN issue in collision handling by adding an epsilon check. My review has two suggestions: first, to replace the magic number 1e-6 with a named constant for better readability. Second, and more importantly, the handle_collisions function is currently commented out, so the fix is inactive. This needs to be addressed.

Comment thread engine/physics/physics_engine.rs Outdated
let diff = pos1 - pos2;
let distance = diff.norm();
if distance < rad1 + rad2 && distance > 0.0 {
if distance < rad1 + rad2 && distance > 1e-6 {

Copy link
Copy Markdown

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

high

This fix is correct in principle, but the handle_collisions function is currently not being called within the simulate method (it's commented out on line 126). For this fix to be effective, the function call needs to be uncommented.

Comment thread engine/physics/physics_engine.rs Outdated
let diff = pos1 - pos2;
let distance = diff.norm();
if distance < rad1 + rad2 && distance > 0.0 {
if distance < rad1 + rad2 && distance > 1e-6 {

Copy link
Copy Markdown

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

medium

The value 1e-6 is a magic number. To improve readability and maintainability, it's best to define it as a constant with a descriptive name. For example:

const MIN_DISTANCE_EPSILON: f32 = 1e-6;

This constant could be defined at the module level and then used here:

if distance < rad1 + rad2 && distance > MIN_DISTANCE_EPSILON {

Uncomment handle_collisions call in simulate.
Define MIN_DISTANCE_EPSILON constant.
@bniladridas bniladridas changed the title fix: prevent nan in collisions by checking minimum distance fix: prevent nan in collisions and enable detection Jan 3, 2026
@bniladridas bniladridas added the bug Something isn't working label Jan 3, 2026
@bniladridas bniladridas merged commit d7c1d60 into main Jan 3, 2026
18 checks passed
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

bug Something isn't working

Projects

None yet

Development

Successfully merging this pull request may close these issues.

1 participant