From f358b9b14dbc1414c588f308b35f55705d777873 Mon Sep 17 00:00:00 2001 From: takiyu Date: Tue, 25 Feb 2020 13:55:50 -0800 Subject: [PATCH] Fix squared distance for CPU impl. (#83) Summary: `PointLineDistanceForward()` should return squared distance. However, it seems that it returned non-squared distance when `v0` was near by `v1` in CPU implementation. Pull Request resolved: https://github.com/facebookresearch/pytorch3d/pull/83 Reviewed By: bottler Differential Revision: D20097181 Pulled By: nikhilaravi fbshipit-source-id: 7ea851c0837ab89364e42d283c999df21ff5ff02 --- pytorch3d/csrc/rasterize_meshes/geometry_utils.h | 2 +- pytorch3d/renderer/mesh/rasterize_meshes.py | 4 ++-- 2 files changed, 3 insertions(+), 3 deletions(-) diff --git a/pytorch3d/csrc/rasterize_meshes/geometry_utils.h b/pytorch3d/csrc/rasterize_meshes/geometry_utils.h index c64b7dc4..e1342e33 100644 --- a/pytorch3d/csrc/rasterize_meshes/geometry_utils.h +++ b/pytorch3d/csrc/rasterize_meshes/geometry_utils.h @@ -271,7 +271,7 @@ T PointLineDistanceForward( const vec2 v1v0 = v1 - v0; const T l2 = dot(v1v0, v1v0); if (l2 <= kEpsilon) { - return sqrt(dot(p - v1, p - v1)); + return dot(p - v1, p - v1); } const T t = dot(v1v0, p - v0) / l2; diff --git a/pytorch3d/renderer/mesh/rasterize_meshes.py b/pytorch3d/renderer/mesh/rasterize_meshes.py index 99f3852d..aca2658f 100644 --- a/pytorch3d/renderer/mesh/rasterize_meshes.py +++ b/pytorch3d/renderer/mesh/rasterize_meshes.py @@ -445,8 +445,8 @@ def point_line_distance(p, v0, v1): v1v0 = v1 - v0 l2 = v1v0.dot(v1v0) # |v1 - v0|^2 - if l2 == 0.0: - return torch.sqrt((p - v1).dot(p - v1)) # v0 == v1 + if l2 <= kEpsilon: + return (p - v1).dot(p - v1) # v0 == v1 t = (v1v0).dot(p - v0) / l2 t = torch.clamp(t, min=0.0, max=1.0)