• 大小: 8KB
    文件类型: .zip
    金币: 2
    下载: 0 次
    发布日期: 2024-02-02
  • 语言: C/C++
  • 标签: 基本算法  

资源简介

C++语言实现一些基本算法(两点距离、点是否在直线上、点与直线的关系、两直线的夹角、两直线的交点、两个举行的重合面积等等)

资源截图

代码片段和文件信息


#include 
#include 
#include 
#include 
#include 
using namespace std;

#define PI 3.141592653

struct QUICKSORT
{
    int iIndex;
    float fAngle;

    QUICKSORT(int iIndex float fAngle)
    {
        this->iIndex = iIndex;
        this->fAngle = fAngle;
    }
    QUICKSORT() {memset(this 0 sizeof(*this));}
};

//定义点结构体
struct myPoint
{
    int x; //点的x坐标
    int y; //点的y坐标

    myPoint(){memset(this 0 sizeof(*this));}
    myPoint(int x int y)
    {
        this->x = x;
        this->y = y;
    }

    bool operator==(const myPoint &other) const
    {
        return (this->x == other.x && this->y == other.y);
    }
};

/********************************************************************
 * 函数名称 : segmentLength
 * 函数功能 : 求两点的长度(勾股定理)
 * 输入参数1: pt1 第一个点
 * 输入参数2: pt2 第二个点
 * 输出参数: 无
 * 返回参数: pt1到pt2的距离
 * 日   期: 2018年09月13日
 * 作   者: mark-plus
********************************************************************/
float segmentLength(const myPoint &pt1 const myPoint &pt2)
{
    float x = fabs(pt1.x - pt2.x);
    float y = fabs(pt1.y - pt2.y);
    float fLength = sqrt((x * x + y * y));

    return fLength;
}

/********************************************************************
 * 函数名称 : pointOnSegment
 * 函数功能 : 判断点是否在线段上
 * 输入参数1: pt1 线段的第一个点
 * 输入参数2: pt2 线段的第二个点
 * 输入参数3: ptNode 需要判断的点
 * 输出参数: 无
 * 返回参数: true:点ptNode在线段上 false:点ptNode在在线段上
 * 日   期: 2018年09月13日
 * 作   者: mark-plus
********************************************************************/
bool pointOnSegment(const myPoint &pt1 const myPoint &pt2 const myPoint &ptNode)
{
    float a = segmentLength(pt1 pt2);
    float b= segmentLength(pt1 ptNode);
    float c= segmentLength(pt2 ptNode);

    if (a == (b +c)) return true;
    else return false;
}

/********************************************************************
 * 函数名称 : pointOnSegmentOutSide
 * 函数功能 : 判断某个点是否在线段外
 * 输入参数1: pt1 线段的第一个点
 * 输入参数2: pt2 线段的第二个点
 * 输入参数3: ptNode 需要判断的点
 * 输出参数: 无
 * 返回参数: true:点ptNode在线外 false:点ptNode在线上
 * 日   期: 2018年09月13日
 * 作   者: mark-plus
********************************************************************/
bool pointOnSegmentOutSide(const myPoint pt1 const myPoint pt2 const myPoint ptNode)
{
    float a = segmentLength(pt1 pt2);
    float b= segmentLength(pt1 ptNode);
    float c= segmentLength(pt2 ptNode);

    if (b > a || c > a) return false;
    else return true;
}

/********************************************************************
 * 函数名称 : intersect
 * 函数功能 : 求两直线的交点(参考了Qt里面两直线求交点的算法)
 * 输入参数1: pt1 直线1的第1个点
 * 输入参数2: pt2 直线1的第2点
 * 输入参数3: pt3 直线2的第1个点
 * 输入参数4: pt4 直线2的第2个点
 * 输出参数: ptNode 直线1和直线2的交点
 * 返回参数: true:直线1和直线2有交点 false:true:直线1和直线2没有交点
 * 日   期: 2018年09月13日
 * 作   者: mark-plus
********************************************************************/
bool intersect(const myPoint &pt1 const myPoint &pt2 const myPoint &pt3 const myPoint &pt4 myPoint &ptNode)
{
    myPoint a(pt2.x - pt1.x pt2.y - pt1.y);
    myPoin

 属性            大小     日期    时间   名称
----------- ---------  ---------- -----  ----
     目录           0  2018-09-14 17:47  algorithm\
     文件          26  2018-09-14 14:29  algorithm\algorithm.pro
     文件       14177  2018-09-14 17:47  algorithm\algorithm.pro.user
     文件       24956  2018-09-14 16:13  algorithm\main.cpp

评论

共有 条评论