Title

计算点到直线的距离一一友元函数的应用

计算点到直线的距离一一友元函数的应用 (15 分)

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

无标题.bmp

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

输入格式:

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

输出格式:

计算点到直线的距离保留两位小数。

输入样例:

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

5 5
2 4 3

输出样例:

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

The distance is: 7.38

代码

#include<bits/stdc++.h>
using namespace std;
class Point{
	private:
		int x;
		int y;
	public:
		Point(int ox,int oy):x(ox),y(oy){
		}
		int get_x()
		{
			return this->x;
		}
		int get_y()
		{
			return this->y;
		}
};

class Line{
	private:
		double a;
		double b;
		double c;
	public:
		Line(double oa,double ob,double oc):a(oa),b(ob),c(oc){
		}
		double get_a()
		{
			return this->a;
		}
		double get_b()
		{
			return this->b;
		}
		double get_c()
		{
			return this->c;
		}
		friend double dist(Point point,Line line);
};
double dist(Point p,Line l)
{
	double part1=l.get_a()*p.get_x()+l.get_b()*p.get_y()+l.get_c();
	double part2=sqrt(l.get_a()*l.get_a()+l.get_b()*l.get_b());
	double ans=abs(part1/part2);
	return ans;
}
int main()
{
	int x,y;
	cin>>x>>y;
	Point p(x,y);
	
	int a,b,c;
	cin>>a>>b>>c;
	Line l(a,b,c);
	
	double ans=dist(p,l);
	printf("The distance is: ");
	if(ans!=0)
       cout << fixed << setprecision(2)<<ans;
    else cout<<0;
	
	return 0;
}

反思

  • 0.00要输成0;

精进

  • cout << fixed << setprecision(2)<<ans;
posted @ 2021-05-29 09:50  BeautifulWater  阅读(482)  评论(0编辑  收藏  举报