This repository contains two complementary datasets used to evaluate the NON-GON collision-detection algorithms.
Random dataset — geometric parameters (position, size, rotation) are sampled randomly for each contact pair. The Gilbert–Johnson–Keerthi (GJK) algorithm and Expanding Polytope Algorithm (EPA) provide ground-truth collision status and signed distance. For full generation details see:
- PQ_DATASET_GENERATION.md for PQ dataset details
- SD_DATASET_GENERATION.md for SD dataset details
Edge-case dataset — hand-crafted cases designed to stress-test the algorithms against specific geometric configurations known to be difficult: near-boundary contacts, degenerate shapes, rotation extremes, and scale mismatches. See edge/EDGE_DATASET.md for full details.
Both datasets use GJK/EPA (via coal) as ground truth and serve as a high-fidelity reference benchmark within the project.
| Dataset | Pair | Samples | Colliding | Non-colliding | Labels |
|---|---|---|---|---|---|
| PQ | Ellipse–Ellipse | 2000 | 1000 | 1000 | collision |
| PQ | Cylinder–Cylinder | 2000 | 1000 | 1000 | collision |
| PQ | Ellipsoid–Ellipsoid | 2000 | 1000 | 1000 | collision |
| PQ | Ellipsoid–Elliptic Paraboloid | 2000 | 1000 | 1000 | collision |
| PQ | Hyperboloid–Plane | 2000 | 1000 | 1000 | collision |
| SD | ConvexCircle–ConvexCircle | 2000 | 1000 | 1000 | collision, signed distance |
| SD | ConvexLine–Line | 2000 | 1000 | 1000 | collision, signed distance |
| SD | Ellipse–Ellipse | 2000 | 1000 | 1000 | collision, signed distance |
| SD | Ellipsoid–Ellipsoid | 2000 | 1000 | 1000 | collision, signed distance |
| SD | HemiEllipsoid–Plane | 2000 | 1000 | 1000 | collision, signed distance |
| SD | Point–Ellipse | 2000 | 1000 | 1000 | collision, signed distance |
| SD | Point–Ellipsoid | 2000 | 1000 | 1000 | collision, signed distance |
| SD | Superellipse–Line Segment | 2000 | 1000 | 1000 | collision, signed distance |
| SD | SuperEllipsoid–Plane | 2000 | 1000 | 1000 | collision, signed distance |
| Total | 14 pairs | 28000 | 14000 | 14000 |
| Pair | Correct | Total | Accuracy |
|---|---|---|---|
| Ellipse–Ellipse | 1993 | 2000 | 99.65% |
| Cylinder–Cylinder | 1937 | 2000 | 96.85% |
| Ellipsoid–Ellipsoid | 1995 | 2000 | 99.75% |
| Ellipsoid–Elliptic Paraboloid | 1754 | 2000 | 87.70% |
| Hyperboloid–Plane | 1111 | 2000 | 55.55% |
| Pair | Samples | RMSE |
|---|---|---|
| ConvexCircle–ConvexCircle | 2000 | 0.342734 |
| ConvexLine–Line | 2000 | 0.700965 |
| Ellipse–Ellipse | 2000 | 0.139106 |
| Ellipsoid–Ellipsoid | 2000 | 0.966192 |
| HemiEllipsoid–Plane | 2000 | 4.887331 |
| Point–Ellipse | 2000 | 0.007352 |
| Point–Ellipsoid | 2000 | 0.723910 |
| Superellipse–Line Segment | 2000 | 0.010067 |
| SuperEllipsoid–Plane | 2000 | 2.281848 |
Hand-crafted cases that target specific geometric configurations known to be difficult. Every case has a GJK/coal ground truth. See edge/EDGE_DATASET.md for full row-by-row breakdowns and failure analysis.
edge/
├── PQ/ — Proximity Query (binary collision label)
│ ├── EllipseEllipse.csv (30 rows)
│ ├── EllipsoidEllipsoid.csv (30 rows)
│ ├── CylinderCylinder.csv (30 rows)
│ ├── EllipsoidEllipticParaboloid.csv (30 rows)
│ └── HyperboloidPlane.csv (36 rows)
└── SD/ — Shortest Distance (signed distance value)
├── EllipseEllipse.csv (30 rows)
├── EllipsoidEllipsoid.csv (30 rows)
├── ConvexCircleCircle.csv (30 rows)
├── ConvexLineLine.csv (30 rows)
├── PointEllipse.csv (30 rows)
├── PointEllipsoid.csv (30 rows)
├── SuperellipseLineSegment.csv (31 rows)
├── SuperEllipsoidPlane.csv (30 rows)
└── HemiEllipsoidPlane.csv (30 rows)
| Pair | Pass | Total | Notes |
|---|---|---|---|
| EllipseEllipse | 30 | 30 | All categories pass |
| EllipsoidEllipsoid | 30 | 30 | All categories pass |
| CylinderCylinder | 30 | 30 | All categories pass |
| EllipsoidEllipticParaboloid | 29 | 30 | False positive at gap=0.001 from apex (row 15) |
| HyperboloidPlane | 23 | 36 | Fails for plane in upper half of height range, small rotations (10°–30°), and near-degenerate shapes |
Failures on overlapping cases (collision=1, GT < 0) are expected: the alternating-projection algorithm returns surface-to-surface distance, not penetration depth. Only failures on separated cases (GT > 0) represent genuine bugs.
| Pair | Pass | Total | Genuine bugs (separated cases) |
|---|---|---|---|
| EllipseEllipse | 18 | 30 | None — all failures are overlap cases |
| EllipsoidEllipsoid | 17 | 30 | None — all failures are overlap cases |
| ConvexCircleCircle | 20 | 30 | Rows 26–27: direction-dependent error (y-axis and 45° separations wrong) |
| ConvexLineLine | 16 | 30 | Multiple rows: y-axis projection only — ignores x-offset, returns 0 for horizontal exterior |
| PointEllipse | 24 | 30 | Rows 26, 29: 89° rotation and near-circle |
| PointEllipsoid | 28 | 30 | Row 28: diagonal approach, error exactly +2.0 |
| SuperellipseLineSegment | 25 | 31 | None — all failures are overlap cases |
| SuperEllipsoidPlane | 24 | 30 | Rows 11, 18–22: error grows with rotation 30°→75°, vanishes at 90° |
| HemiEllipsoidPlane | 29 | 30 | None — single failure is overlap case |
| Pair | Trigger |
|---|---|
| HyperboloidPlane PQ | Plane in upper half of height range; small rotations (10°–30°); near-degenerate shapes (c→0, c→∞, asymmetric axes) |
| EllipsoidEllipticParaboloid PQ | False positive at gap=0.001 from apex |
| SuperEllipsoidPlane SD | Error grows with rotation 30°→75°, drops to ~0 at 90° (principal-axis projection) |
| PointEllipsoid SD | Diagonal approach — error exactly +2.0 (axis-projection bug) |
| PointEllipse SD | 89° rotation and near-circle |
| ConvexLineLine SD | y-axis projection only — returns 0 for horizontal exterior; ignores x-offset |
| ConvexCircleCircle SD | Direction-dependent: correct on x-axis, wrong on y-axis and 45° |