【C++ | PTA】计算点到直线的距离一一友元函数的应用

文章目录

题目要求

计算点到直线的距离。首先设计一个点类Point,它有2 个私有数据成员x和y,表示点的坐标。另一个类为直线类Line,它有3 个私有数据成员a,b和c,表示直线方程ax+by+c= 0。这两个类中都说明了一个友元函数dist,用于计算一个点到直线的距离。点(x.y)到直线ax+by+c=0的距离d的计算公式如下:

在这里插入图片描述

语法要点: 友元函数的特点。
这是一个编程题模板。请在这里写题目描述。例如:本题目要求读入2个整数A和B,然后输出它们的和。

输入格式:
输入两行,第一行输入两个整数,表示点坐标x,y的值
在第二行中输入直线三个参数,表示直线方程的三个洗漱a,b,c.

输出格式:
计算点到直线的距离保留两位小数。

输入样例:
在这里给出一组输入。例如:
5 5
2 4 3

输出样例:
在这里给出相应的输出。例如:
The distance is: 7.38

代码

#include<iostream>
#include<cmath>
#include<iomanip> //用于控制输出精度 
using namespace std;

class Line; //提前声明 Line 类,因为 Point 中的友元函数要用到它 

class Point {
    int x, y;
public:
    //构造函数,用于初始化 Point 对象
    Point(int X = 0, int Y = 0) {
        x = X;
        y = Y;
    }
    //公有成员函数,获取 x 坐标
    int getx() { return x; }
  	//公有成员函数,获取 y 坐标
    int gety() { return y; }
    //友元函数,计算点到直线的距离
    friend double dist(Point&, Line&);
};

class Line {
    int a, b, c;
public:
    //构造函数,用于初始化 Line 对象
    Line(int A = 1, int B = 1, int C = 1) {
        a = A;
        b = B;
        c = C;
    }
    //公有成员函数,获取 a 系数
    int geta() { return a; }
  	//公有成员函数,获取 b 系数
    int getb() { return b; }
  	//公有成员函数,获取 c 系数
    int getc() { return c; }
    //友元函数,计算点到直线的距离
    friend double dist(Point&, Line&);
};

//友元函数,计算点到直线的距离
double dist(Point& P, Line& L) {
    double s;
    //计算距离
    s = abs((L.a*P.x + L.b*P.y + L.c) / sqrt(L.a*L.a + L.b*L.b));
    return s;
}

int main() {
    int A, B, a1, b1, c1;
    cin >> A >> B; //输入点 P 的坐标
    cin >> a1 >> b1 >> c1; //输入直线 L 的系数
    Point P(A, B); //创建 Point 对象 P
    Line L(a1, b1, c1); //创建 Line 对象 L
    //调用 dist 函数计算 P 点到 L 直线的距离,并输出结果
    if (dist(P, L) == 0) //判断距离是否为 0,下同
        cout << "The distance is: 0.00";
    else 
        cout << fixed << setprecision(2) << "The distance is: " << dist(P, L);
    return 0;
}
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

秋说

感谢打赏,祝你平安喜乐。

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值