Visitar URL original
Fix stiff rod corrections with multiple static segments by JianP-Ciallo · Pull Request #207 · InteractiveComputerGraphics/PositionBasedDynamics · GitHub
Skip to content

Fix stiff rod corrections with multiple static segments - #207

Open
JianP-Ciallo wants to merge 1 commit into
InteractiveComputerGraphics:masterfrom
JianP-Ciallo:fix/stiff-rods-static-segments
Open

JianP-Ciallo wants to merge 1 commit into
InteractiveComputerGraphics:masterfrom
JianP-Ciallo:fix/stiff-rods-static-segments

Conversation

@JianP-Ciallo

Copy link
Copy Markdown

The direct stiff rod solver stops writing position and orientation corrections when its forward traversal reaches a static segment. In a three-segment rod with both ends fixed, the traversal visits the static leaf first, so the middle dynamic segment receives no correction.

Skip static segments and continue updating the remaining segments. Add an opt-in CTest regression using the public solver API, covering translation and twist with all segments dynamic, one fixed end, and two fixed ends.

Fixes #79.

Validation:

  • Before the fix, both two-fixed-end cases fail; the other four cases pass.
  • After the fix, all six cases pass in four MinGW GCC 15.2 configurations: float/double crossed with checked Debug (-O0, libstdc++ debug assertions) and Release (-O3 -DNDEBUG).
  • Static segment correction outputs remain unchanged.
  • CMake 3.31.8 builds the core library and regression target; CTest passes 1/1 tests (six internal cases). Explicitly disabling tests and leaving the option unset both produce no test target or registered tests.

Validation scope: Windows MinGW. The full interactive demo build, MSVC and Linux/macOS builds have not been run.

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

a bug in function bool PBD::DirectPositionBasedSolverForStiffRods::solve(...) in PositionBasedElasticRods.cpp

1 participant