geometry

# # Point and point

$\sqrt{(x_2 - x_1)^2 + (y_2 - y_1)^2}$

double p2p(Vector p1, Vector p2) {
return (p2 - p1).length();
}


# # Point and line

$\frac{|\vec{AB} \times \vec{AP}|}{\|\vec{AB}\|}$

double p2Line(Vector2 a, Vector2 b, Vector2 p) {
return abs((b - a).cross(p - a)) / (b - a).length();
}


# # Point and segment

double p2Seg(Vector2 a, Vector2 b, Vector2 p) {
if ((p - a).dot(b - a) < 0.0) return (p - a).length();
if ((p - b).dot(a - b) < 0.0) return (p - b).length();
return p2Line(a, b, p);
}


# # Segment and segment

double distance(Vector2 p1, Vector2 p2, Vector2 p3, Vector2 p4) {
double t3 = (p1.x - p2.x) * (p3.y - p1.y) + (p1.y - p2.y) * (p1.x - p3.x);
double t4 = (p1.x - p2.x) * (p4.y - p1.y) + (p1.y - p2.y) * (p1.x - p4.x);
double t1 = (p3.x - p4.x) * (p1.y - p3.y) + (p3.y - p4.y) * (p3.x - p1.x);
double t2 = (p3.x - p4.x) * (p2.y - p3.y) + (p3.y - p4.y) * (p3.x - p2.x);
if (t3 * t4 < 0 && t1 * t2 < 0) return 0.0;
double min_ = -1;
min_ = min<double>(p2Seg(p1, p2, p3), p2Seg(p1, p2, p4));
min_ = min<double>(min_, p2Seg(p3, p4, p1));
min_ = min<double>(min_, p2Seg(p3, p4, p2));
return min_;
}


Remote freelancer. A web and mobile application enginner.
Traveling around the world based on East Asia.
I'm looking forward to your job offers from all over the world!

Offer jobs or contact me!