常用几何关系算法 C++


目录  
 
 
㈠ 点的基本运算  
1. 平面上两点之间距离 1  
2. 判断两点是否重合 1  
3. 矢量叉乘 1  
4. 矢量点乘 2  
5. 判断点是否在线段上 2  
6. 求一点饶某点旋转后的坐标 2  
7. 求矢量夹角 2  
 
㈡ 线段及直线的基本运算  
1. 点与线段的关系 3  
2. 求点到线段所在直线垂线的垂足 4  
3. 点到线段的最近点 4  
4. 点到线段所在直线的距离 4  
5. 点到折线集的最近距离 4  
6. 判断圆是否在多边形内 5  
7. 求矢量夹角余弦 5  
8. 求线段之间的夹角 5  
9. 判断线段是否相交 6  
10.判断线段是否相交但不交在端点处 6  
11.求线段所在直线的方程 6  
12.求直线的斜率 7  
13.求直线的倾斜角 7  
14.求点关于某直线的对称点 7  
15.判断两条直线是否相交及求直线交点 7  
16.判断线段是否相交,如果相交返回交点 7  
 
㈢ 多边形常用算法模块  
1. 判断多边形是否简单多边形 8  
2. 检查多边形顶点的凸凹性 9  
3. 判断多边形是否凸多边形 9  
4. 求多边形面积 9  
5. 判断多边形顶点的排列方向,方法一 10  
6. 判断多边形顶点的排列方向,方法二 10  
7. 射线法判断点是否在多边形内 10  
8. 判断点是否在凸多边形内 11  
9. 寻找点集的graham算法 12  
10.寻找点集凸包的卷包裹法 13  
11.判断线段是否在多边形内 14  
12.求简单多边形的重心 15  
13.求凸多边形的重心 17  
14.求肯定在给定多边形内的一个点 17  
15.求从多边形外一点出发到该多边形的切线 18  
16.判断多边形的核是否存在 19  
 
㈣ 圆的基本运算  
1 .点是否在圆内 20  
2 .求不共线的三点所确定的圆 21  
 
㈤ 矩形的基本运算  
1.已知矩形三点坐标,求第4点坐标 22  
 
㈥ 常用算法的描述 22  
 
㈦ 补充  
1.两圆关系: 24  
2.判断圆是否在矩形内: 24  
3.点到平面的距离: 25  
4.点是否在直线同侧: 25  
5.镜面反射线: 25  
6.矩形包含: 26  
7.两圆交点: 27  
8.两圆公共面积: 28  
9. 圆和直线关系: 29  
10. 内切圆: 30  
11. 求切点: 31  
12. 线段的左右旋: 31  
13.公式: 32  
 

以下是部分算法,完整算法下载

为了赚点下载积分,请谅解^_^

/* 需要包含的头文件 */   
#include <cmath >   
  
/* 常用的常量定义 */   
const double    INF     = 1E200      
const double    EP      = 1E-10   
const int       MAXV    = 300   
const double    PI      = 3.14159265   
  
/* 基本几何结构 */   
struct POINT   
{   
    double x;   
    double y;   
    POINT(double a=0, double b=0) { x=a; y=b;} //constructor   
};   
struct LINESEG   
{   
    POINT s;   
    POINT e;   
    LINESEG(POINT a, POINT b) { s=a; e=b;}   
    LINESEG() { }   
};   
struct LINE           // 直线的解析方程 a*x+b*y+c=0  为统一表示,约定 a >= 0   
{   
   double a;   
   double b;   
   double c;   
   LINE(double d1=1, double d2=-1, double d3=0) {a=d1; b=d2; c=d3;}   
};   
  
/********************** 
 *                    *  
 *   点的基本运算     *  
 *                    *  
 **********************/   
  
double dist(POINT p1,POINT p2)                // 返回两点之间欧氏距离   
{   
    return( sqrt( (p1.x-p2.x)*(p1.x-p2.x)+(p1.y-p2.y)*(p1.y-p2.y) ) );   
}   
bool equal_point(POINT p1,POINT p2)           // 判断两个点是否重合    
{   
    return ( (abs(p1.x-p2.x)<EP)&&(abs(p1.y-p2.y)<EP) );   
}   
/******************************************************************************  
r=multiply(sp,ep,op),得到(sp-op)和(ep-op)的叉积  
r>0:ep在矢量opsp的逆时针方向;  
r=0:opspep三点共线;  
r<0:ep在矢量opsp的顺时针方向  
*******************************************************************************/   
double multiply(POINT sp,POINT ep,POINT op)   
{   
    return((sp.x-op.x)*(ep.y-op.y)-(ep.x-op.x)*(sp.y-op.y));   
}   
/*  
r=dotmultiply(p1,p2,op),得到矢量(p1-op)和(p2-op)的点积,如果两个矢量都非零矢量  
r<0:两矢量夹角为锐角; 
r=0:两矢量夹角为直角; 
r>0:两矢量夹角为钝角  
*******************************************************************************/   
double dotmultiply(POINT p1,POINT p2,POINT p0)   
{   
    return ((p1.x-p0.x)*(p2.x-p0.x)+(p1.y-p0.y)*(p2.y-p0.y));   
}   
/******************************************************************************  
判断点p是否在线段l上 
条件:(p在线段l所在的直线上) && (点p在以线段l为对角线的矩形内) 
*******************************************************************************/   
bool online(LINESEG l,POINT p)   
{   
    return( (multiply(l.e,p,l.s)==0) &&( ( (p.x-l.s.x)*(p.x-l.e.x)<=0 )&&( (p.y-l.s.y)*(p.y-l.e.y)<=0 ) ) );   
}   
// 返回点p以点o为圆心逆时针旋转alpha(单位:弧度)后所在的位置   
POINT rotate(POINT o,double alpha,POINT p)   
{   
    POINT tp;   
    p.x-=o.x;   
    p.y-=o.y;   
    tp.x=p.x*cos(alpha)-p.y*sin(alpha)+o.x;   
    tp.y=p.y*cos(alpha)+p.x*sin(alpha)+o.y;   
    return tp;   
}   

 

  • 1
    点赞
  • 4
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
㈠ 点的基本运算 1. 平面上两点之间距离 1 2. 判断两点是否重合 1 3. 矢量叉乘 1 4. 矢量点乘 2 5. 判断点是否在线段上 2 6. 求一点饶某点旋转后的坐标 2 7. 求矢量夹角 2 ㈡ 线段及直线的基本运算 1. 点与线段的关系 3 2. 求点到线段所在直线垂线的垂足 4 3. 点到线段的最近点 4 4. 点到线段所在直线的距离 4 5. 点到折线集的最近距离 4 6. 判断圆是否在多边形内 5 7. 求矢量夹角余弦 5 8. 求线段之间的夹角 5 9. 判断线段是否相交 6 10.判断线段是否相交但不交在端点处 6 11.求线段所在直线的方程 6 12.求直线的斜率 7 13.求直线的倾斜角 7 14.求点关于某直线的对称点 7 15.判断两条直线是否相交及求直线交点 7 16.判断线段是否相交,如果相交返回交点 7 ㈢ 多边形常用算法模块 1. 判断多边形是否简单多边形 8 2. 检查多边形顶点的凸凹性 9 3. 判断多边形是否凸多边形 9 4. 求多边形面积 9 5. 判断多边形顶点的排列方向,方法一 10 6. 判断多边形顶点的排列方向,方法二 10 7. 射线法判断点是否在多边形内 10 8. 判断点是否在凸多边形内 11 9. 寻找点集的graham算法 12 10.寻找点集凸包的卷包裹法 13 11.判断线段是否在多边形内 14 12.求简单多边形的重心 15 13.求凸多边形的重心 17 14.求肯定在给定多边形内的一个点 17 15.求从多边形外一点出发到该多边形的切线 18 16.判断多边形的核是否存在 19 ㈣ 圆的基本运算 1 .点是否在圆内 20 2 .求不共线的三点所确定的圆 21 ㈤ 矩形的基本运算 1.已知矩形三点坐标,求第4点坐标 22 ㈥ 常用算法的描述 22 ㈦ 补充 1.两圆关系: 24 2.判断圆是否在矩形内: 24 3.点到平面的距离: 25 4.点是否在直线同侧: 25 5.镜面反射线: 25 6.矩形包含: 26 7.两圆交点: 27 8.两圆公共面积: 28 9. 圆和直线关系: 29 10. 内切圆: 30 11. 求切点: 31 12. 线段的左右旋: 31

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值