From bede9c95f962b89fe042547d278073d0cf56382c Mon Sep 17 00:00:00 2001 From: lisyarus Date: Sun, 17 Mar 2024 11:32:59 +0300 Subject: [PATCH] Fix computing contact point in edge-edge case in cg::separation --- libs/cg/include/psemek/cg/convex/separation.hpp | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/libs/cg/include/psemek/cg/convex/separation.hpp b/libs/cg/include/psemek/cg/convex/separation.hpp index 588804f2..dbc1b2aa 100644 --- a/libs/cg/include/psemek/cg/convex/separation.hpp +++ b/libs/cg/include/psemek/cg/convex/separation.hpp @@ -226,7 +226,7 @@ namespace psemek::cg auto m = geom::cross(result.direction, vs2[e2[1]] - vs2[e2[0]]); auto v = geom::dot(geom::homogeneous(vs2[e2[0]]), geom::homogeneous(m)); auto t = (v - geom::dot(geom::homogeneous(vs1[e1[0]]), geom::homogeneous(m))) / geom::dot(geom::homogeneous(vs1[e1[1]] - vs1[e1[0]]), geom::homogeneous(m)); - result.contact_point = geom::lerp(vs1[e1[0]], vs1[e2[1]], geom::clamp(t, geom::interval(scalar_type(0), scalar_type(1)))); + result.contact_point = geom::lerp(vs1[e1[0]], vs1[e1[1]], geom::clamp(t, geom::interval(scalar_type(0), scalar_type(1)))); } return result;