diff options
author | Alex Auvolat <alex.auvolat@ens.fr> | 2015-02-02 00:51:55 +0100 |
---|---|---|
committer | Alex Auvolat <alex.auvolat@ens.fr> | 2015-02-02 00:51:55 +0100 |
commit | 837dc3e832b44e7ce74b212c239c99acf3fcf9a2 (patch) | |
tree | 955aa6bbd9ab05ccf61fff99c1f239e6f9aa72f3 /geom.hpp | |
parent | cbcc1513db57c2086fbfc469b3bb064975b297b6 (diff) | |
download | Robotique-Projet-837dc3e832b44e7ce74b212c239c99acf3fcf9a2.tar.gz Robotique-Projet-837dc3e832b44e7ce74b212c239c99acf3fcf9a2.zip |
Fix
Diffstat (limited to 'geom.hpp')
-rw-r--r-- | geom.hpp | 10 |
1 files changed, 5 insertions, 5 deletions
@@ -85,9 +85,10 @@ struct line { line(double aa, double bb, double cc) : a(aa), b(bb), c(cc) {} line(vec p1, vec p2) { - a = p1.x-p2.x ; - b = p1.y-p2.y ; - c = p1.x*(p2.x-p1.x)+p1.y*(p2.y-p1.y); + vec d = p2 - p1; + a = d.y ; + b = -d.x ; + c = - (p1.x * a + p2.x * b); } bool on_line(vec p) const { @@ -129,8 +130,7 @@ struct segment { double dist(vec p) const { double scal = vec::dot(b-a, p-a); double sqn = (b-a).sqnorm(); - if (scal > sqn) return (p-b).norm(); - if (scal < 0) return (p-a).norm(); + if (scal > sqn || scal < 0) return std::min((p-b).norm(), (p-a).norm()); return line(a,b).dist(p); } }; |