Skip to content

Commit abecc97

Browse files
committed
- added test for capsule vs plane
1 parent 9f7c448 commit abecc97

File tree

2 files changed

+109
-2
lines changed

2 files changed

+109
-2
lines changed

src/lib.rs

Lines changed: 0 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -1339,8 +1339,6 @@ pub fn map_to_range<T: Float, X: Base<T>>(v: X, in_start: X, in_end: X, out_star
13391339
// quat tests
13401340
// mat from quat
13411341
// quat from mat
1342-
// capsule_vs_plane
1343-
// cone_vs_plane
13441342

13451343
// TODO: new?
13461344
// line_vs_cone

tests/tests.rs

Lines changed: 109 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -2889,4 +2889,113 @@ fn cone_vs_plane_test() {
28892889
let cv = normalize(cp2-cp1);
28902890
let h = dist(cp1, cp2);
28912891
assert_eq!(cone_vs_plane(cp1, cv, h, r, x, n), Classification::Intersects);
2892+
}
2893+
2894+
#[test]
2895+
fn capsule_vs_plane_test() {
2896+
// use a simple plane at 0,0,0 +z
2897+
let x = Vec3f::zero();
2898+
let n = Vec3f::unit_z();
2899+
2900+
// behind
2901+
/*
2902+
+z
2903+
^
2904+
|
2905+
--------------------- +x (0, 0, 0)
2906+
cp2 (5,-1)
2907+
cp1 (0,-5)
2908+
*/
2909+
2910+
let cp1 = Vec3f::new(0.0, 0.0, -5.0);
2911+
let cp2 = Vec3f::new(5.0, 0.0, -1.0);
2912+
let r = 0.5;
2913+
assert_eq!(capsule_vs_plane(cp1, cp2, r, x, n), Classification::Behind);
2914+
2915+
// infront
2916+
/*
2917+
+z
2918+
^ cp2 (2,2)
2919+
| cp1 (1,1)
2920+
--------------------- +x (0, 0, 0)
2921+
*/
2922+
2923+
let cp1 = Vec3f::new(1.0, 0.0, 1.0);
2924+
let cp2 = Vec3f::new(2.0, 0.0, 2.0);
2925+
let r = 0.5;
2926+
assert_eq!(capsule_vs_plane(cp1, cp2, r, x, n), Classification::Infront);
2927+
2928+
2929+
// intersect fully through the line seg
2930+
/*
2931+
+z
2932+
^ cp2 (5,5)
2933+
|
2934+
--------------------- +x (0, 0, 0)
2935+
2936+
cp1 (0,-1)
2937+
*/
2938+
2939+
let cp1 = Vec3f::new(0.0, 0.0, -1.0);
2940+
let cp2 = Vec3f::new(5.0, 0.0, 5.0);
2941+
let r = 4.0;
2942+
assert_eq!(capsule_vs_plane(cp1, cp2, r, x, n), Classification::Intersects);
2943+
2944+
// intersect cp1 sphere
2945+
/*
2946+
+z
2947+
^
2948+
|
2949+
--------------------- +x (0, 0, 0)
2950+
cp1 (5, -1)
2951+
2952+
cp2 (0,-5)
2953+
*/
2954+
2955+
let cp1 = Vec3f::new(5.0, 0.0, -1.0);
2956+
let cp2 = Vec3f::new(0.0, 0.0, -5.0);
2957+
let r = 10.0;
2958+
assert_eq!(capsule_vs_plane(cp1, cp2, r, x, n), Classification::Intersects);
2959+
2960+
// intersect cp1 sphere
2961+
/*
2962+
+z
2963+
^
2964+
|
2965+
--------------------- +x (0, 0, 0)
2966+
cp1 (5, -1)
2967+
2968+
cp1 (10,-5)
2969+
*/
2970+
2971+
let cp1 = Vec3f::new(5.0, 0.0, -1.0);
2972+
let cp2 = Vec3f::new(10.0, 0.0, -5.0);
2973+
let r = 100.0;
2974+
assert_eq!(capsule_vs_plane(cp1, cp2, r, x, n), Classification::Intersects);
2975+
2976+
// intersect cp2 sphere
2977+
/*
2978+
cp1 (0,5)
2979+
2980+
cp2 (5, 1)
2981+
--------------------- +x (0, 0, 0)
2982+
*/
2983+
2984+
let cp2 = Vec3f::new(5.0, 0.0, 1.0);
2985+
let cp1 = Vec3f::new(0.0, 0.0, 5.0);
2986+
let r = 10.0;
2987+
assert_eq!(capsule_vs_plane(cp1, cp2, r, x, n), Classification::Intersects);
2988+
2989+
// intersect cp2 sphere
2990+
/*
2991+
cp1 (10,5)
2992+
2993+
cp2 (5, 1)
2994+
--------------------- +x (0, 0, 0)
2995+
*/
2996+
2997+
let cp2 = Vec3f::new(5.0, 0.0, 1.0);
2998+
let cp1 = Vec3f::new(10.0, 0.0, 5.0);
2999+
let r = 100.0;
3000+
assert_eq!(capsule_vs_plane(cp1, cp2, r, x, n), Classification::Intersects);
28923001
}

0 commit comments

Comments
 (0)