double dotMulti(Point e1,Point e2,Point s=org)
{
return ((e1.x-s.x)*(e2.x-s.x)+(e1.y-s.y)*(e2.y-s.y));
}
double dist(Point a,Point b=org)
{
return sqrt(pow(a.x-b.x,2)+pow(a.y-b.y,2));
}
double relation(Point a,Line l)
{
return dotMulti(l.ep,a,l.sp)/(dist(l.sp,l.ep)*dist(l.sp,l.ep));
}
Point perpendicular(Point a,Line l)
{
double r=relation(a,l);
return Point(l.sp.x+(l.ep.x-l.sp.x)*r,l.sp.y+(l.ep.y-l.sp.y)*r);
}