博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
点-线,线-线
阅读量:4113 次
发布时间:2019-05-25

本文共 1174 字,大约阅读时间需要 3 分钟。

直线的参数表示 P=p+t*v

///直线相交,求两条直线的交点///调用前需保证两直线有唯一的交点,且不重合Vector GetLineIntersection(Point p,Vector v,Point q,Vector w){    Vector u=p-q;    double t=Cross(w,u)/Cross(v,w);    return p+v*t;}///点到直线的距离///用叉积求三角形面积double  DistanceToLine(Point p,Point a,Point b){    Vector v1=b-a;    Vector v2=p-a;    return fabs(Cross(v1,v2))/Length(v1);}///点到线段的最短距离,注意分情况double DistanceToSegment(Point p,Point a,Point b){    if(a==b) return Length(p-a);    Vector v1=b-a,v2=p-a,v3=p-b;    if(dcmp(Dot(v1,v2))<0) return Length(v2);    if(dcmp(Dot(v1,v3))>0) return Length(v3);    return fabs(Cross(v1,v2))/Length(v1);}///求点在直线上的投影点坐标Point GetLine(Point p,Point a,Point b){    Vector v=b-a;    return a+v*(Dot(v,p-a)/Dot(v,v));}///判断线段相交///充要条件:每条线段的端点都在另一条线段的两侧(叉积符号不同)bool SegmentProperIntersection(Point a1,Point a2,Point b1,Point b2){    double c1=Cross(a2-a1,b1-a1),c2=Cross(a2-a1,b2-a1);    double c3=Cross(b2-b1,a1-b1),c4=Cross(b2-b1,a2-b1);    return dcmp(c1)*dcmp(c2)<0&&dcmp(c3)*dcmp(c4)<0;}///判断点是否在线段上bool OnSegment(Point p,Point a1,Point a2){    return dcmp(Cross(a1-p,a2-p))==0&&dcmp(Dot(a1-p,a2-p))<0;}///求多边形面积double PolyArea(Point *p,int n){    double area=0;    for(int i=1; i

转载地址:http://cfgsi.baihongyu.com/

你可能感兴趣的文章
Java8 HashMap集合解析
查看>>
自定义 select 下拉框 多选插件
查看>>
fastcgi_param 详解
查看>>
poj 1976 A Mini Locomotive (dp 二维01背包)
查看>>
MODULE_DEVICE_TABLE的理解
查看>>
db db2_monitorTool IBM Rational Performace Tester
查看>>
postgresql监控工具pgstatspack的安装及使用
查看>>
【JAVA数据结构】双向链表
查看>>
【JAVA数据结构】先进先出队列
查看>>
乘法逆元
查看>>
Objective-C 基础入门(一)
查看>>
Flutter Boost的router管理
查看>>
iOS开发支付集成之微信支付
查看>>
C++模板
查看>>
【C#】如何实现一个迭代器
查看>>
【C#】利用Conditional属性完成编译忽略
查看>>
DirectX11 光照演示示例Demo
查看>>
VUe+webpack构建单页router应用(一)
查看>>
Node.js-模块和包
查看>>
(python版)《剑指Offer》JZ01:二维数组中的查找
查看>>