使用C++判断一个点与圆的位置关系

代码

其实即使一个简单的类的操作,定义一个坐标类和一个圆类就可以解决,代码如下:

#include <iostream>
#include <cmath>

class Point{
public:
    //x点坐标
    double x;
    //y点坐标
    double y;
    Point():x(0),y(0){}
    Point(double X, double Y):x(X),y(Y){}
    ~Point(){}
};

class AdvCircle{
public:
    AdvCircle():r(0),pos(0,0){}
    AdvCircle(double X, double Y, double R):pos(X,Y),r(R){}
    ~AdvCircle(){}
    //判断是否在圆内
    bool IsInCircle(const Point& point)
    {
        //注意:这里需要将类型强制转换成double,否则判断不准确
        return double_t(pow(point.x - this->pos.x,2) + pow(point.y - this->pos.y,2)) - pow(this->r,2) < 0 ;
    }
    //判断是否在圆上
    bool IsOnCircle(const Point& point)
    {
        //注意:这里需要将类型强制转换成double,否则判断不准确
        return double_t(pow(point.x - this->pos.x,2) + pow(point.y - this->pos.y,2)) - pow(this->r,2) == 0 ;
    }
    //判断是否在圆外
    bool IsOutsideCircle(const Point& point)
    {
        return !(IsOnCircle(point) || IsInCircle(point));
    }
    //输出位置
    void PrintPos(const Point& point)
    {
        std::cout << std::string(IsInCircle(point) ? "在圆内" : IsOnCircle(point) ? "在圆上" : "在圆外") << std::endl;
    }
private:
    //圆心坐标
    Point pos;
    //圆半径
    double r;
};

int main(void) {
    AdvCircle c1(10,10,5);
    std::cout << c1.IsInCircle(Point(10,15)) << std::endl;
    std::cout << c1.IsOutsideCircle(Point(10,16)) << std::endl;
    std::cout << c1.IsOnCircle(Point(10,16)) << std::endl;
    c1.PrintPos(Point(9,15));
    return 0;
}
手机上阅读

本文由 giao创作, 采用 知识共享署名4.0 国际许可协议进行许可
本站文章除注明转载/出处外,均为本站原创或翻译,转载前请务必署名
原文地址:《使用C++判断一个点与圆的位置关系》

 最后一次更新于2019-01-04

0 条评论

添加新评论

Markdown is supported.