题目链接: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;
}

--->

好吧,还需要好好的学习。。。

URAL 1348. Goat in the Garden 2[求点到线段的距离]相关推荐

  1. hdu 1174:爆头(计算几何,三维叉积求点到线的距离)

    爆头 Time Limit: 2000/1000 MS (Java/Others)    Memory Limit: 65536/32768 K (Java/Others) Total Submiss ...

  2. python 求点到线段距离

    1 点和线段的参数 # 点的坐标 p = [0,0]# 线段的参数 # 线段的端点1 a = [-1,1] # 线段的端点2 b = [1,1] 2 求取距离 import numpy as np d ...

  3. python输入两点坐标求距离_大一Python课的习题,输入两点,建立起直线方程y=kx+b。输入第3点,求点到直线的距离。这怎...

    展开全部 # -*- coding:utf-8 -*- import math point_a=raw_input('please input point A coordinates: For Exa ...

  4. 关于知道两点求直线方程 求点到直线的距离

    已知直线上的两点P1(X1,Y1) P2(X2,Y2), P1 P2两点不重合.则直线的一般式方程AX+BY+C=0中,A B C分别等于: A = Y2 - Y1 B = X1 - X2 C = X ...

  5. matlab两点间的球面距离,用MATLAB求点到椭球面距离已知如图a、b和点的位置,求点到球面的距离。最好是用MATLAB的。谢谢~...

    这个应当不难:可以采用参数方程画出椭圆,然后利用点坐标到参数方程的距离解决:问题是楼主的表达有问题,如果是点到线的距离就有多个值,(准确的说是个函数),例如,原点(0,0)到椭圆右端点距离是a/2,到 ...

  6. 【学习笔记】Matlab中求点到直线的距离

    点到直线 假设直线L1: A x + B y + C = 0 Ax+By+C=0 Ax+By+C=0,直线外一点 ( x 0 , y 0 ) (x_0,y_0) (x0​,y0​),点到直线的垂直距离 ...

  7. 爆头(叉乘求点到直线的距离)

    Time Limit: 2000/1000 MS (Java/Others)    Memory Limit: 65536/32768 K (Java/Others) Total Submission ...

  8. hdu4454 三分 求点到圆,然后在到矩形的最短路

    题意:       求点到圆,然后在到矩形的最短路. 思路:       把圆切成两半,然后对于每一半这个答案都是凸性的,最后输出两半中小的那个就行了,其中有一点,就是求点到矩形的距离,点到矩形的距离 ...

  9. 如何用法向量求点到平面距离_支持向量机(SVM)

    最近完成的一个项目用到了SVM,之前也一直有听说支持向量机,知道它是机器学习中一种非常厉害的算法.利用将近一个星期的时间学习了一下支持向量机,把原理推了一遍,感觉支持向量机确实挺厉害的,尤其是核函数变 ...

最新文章

  1. 1000亿个整数,请找出其中最大的100个
  2. C++中的static函数和extern关键字
  3. numpy.tile 阵列
  4. 数据挖掘导论读书笔记7 Apriori算法
  5. 浅谈SQL Server数据库分页
  6. adsl拨号无公网地址如何用ddns_【好玩的网络-第5期】分享自编ddns程序,17行代码轻松实现免费ddns,服务器或nas玩家的福音...
  7. Apache Drill:如何创建新功能?
  8. LeetCode 6060. 找到最接近 0 的数字
  9. Leaf:美团分布式ID生成服务开源 1
  10. 二分查找和二叉查找树
  11. 字典使用与内部实现原理
  12. 还是觉得应该动手写点东西....
  13. Delphi XE 10.1 Can't bind address: Address already in use. Exiting.
  14. VS Code 轻量级插件推荐
  15. UVA12541 LA6148 Birthdates【最值】
  16. MySQL免费社区版安装步骤详解
  17. Silverlight IReader阅读器第二版
  18. java面试问项目中遇到的问题,涨知识
  19. OpenCASCADE:OCCT应用框架OCAF之XML支持
  20. 寒山是一位高僧,拾得是一位和尚。

热门文章

  1. iOS学习笔记-091.彩票06——我的彩票
  2. 【建站篇】如何将本地搭建的织梦站点上传到服务器空间?
  3. JZOJ 2018.07.15【2018提高组】模拟C组
  4. Windows XP 安装 MTP 驱动
  5. 初级JAVA程序员应该掌握的NPE知识
  6. 【论文阅读】【ViT系列】ViT:一张图片用于大规模图像识别的Transformers(手动翻译)
  7. 使用深度学习实现iPhone X的FaceID
  8. 蜂蜜什么时候喝,才可以获得蜂蜜更大的好处?真可以治疗咳嗽?
  9. 微软认证系统工程师(MCSE)
  10. 微软服务器认证找工作,微软认证技术工程师MCTS