判断点圆关系 (30 分)

判断点圆关系 (30 分)
输入平面上的一个点的坐标,以及一个圆的圆心坐标和半径,输出该点到原点的距离,并判断该点在圆内,圆外还是在圆周上。
在圆外时,将输出“outside",在圆内时,输出"inside",在圆周上时,输出“on"。
下面已经给出了点类Point的部分定义,请将其函数定义补充完整,并添加对圆类Circle的完整定义。

输入格式说明:
格式如下:
点的x坐标 点的y坐标 圆心的x坐标 圆心的y坐标 圆的半径
输入样例:
在一行中给出点坐标和圆心坐标及半径:
2 3 1 1 3
输出样例:
在这里给出相应的输出。例如:
3.61 inside

#include <iostream>
#include <cmath>
#include <iomanip>
using namespace std;
class Point {
private:
    double x, y;
public:
    Point();
    Point(double x_, double y_);
    double distance();
    double distance(const Point& p);
    double getX() { return x; }
    double getY() { return y; }
    void setX(double x_);
    void setY(double y_);
};
Point::Point() { double x = 0; double y = 0; }
Point::Point(double x_, double y_)
{
    this->x = x_; this->y = y_;
}
double Point::distance() {
    return sqrt(this->x * this->x + this->y * this->y);
}
double Point::distance(const Point& p)
{
    return sqrt((this->x - p.x) * (this->x - p.x) + (this->y - p.y) * (this->y - p.y));
}
void Point::setX(double x_)
{
    cout << this->x << endl;
}
void Point::setY(double y_)
{
    cout << this->y << endl;
}
class Circle
{
private:
    Point p1;
    double r;
public:
    Circle(Point& p ,double r):p1(p)
    {
        this->r = r;
    }
    string judge(Point &p)
    {
        if (p.distance(p) > r)
            return "outside" ;
        else if (p.distance(p) == r)
            return "on";
        else
            return "inside" ;
    }
};

int main() {
    double x1, y1, x2, y2, r;
    cin >> x1 >> y1 >> x2 >> y2 >> r;
    Point p(x1, y1);
    Point ctr(x2, y2);
    Circle c(ctr, r);
    cout << setprecision(3) << p.distance() << " " << c.judge(p) << endl;
}

### 面向对象实现关系判断方法 在面向对象编程中,可以通过定义类来模拟现实世界中的对象及其行为。以下以 C++ Java 为例,展示如何通过面向对象方法实现关系判断。 #### 1. 定义类用于表示二维平面上的一个点,包含 x y 坐标提供设置获取坐标的方法。 ```cpp class Point { public: // 设置坐标 void setX(double x) { m_X = x; } void setY(double y) { m_Y = y; } // 获取坐标 double getX() const { return m_X; } double getY() const { return m_Y; } private: double m_X; double m_Y; }; ``` #### 2. 定义类包含一个点类作为成员变量(表示圆心),以及半径属性。同时提供设置获取圆心半径的方法,以及判断是否在内的成员函数。 ```cpp class Circle { public: // 设置圆心半径 void setCenter(const Point& center) { m_Center = center; } void setRadius(double radius) { m_Radius = radius; } // 获取圆心半径 Point getCenter() const { return m_Center; } double getRadius() const { return m_Radius; } // 判断是否在内 bool contains(const Point& point) const { double deltaX = point.getX() - m_Center.getX(); double deltaY = point.getY() - m_Center.getY(); return (deltaX * deltaX + deltaY * deltaY <= m_Radius * m_Radius); } private: Point m_Center; double m_Radius; }; ``` 上述代码中,`contains` 函数通过计算圆心距离平方与半径平方的比较,判断是否在内[^1]。 #### 3. Java 实现 在 Java 中,可以类似地定义 `Point` `Circle` 类。以下是 Java 版本的实现: ```java class Point { private double x; private double y; public Point(double x, double y) { this.x = x; this.y = y; } public double getX() { return x; } public double getY() { return y; } } class Circle { private Point center; private double radius; public Circle(Point center, double radius) { this.center = center; this.radius = radius; } public boolean contains(Point point) { double deltaX = point.getX() - center.getX(); double deltaY = point.getY() - center.getY(); return deltaX * deltaX + deltaY * deltaY <= radius * radius; } } ``` Java 实现中,`contains` 方法同样通过距离平方的比较来判断是否在内[^2]。 #### 4. 示例代码 以下是一个完整的示例,展示如何使用上述类判断关系: ```cpp #include <iostream> using namespace std; int main() { Point center; center.setX(0); center.setY(0); Circle circle; circle.setCenter(center); circle.setRadius(5); Point point; point.setX(3); point.setY(4); if (circle.contains(point)) { cout << "内" << endl; } else { cout << "不在内" << endl; } return 0; } ``` 上述代码创建了一个圆心(0, 0)半径为 5 的判断 (3, 4) 是否在内[^1]。 ###
评论 14
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
红包 添加红包
表情包 插入表情
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值