URAL 1348. Goat in the Garden 2[求点到线段的距离]
来源:互联网 发布:java文件编译成class 编辑:程序博客网 时间:2024/05/16 01:17
题目链接:http://acm.timus.ru/problem.aspx?space=1&num=1348
题目的意思是:求一个点到线段的最短距离和最长距离。。
最长距离比较容易,就是求点到线段两个端点较长的那个距离就是ans。
最短距离就比较有意思了。。。
可能的情况就是点到线段的垂线的垂足在线段内,还有就是垂足在线段外。。。
在线段内的话,那么应用叉积求面积+底面长度可以求得垂线长度也就是最短距离。。
如果在线段外的话,最短距离就是点到线段的两个端点的最小值。。
那么问题就来了。。怎么判断垂足在线段内还是在线段外的呢??
详细见代码。 - - 。。。
Code:
#include <iostream>#include <algorithm>#include <cstdio>#include <cstring>#include <cmath>using namespace std;const double eps = 1e-8;const double pi = acos(-1);//点struct POINT{ double x, y; POINT(){ } POINT(double a, double b){ x = a; y = b; }};//线段struct Seg{ POINT a, b; Seg() { } Seg(POINT x, POINT y){ a = x; b = y; }};//直线struct Line{ POINT a, b; Line() {} Line(POINT x, POINT y){ a = x; b = y; }};//叉乘double cross(POINT o, POINT a, POINT b){ return (a.x - o.x) * (b.y - o.y) - (b.x - o.x) * (a.y - o.y);}//求两点间的距离double dis(POINT a, POINT b){ return sqrt((a.x - b.x) * (a.x - b.x) + (a.y - b.y) * (a.y - b.y));}Seg s;POINT p;double L;//点到直线的距离..double PointToLine(POINT p, Line l){ return fabs(cross(p, l.a, l.b)) / dis(l.a, l.b);}//线段到直线的距离..double PointToSeg(POINT p, Seg s){ POINT tmp = p; tmp.x += s.a.y - s.b.y; tmp.y += s.b.x - s.a.x; if(cross(s.a, p, tmp) * cross(s.b, p, tmp) >= 0){ return min(dis(p, s.a), dis(p, s.b)); } return PointToLine(p, Line(s.a, s.b));}void solve(){ double ans1 = PointToSeg(p, s), ans2 = max(dis(p, s.a), dis(p, s.b)); printf("%.2lf\n%.2lf\n", ans1 > L ? ans1 - L : 0, ans2 > L ? ans2 - L : 0); return ;}int main(){// freopen("11.txt", "r", stdin); while(~scanf("%lf %lf %lf %lf", &s.a.x, &s.a.y, &s.b.x, &s.b.y)){ scanf("%lf %lf %lf", &p.x, &p.y, &L); solve(); } return 0;}
--->
好吧,还需要好好的学习。。。
0 0
- URAL 1348. Goat in the Garden 2[求点到线段的距离]
- timus 1348. Goat in the Garden 2 URAL 点到线段的距离
- URAL 1348 Goat in the Garden 2(点到线段的距离)
- URAL 1348 Goat in the Garden 2(点到线段的距离)
- URAL 1348 Goat in the Garden 2(点到线段的距离)
- ural 1348. Goat in the Garden 2
- 【点到线段距离】URAL - 1348 Goat in the Garden 2
- sgu 1348 Goat in the Garden 2【点到线段的距离】
- ural 1084. Goat in the Garden
- ural 1084 Goat in the Garden
- Goat in the Garden (ural 1348)
- ural 1084. Goat in the Garden math
- Ural-1084. Goat in the Garden(计算几何)
- URAL 1084 || Goat in the Garden(同中心矩形与圆的公共面积
- URAL 1348 Goat in the Garden 2计算几何(解题报告)
- Ural1084. Goat in the Garden
- timus 1084. Goat in the Garden URAL 解题报告 计算几何
- URAL Goat in the Garden(圆与矩形求交集面积)
- Ubuntu下安装wine详细介绍
- 标准C++ I/O库 迭代器让数据自由流动 V8
- linux常用命令-帮助命令-授之以渔
- ural 1109 Conference (二分图匹配)
- 指针和const分析
- URAL 1348. Goat in the Garden 2[求点到线段的距离]
- 如何低成本挖掘App商店的免费资源
- Value copy & reference copy (C#)
- Shell脚本调试技术
- Scan line of Bitmap
- 石锅鱼培训师傅教你石锅鱼的做法过程
- 最长递增子序列的长度
- 北京大学Online Judge 之 “求高精度幂(ID1001)”解题报告
- Struts2-----4、Struts2的常量配置