From 94466745bb6491449d4d71ca88b4bfdf823088e4 Mon Sep 17 00:00:00 2001 From: Podgorskiy Date: Wed, 21 Feb 2018 23:18:25 -0500 Subject: [PATCH] A tiny optimization to ImLineClosestPoint. Removed unnecessary sqrtf call. ab_lenSqr -> ab_len_sqr Moved line where ab_len_sqr is computed after the first return --- imgui.cpp | 7 +++---- 1 file changed, 3 insertions(+), 4 deletions(-) diff --git a/imgui.cpp b/imgui.cpp index d6d9f40f6..3451eb9fa 100644 --- a/imgui.cpp +++ b/imgui.cpp @@ -950,14 +950,13 @@ ImVec2 ImLineClosestPoint(const ImVec2& a, const ImVec2& b, const ImVec2& p) { ImVec2 ap = p - a; ImVec2 ab_dir = b - a; - float ab_len = sqrtf(ab_dir.x * ab_dir.x + ab_dir.y * ab_dir.y); - ab_dir *= 1.0f / ab_len; float dot = ap.x * ab_dir.x + ap.y * ab_dir.y; if (dot < 0.0f) return a; - if (dot > ab_len) + float ab_len_sqr = ab_dir.x * ab_dir.x + ab_dir.y * ab_dir.y; + if (dot > ab_len_sqr) return b; - return a + ab_dir * dot; + return a + ab_dir * dot / ab_len_sqr; } bool ImTriangleContainsPoint(const ImVec2& a, const ImVec2& b, const ImVec2& c, const ImVec2& p)