关于计算几何
来源:互联网 发布:js美化工具 编辑:程序博客网 时间:2024/06/11 02:10
#include <math.h>#include <algorithm>#define MIN 0.0000001#define MINF -0.0000001double kkk(double x1,double y1,double x2,double y2){ // 斜率return ( (y1 - y2) / (x1 - x2) );}double length(double x1,double y1,double x2,double y2,double x0,double y0){// (x0,y0)点到直线(两点式(x1,y1),(x2,y2))的距离if (x1 - x2 < MIN && x1 - x2 > MINF) return abs(x1-x0); // 如果斜率不存在double k = kkk(x1,y1,x2,y2);return (abs(k*x0 - y0 + y2 - k*x2)) / (sqrt(k*k + 1));}double lengthline(double x1,double y1,double x2,double y2){ // 计算两点(x1,y1)(x2,y2)之间线段的长度return sqrt( (x1-x2)*(x1-x2) + (y1-y2)*(y1-y2) );}double vector(double x1,double y1,double x2,double y2){ // 传进来的值为两个向量(x1,y1)and(x2,y2) 注意方向// 计算向量积return (x1*x2 + y1*y2);}今天做了一个关于几何的题目,总结一下。
主要就是比较double型的数有点不同。直接是不能进行比较的,据说的因为浮点型的数后面几位在内存中是不稳定的。
判断两线段是否相交,运用了二维向量的叉积+跨立实验
//判断两线段是否相交double XJ(POINT p0,POINT p1, POINT p2,POINT p3){// 一般情况下计算 p0 p1 X p2 p3 的叉积// (p1.x-p0.x, p1.y-p0.y) vector|p0p1|// (p3.x-p2.x, p3.y-p2.y) vector|p2p3|double res = (p1.x-p0.x)*(p2.y-p0.y) - (p3.x-p2.x)*(p3.y-p2.y);return res;}int XJ(POINT p0,POINT p1, POINT p2){// p0 p1 -> p0 p2 计算叉积// (p1.x-p0.x, p1.y-p0.y) vector|p0p1|// (p2.x-p0.x, p2.y-p0.y) vector|p0p2|double res = (p1.x-p0.x)*(p2.y-p0.y) - (p2.x-p0.x)*(p1.y-p0.y);return (res > infiniteS)?(1):(-1);}bool Segment(POINT a, POINT b, POINT c, POINT d){// 说明: 1^-1=-2, 存在两个跨立则判定为线段相交return ((XJ(a,b,c)^XJ(a,b,d))==-2) && ((XJ(a,c,d)^XJ(b,c,d))==-2);}
- 关于计算几何
- 关于计算几何
- 关于计算几何
- 关于计算几何
- 关于计算几何一些算法
- 计算几何:关于求多边形的重心
- 计算几何几何函数库
- 计算几何-几何库
- 计算几何
- 计算几何
- 计算几何
- 计算几何
- 计算几何
- 计算几何
- 计算几何
- 计算几何
- 计算几何
- 计算几何
- 字符设备驱动
- Oralce sqlplus优化
- 算法导论第十三章--红黑树C++代码实现
- Access数据库如何获取刚添加记录的ID(主键,自动编号)
- VerticalSeekBar 垂直拖动条的实现
- 关于计算几何
- 可拖动图片
- 博客新开致辞
- c程序按行读取文件
- 数据挖掘
- 如何学习总线技术
- 在 CentOS 6.2 上安装和配置 KVM
- 关于openstack项目不错的个人blog和站点 http://bbs.linuxtone.org/thread-16007-1-1.html
- 实现单链表的逆置