//代码参考与kuangbin的模板#include<bits/stdc++.h>
using namespace std;const double eps = 1e-8;
const double inf = 1e20;
const double pi = acos(-1.0);
const int maxp = 1010;int sgn(double x) { //判断if(fabs(x) < eps) return 0;if(x < 0) return -1;return 1;
}
//
inline double sqr(double x) {return x*x;
}
//
struct point {double x, y;point() {};//point(double _x, double _y) {x = _x;y = _y;}//void input() {scanf("%lf %lf", &x, &y);}void output() {printf("%.2f %.2f\n", x, y);}//bool operator == (point b) const {return sgn(x - b.x) && sgn(y - b.y) == 0;}//操作符重载bool operator < (point b) const {return sgn(x - b.x) == 0 ? sgn(y - b.y) < 0 : x < b.x;}//点积double operator *(const point &b)const {return x * b.x + y * b.y;}//叉积double operator ^(const point &b) const {return x*b.y - y * b.x;}//重载减号point operator -(const point &b) const {return point(x - b.x, y - b.y);}//重载加号point operator +(const point &b) const {return point(x + b.x, y + b.y);}//point operator *(const double k) const {return point(x * k, y * k);}//point operator /(const double k) const {return point(x / k, y / k);}//double distance(point b) {return hypot(x-b.x, y-b.y);}double len() {return hypot(x, y);}//double len2() {return x*x + y*y;}
};struct line {point s, e;line() {};line(point _s, point _e) {s = _s;e = _e;}//bool operator == (line v) {return (s == v.s) && (e == v.e);}//根据一个点和倾斜角 angle 确定直线, 0 《= angle 《 piline(point p, double angle) {s = p;if(sgn(angle - pi/2) == 0) {e = (s + point (0, 1));} else {e = (s + point(1, tan(angle)));}}//ax + by + c = 0line (double a, double b, double c) {if(sgn(a) == 0) {s = point(0, -c/b);e = point(1, -c/b);} else if(sgn(b) == 0) {s = point(-c/a, 0);e = point(-c/a, 1);} else {s = point(0, -c/b);e = point(1, (-c-a)/b);}}void input() {s.input();e.input();}void adjust() {if(e < s) swap(s,e);}//求线段长度double length() {return s.distance(e);}//返回线段倾斜角0《= angle 《=pidouble angle() {double k = atan2(e.y - s.y, e.x - s.x);if(sgn(k) < 0 ) k += pi;if(sgn(k - pi) == 0) k -= pi;return k;}//点和直线的关系  1, 在左侧, 2.在右侧 3.在直线上int relation(point p) {int c = sgn((p-s)^(e-s));if(c < 0) return 1;if(c > 0) return 2;if(c == 0) return 3;}//点在线段上的判断bool point_on_seg(point p) {return sgn((p - s)^(e - s)) == 0 && sgn((p - s) * (p - e)) <= 0;}//两向量平行 (对应直线平行或者重合bool parallel(line v) {   //差集为0return sgn((e - s)^(v.e - v.s)) == 0;}//两线段相交的判断 0, 不相交 1.非规范相交  2.规范相交int seg_cross_seg(line v) {int d1 = sgn((e - s) ^ (v.s - s));int d2 = sgn((e - s) ^ (v.e - s));int d3 = sgn((v.e - v.s) ^ (s-v.s));int d4 = sgn((v.e - v.s) ^ (e-v.s));if((d1 ^ d2) == -2 &&(d3 ^ d4) == -2) return 2;return (d1 == 0 && sgn((v.s - s) * (v.s - e)) <= 0) ||(d2 == 0 && sgn((v.e - s) * (v.e - e)) <= 0) ||(d3 == 0 && sgn((s - v.s) * (s - v.e)) <= 0) ||(d4 == 0 && sgn((s - v.e) * (e - v.e)) <= 0);}//直线和线段判断相交  0。 不相交 1.非规范相交  2.规范相交int line_cross_seg(line v){int d1 = sgn((e-s)^(v.s-s));int d2 = sgn((e-s)^(v.e-s));if( (d1^d2) == -2) return 2;return (d1 == 0 || d2 == 0);}//两直线关系  0 平行 1 重合 2 相交int line_cross_line(line v){if((*this).parallel(v))return v.relation(s) == 3;return 2;}//求两条直线的焦点 前提应该保证两条直线不平行或者重合point cross_point(line v){double a1 = (v.e - v.s) ^ (s - v.s);double a2 = (v.e - v.s) ^ (e - v.s);return point((s.x*a2 - e.x*a1)/(a2-a1), (s.y*a2-e.y*a1) / (a2 - a1));}//点到直线的距离double dis_point_to_line(point p) {return fabs((p - s) ^ (e - s)) / length();}//点到线段的距离double dis_point_to_seg(point p) {if(sgn((p - s) * (e - s)) < 0 || ((p - e) * (s - e)) < 0){return min(p.distance(s), p.distance(e));}return dis_point_to_line(p);}//返回线段到线段的距离,  前提两线段不相交 相交距离就是0了。double dis_seg_to_seg(line v){return min(min(dis_point_to_seg(v.s), dis_point_to_seg(v.e)), min(v.dis_point_to_seg(s), v.dis_point_to_seg(e)));}//返回点p在直线上的投影point line_prog(point p){return s + (((e-s)*((e-s)*(p-s)))/((e-s).len2()));}//返回点p在直线上的对称点point symmetry_point(point p){point q = line_prog(p);return point(2 * q.x - p.x, 2 * q.y - p.y);}};int main() {// freopen("in.txt", "r",stdin);point A,B,C,D;int n;scanf("%d", &n);A.input();double maxx = -1;double minn = 1e9;B.input();D = B;line x;maxx = max(maxx, A.distance(B));for(int i = 0; i < n - 1; i++) {C.input();maxx = max(maxx, A.distance(C));x.s = C;x.e = B;minn = min(minn, x.dis_point_to_seg(A));B = C;}x.s = C;x.e = D;minn = min(minn, x.dis_point_to_seg(A));printf("%.7f\n", (maxx * maxx - minn * minn) * pi);}

点到线段直线的距离, 直线与直线的关系 直线与线段的关系相关推荐

  1. python计算点到直线的距离_Python求平面内点到直线距离的实现

    近期遇到个问题,需要计算平面内点到直线的距离,发现数学知识都还给老师了,度娘后找到计算方法,特此记录. 点到直线的计算公式: 通过公式推导,得到信息: a:直线斜率 b:固定值-1 c:直线截距b 转 ...

  2. c 语言已知两点求第三点,已知3点座标,求第一点到第二点和第三点构成的直线的距离。...

    已知3点座标,求第一点到第二点和第三点构成的直线的距离.以下文字资料是由(历史新知网www.lishixinzhi.com)小编为大家搜集整理后发布的内容,让我们赶快一起来看一下吧! 已知3点座标,求 ...

  3. 叉积求点到平面距离_OpenCV计算点到直线的距离 数学法

    我们在检测图像的边缘图时,有时需要检测出直线目标,hough变换检测出直线后怎么能更进一步的缩小区域呢?其中,可以根据距离来再做一判断,就涉及到了点与直线的距离问题. 点到直线距离代码如下: //== ...

  4. 点到线段的距离_直线垂直,垂线的性质,点到直线的距离

    欢迎关注公z号:沈阳奥数 两条直线相交所成的四个角中,有一个角是直角时,就说这两条直线互相垂直,其中一条直线叫做另一条直线的垂线,它们的交点叫垂足. 如图,直线AB与CD垂直于点E,记作:AB⊥CD于 ...

  5. 点到直线的距离c语言程序,点到线段的距离 题解(C++)

    初步分析 这道题之前有<点到直线的距离>一题. 如图,我们不妨来下个定义(名字是乱起的,如果有雷同就以以下定义为准): 对于任意线段l,在其两个端点上分别作垂直于l的直线,若点在两直线之间 ...

  6. 过直线上一点画垂线图_苏教版四年级数学上册8.5认识垂直、点到直线的距离微课视频 | 练习...

    微课视频第一课时 微课视频第二课时 同步练习 参考答案 教学设计 垂直 教材第89~91页的内容. 1.结合实际情境和操作活动,认识垂直. 2.能借助直尺.三角尺.量角器等工具画出已知直线的垂线,并理 ...

  7. 使用向量的方法来计算点到直线的距离

    使用向量的方法效率更高,更简单. 首先要了解什么是向量,什么是向量的模 主要用到了解析几何里的几个公式 a * b = | a | * | b | * cos(x),其中x为向量a,b的夹角 | a ...

  8. 三维向量的简单运算(点积、叉积及点到直线的距离)

    三维向量的点积(Dot Product) 点乘比较简单,是相应元素的乘积的和:    V1( x1, y1, z1)·V2(x2, y2, z2) = x1*x2 + y1*y2 + z1*z2; 注 ...

  9. 点到直线的距离c语言程序,计算几何算法2. 关于线和点到线的距离(二维和三维)...

    关于直线 直线方程 点到直线的距离 用两点表示的直线 2d隐式表示的直线的情形 参数方程表示的直线 一个点到射线或线段的距离 代码实现 距离计算是计算机图形学和计算几何的基本问题,而且有很多关于这方面 ...

最新文章

  1. day13 内置函数一
  2. ansible配置详解及基本示例
  3. 数据库优化的几条基本策略
  4. 如何判断自己的WP7 SDK版本
  5. jqurey datatables属性
  6. css html基础书,htmlcss基础知识汇总,新人必看!
  7. 编写优雅代码,从挖掉恶心的if/else 开始
  8. 安装python遇到错误_安装Python时遇到如下问题,解决方案
  9. windowsC盘msp文件清理
  10. 一个通用的单元测试框架的思考和设计06-实现篇-自动管理测试数据-如何临时关闭数据外键约束...
  11. Proteus8.10软件安装教程
  12. java uploadify 参数_Uploadify的一些参数
  13. U盘量产工具_修复、U盘写保护无法格式化、U盘文件乱码格式
  14. 2019年上半年软件设计师上午真题及答案解析
  15. 小小一方士 C# Async\Await 之 上传/下载文件进度条实现原理
  16. Tilera 服务器上OpenJDK的安装尝试
  17. 人民日报聚焦绿之韵,树立民族品牌文化之魂
  18. 用pymongo对mongoDB增删改查(CRUD)
  19. rtmp一些状态信息详解-as连接FMS服务器报错状态汇总~~
  20. uniapp微信小程序打电话

热门文章

  1. 通过蓝奏云与云端检测来实现软件自动更新
  2. R语言笔记4_模型诊断(关于残差)
  3. android 手势放缩_Android 手势识别—缩放
  4. package import
  5. 影响企业未来的十大管理理念
  6. C#--窗体控件(选择类控件)
  7. 新绝代双骄3终极全攻略5
  8. ZZULIOJ:1053: 正弦函数
  9. Jeff的错题集(九):奥利给!
  10. 易语言之ocr自动识别验证码dll文件