[C++/PTA] 判断一个点是否在一个圆的内部

简介: [C++/PTA] 判断一个点是否在一个圆的内部

题目要求

创建一个表示点的类Point,运用组合的方式创建圆形类。

圆形有个成员函数isPointIn用于判断一个点是否在该圆形的内部。

完成对应类代码,使得主函数可以正确运行。

注意类的数值型数据成员类型为浮点型

裁判测试程序样例:

/* 请在这里填写答案 */
int main(int argc, char const *argv[])
{
    double x,y;
    double r;
    cin>>x>>y>>r;
    Point p(x,y);
    Circle c(p,r);
    cin>>x>>y;
    Point p1(x,y);
    bool b = c.isPointIn(p1);
    cout<<b<<endl;
}

输入样例:

在这里给出一组输入。例如:

1 1 1.5 2 2

输出样例:

在这里给出相应的输出。例如:

1


解题思路

class Point {
public:
    // 构造函数,初始化 x, y 坐标
    Point(double x1 = 0.0, double y1 = 0.0) {
        x = x1;
        y = y1;
    }
    // 获取 x, y 坐标
    double getX() const { return x; }
    double getY() const { return y; }
    // 修改 x, y 坐标
    void setX(double x1) { x = x1; }
    void setY(double y1) { y = y1; }
private:
    // x, y 坐标
    double x, y;
};

Point 类中定义了两个私有成员变量 x 和 y,代表点的坐标。同时定义了一个构造函数,用于初始化 Point 类型对象的坐标,以及 get 和 set 函数用于获取或设置 Point 对象的坐标。这些函数都很简单,直接读取或修改成员变量即可。

class Circle {
public:
    // 构造函数,初始化圆的圆心和半径
    Circle(Point p1, double r1) {
        center = p1;
        radius = r1;
    }
    // 获取、设置圆的半径和圆心
    double getRadius() const { return radius; }
    void setRadius(double r1) { radius = r1; }
    Point getCenter() const { return center; }
    void setCenter(Point p1) { center = p1; }
    // 判断一个点是否在圆内
    bool isPointIn(Point p) {
        double dx = p.getX() - center.getX();
        double dy = p.getY() - center.getY();
        double dist = sqrt(dx * dx + dy * dy);
        if (dist <= radius)
            return true;
        else
            return false;
    }
private:
    // 圆的圆心和半径
    Point center;
    double radius;
};

Circle 类中定义了两个成员变量,包括Point类型的center坐标和double类型的radius半径。

同样定义了构造函数Circle,用于初始化圆的圆心和半径,以及getset函数读取或修改Circle对象的成员变量。

isPointIn 函数用于判断给定的点是否在圆形内部。计算这个点到圆心的距离dist,然后和半径radius比较即可。

代码

#include <iostream>
#include <cmath>
using namespace std;
class Point {
public:
    Point(double x1 = 0.0, double y1 = 0.0) {
        x = x1;
        y = y1;
    }
    double getX() const { return x; }
    double getY() const { return y; }
    void setX(double x1) { x = x1; }
    void setY(double y1) { y = y1; }
private:
    double x, y;
};
class Circle {
public:
    Circle(Point p1, double r1) {
        center = p1;
        radius = r1;
    }
    double getRadius() const { return radius; }
    void setRadius(double r1) { radius = r1; }
    Point getCenter() const { return center; }
    void setCenter(Point p1) { center = p1; }
    bool isPointIn(Point p) {
        double dx = p.getX() - center.getX();
        double dy = p.getY() - center.getY();
        double dist = sqrt(dx * dx + dy * dy);
        if (dist <= radius)
            return true;
        else
            return false;
    }
private:
    Point center;
    double radius;
};

总结

该题考察构造函数成员变量成员函数的定义和实现,读者可躬身实践。

我是秋说,我们下次见。

目录
相关文章
|
2月前
|
C++
【PTA】L1-016 验证身份(C++)
【PTA】L1-016 验证身份(C++)
39 0
【PTA】L1-016 验证身份(C++)
|
2月前
|
C++
【PTA】L1-033 出生年(C++)
【PTA】L1-033 出生年(C++)
60 0
【PTA】L1-033 出生年(C++)
|
2月前
|
C++
【PTA】L1-011 A-B (C++)
【PTA】L1-011 A-B (C++)
60 0
【PTA】L1-011 A-B (C++)
|
2月前
|
C++
【PTA】​L1-005 考试座位号​ (C++)
【PTA】​L1-005 考试座位号​ (C++)
68 0
【PTA】​L1-005 考试座位号​ (C++)
|
2月前
|
测试技术 C++
【PTA】​L1-003 个位数统计​ (C++)
【PTA】​L1-003 个位数统计​ (C++)
44 0
【PTA】​L1-003 个位数统计​ (C++)
|
2月前
|
C++
【PTA】L1-020 帅到没朋友 (C++)
【PTA】L1-020 帅到没朋友 (C++)
56 0
【PTA】L1-020 帅到没朋友 (C++)
|
2月前
|
C++
【PTA】​ L1-080 乘法口诀数列​(C++)
【PTA】​ L1-080 乘法口诀数列​(C++)
47 0
【PTA】​ L1-080 乘法口诀数列​(C++)
|
2月前
|
C++
【PTA】​L1-078 吉老师的回归​(C++)
【PTA】​L1-078 吉老师的回归​(C++)
66 0
【PTA】​L1-078 吉老师的回归​(C++)
|
2月前
|
C++
【PTA】​L1-079 天梯赛的善良​ (C++)
【PTA】​L1-079 天梯赛的善良​ (C++)
67 0
【PTA】​L1-079 天梯赛的善良​ (C++)
|
2月前
|
C++
【PTA】​ L1-077 大笨钟的心情​(C++)
【PTA】​ L1-077 大笨钟的心情​(C++)
72 0
【PTA】​ L1-077 大笨钟的心情​(C++)