Aller au contenu

ipc-toolkit : Les requêtes de collision comme frontière de bibliothèque

ipc-toolkit fournit des composants géométriques pour la simulation avec contacts. Ce fork contient maillages de collision, candidats, détection continue et énergies de contact. Une simulation externe conserve la gestion du temps et de la résolution.

Bibliothèque Fork Algorithme
  • Mis à jour
  • C++ · 94.46%
  • MIT
C++CCDCMake Crédit amont
Langages du dépôtC++ 94.46%5

Parts calculées à partir des octets GitHub Linguist.

Langage%Octets
C++94.46%2 400 346
CMake2.98%75 800
Python2.1%53 463
Cuda0.38%9 561
Dockerfile0.08%2 051

GitHub · README · Statistiques de langages

Aperçu

Pourquoi il existe

Boîte à outils d'ingénierie pour la gestion du contact et de la friction dans les simulations par éléments finis.

Cas d’usage

Mécanique du contact continu non linéaire pour moteurs physiques.

Démarrage

Ces commandes viennent de la documentation du dépôt. Elles n’ont pas été exécutées pendant cette revue.

python/README.md · Installation
pip install ipctk
python/README.md · Installation
pip install git+https://github.com/ipc-sim/ipc-toolkit
python/README.md · Build
pip install .
python/README.md · Build
python -c "import ipctk"
python/README.md · CMake Build
mkdir build
cd build
cmake -DCMAKE_BUILD_TYPE=Release -DIPC_TOOLKIT_BUILD_PYTHON=ON ..
make -j$(nproc)

Références du dépôt

Extraits des guides du dépôt, dans leur langue d’origine. Les liens ouvrent la version du code consultée.

Prérequis et premier essai

Quick Start

README.md

C++ (include via CMake; see build instructions): Python (install via pip install ipctk): For more details, see the tutorials and API documentation.
Lire les instructions complètes ↗

Installation

python/README.md

To install the latest release, you can use pip: If you wish to install the current development code, you can compile the library from scratch. Either clone the repo manually or use git+ with pip:
Lire les instructions complètes ↗

Installation

docs/PYPI_README.md

To install the latest release, you can use pip: If you wish to install the current development code, you can compile the library from scratch. Either clone the repo manually or use git+ with pip:
Lire les instructions complètes ↗
Développement et contributions

Contributing

README.md

This project is open to contributors! Contributions can come in the form of feature requests, bug fixes, documentation, tutorials, and the like. We highly recommend filing an Issue first before submitting a Pull Request. Simply fork this repository and make a Pull Request! We would appreciate:

  • Implementation of new features
  • Bug Reports
  • Documentation
  • Testing
Lire les instructions complètes ↗

Contributing

docs/PYPI_README.md

This project is open to contributors! Contributions can come in the form of feature requests, bug fixes, documentation, tutorials, and the like. We highly recommend filing an Issue first before submitting a Pull Request. Simply fork this repository and make a Pull Request! We would appreciate:

  • Implementation of new features
  • Bug Reports
  • Documentation
  • Testing
Lire les instructions complètes ↗

Contributing

docs/CONTRIBUTING.md

Contributions are welcome, and they are greatly appreciated! Every little bit helps, and credit will always be given.
Lire les instructions complètes ↗
Documentation source

6 documents lus parmi 6 candidats.

Fonctions et composants 2

Géométrie et requêtes de collision
ipc.hpp prend un CollisionMesh et des positions pour vérifier les intersections ou un déplacement sans collision. Les phases large et étroite ont des paramètres explicites avec valeurs par défaut, séparant candidats et tests détaillés.
Calculs de contact
L’arborescence sépare distance, barrière, friction, tangente et potentiels. Ces composants alimentent les objectifs et dérivées de l’appelant, sans intégrer automatiquement toute une scène physique.

Architecture

Les composants et leurs liens restent lisibles en texte. Le diagramme ajoute une vue interactive.

Contexte système Contexte
  1. Simulation externe
  2. Maillage et déplacement des sommets
  3. Candidats de phase large
  4. Détection continue précise
  5. Résultat de collision

Liens vérifiés dans le dépôt.

Mermaid Diagramme interactif (chargement à l’ouverture)

Vue générale des composants et des échanges vérifiés dans le dépôt.

Vue statique de l’architecture de ipc-toolkit
Aperçu statique. Le diagramme interactif le remplace après le chargement de Mermaid.
flowchart LR
  n0["Simulation externe"]
  n1["Maillage et déplacement des sommets"]
  n2["Candidats de phase large"]
  n3["Détection continue précise"]
  n4["Résultat de collision"]
  n0 --> n1
  n1 --> n2
  n2 --> n3
  n3 --> n4
  n4 --> n0
Version texte du diagramme
  • Simulation externe → Maillage et déplacement des sommets
  • Maillage et déplacement des sommets → Candidats de phase large
  • Candidats de phase large → Détection continue précise
  • Détection continue précise → Résultat de collision
  • Résultat de collision → Simulation externe
Suivre un parcours dans le code

Suivez is_step_collision_free depuis sa déclaration. Le résultat répond à une requête géométrique pour un déplacement proposé. L’appelant décide comment cela change son pas, sa recherche linéaire ou sa résolution de contact.

Algorithme

Problème

Décider si un CollisionMesh aux positions de sommets données s’intersecte, ou si un déplacement proposé reste sans collision, pour qu’un simulateur avec contacts interroge la géométrie sans posséder toute la boucle temporelle.

Entrées

Un CollisionMesh plus les positions de sommets courantes (et éventuellement proposées) ; les stratégies CCD large et étroite sont des paramètres explicites avec valeurs par défaut.

Sorties

Réponses d’intersection ou de pas sans collision, plus des quantités de contact (distances, barrières, aides de friction) consommées par l’objectif de l’appelant — pas une résolution de scène complète.

Pseudocode (source)

given mesh M, positions x, optional next positions x'
if has_intersections(M, x): report contact candidates
if not is_step_collision_free(M, x, x'): reject or shorten step
else: assemble contact energies/derivatives for the caller’s solver
  1. 1. Construire ou accepter un maillage de collision

    La bibliothèque attend un CollisionMesh qui sépare la géométrie de l’état de simulation de l’appelant.

  2. 2. Candidats en phase large

    Les paires candidates sont découvertes avec une stratégie de phase large explicite avant les tests étroits coûteux.

  3. 3. CCD / intersection en phase étroite

    Les points d’entrée de ipc.hpp testent les intersections à une configuration ou si un déplacement reste sans collision.

  4. 4. Quantités de contact pour le solveur

    Les modules distance, barrière, friction et associés fournissent valeurs et dérivées ; la simulation externe conserve la gestion du temps.

Aucune complexité asymptotique n’est publiée dans les en-têtes inspectés de ce fork ; le coût dépend de la taille du maillage, de la phase large et des réglages CCD choisis par l’appelant.

Implémentation consultée

Types et structure des fichiers

140 types déclarés, dont 12 dans l’aperçu des relations de base.

Diagramme des types
classDiagram
direction TB
class ta4ad2d054a1a["CXXFunctionGenerator"] {
  __init__()
  signature()
  __call__()
}
class t0935cb7a441b["CXXGradientGenerator"] {
  __init__()
}
class t1aec9e647746["CXXJacobianGenerator"] {
  __init__()
}
class t6c43b7865a81["CXXHessianGenerator"] {
  __init__()
}
class t05fe515aed0d["Inertia"] {
  __init__()
  __call__()
  gradient()
  hessian()
}
class tcb5b8ab75455["PyBarrier"] {
  first_derivative()
  second_derivative()
  units()
}
class te947d03a9485["PyBroadPhase"] {
  name()
  build()
  clear()
  detect_vertex_vertex_candidates()
}
class ta8c42662e683["PyNarrowPhaseCCD"] {
  point_point_ccd()
  point_edge_ccd()
  point_triangle_ccd()
  edge_edge_ccd()
}
class tb0adabdf7fe2["PyNonlinearTrajectory"] {
  max_distance_from_linear()
}
class tc83b025ce434["PyIntervalNonlinearTrajectory"] {
  max_distance_from_linear()
}
class t9ee9c14a4b05["PairHash"] {
  <<struct>>
}
class t5a3d1613cb4b["SparseCanCollide"] {
  SparseCanCollide()
}
ta4ad2d054a1a <|-- t0935cb7a441b
ta4ad2d054a1a <|-- t1aec9e647746
t1aec9e647746 <|-- t6c43b7865a81
class b7bd3eedf5849["Barrier"] {
  <<unresolved_base>>
}
b7bd3eedf5849 <|-- tcb5b8ab75455
class b80b43ba1bca8["BroadPhase"] {
  <<unresolved_base>>
}
b80b43ba1bca8 <|-- te947d03a9485
class b1ced31ba20e0["NarrowPhaseCCD"] {
  <<unresolved_base>>
}
b1ced31ba20e0 <|-- ta8c42662e683
class b9fe354f68d01["NonlinearTrajectory"] {
  <<unresolved_base>>
}
b9fe354f68d01 <|-- tb0adabdf7fe2
class b28bdf016fc91["IntervalNonlinearTrajectory"] {
  <<unresolved_base>>
}
b28bdf016fc91 <|-- tc83b025ce434

Les bases non résolues restent identifiées; les signatures complètes ne sont pas reconstruites.

Index des types

Référence

463 / 463 fichiers admissibles lus (646 dans l’arbre); 0 trop volumineux, 0 échec de lecture et 74 diagnostic de syntaxe.

Ce que couvre l’analyse

Les dossiers connus de dépendances et de compilation, les fichiers d’identifiants et les binaires sont exclus. La collecte couvre les README, les manifestes reconnus et les fichiers source pris en charge.

Les statistiques Linguist couvrent l’ensemble du dépôt et peuvent inclure d’autres langages.

Carte des fichiers
flowchart TD
  root["ipc-toolkit"]
  f0["CMakeLists.txt"]
  root --> f0
  f1["src/ipc/ipc.cpp"]
  root --> f1
  f2["src/ipc/ipc.hpp"]
  root --> f2
  f3["README.md"]
  root --> f3
  f4["pyproject.toml"]
  root --> f4
  f5["setup.py"]
  root --> f5
  f6["notebooks/find_ipctk.py"]
  root --> f6
  f7["notebooks/generate_cpp_code.py"]
  root --> f7
  f8["notebooks/parula.py"]
  root --> f8
  f9["notebooks/utils.py"]
  root --> f9
  f10["python/CMakeLists.txt"]
  root --> f10
  f11["python/README.md"]
  root --> f11
  f12["python/_find_ipctk.py"]
  root --> f12
  f13["tests/CMakeLists.txt"]
  root --> f13
  f14["python/examples/find_ipctk.py"]
  root --> f14
  f15["python/examples/lbvh.py"]
  root --> f15

Fichiers à lire 3

Références

Article associé : IPC Toolkit : une bibliothèque de contacts pour les simulations.