优质解答
/*
设计一个直线类Line,其中包含3个数据成员,用于描述直线方程的3 个系数,
并声明一个友元函数,用于计算两条直线的交点,和显示函数,编程测试.
提示:两条直线:a1x+b1y+c1=0和a2x+b2y+c2=0的交点坐标为:
(b1c2-b2c1)/(a1b2-a2b1),(c1a2-c2a1)/(a1b2-a2b1)
为显示交点,还要设计一个描述点的类.
请尽量详细注释一下,
*/
#include
#include
#include
class CPoint //这是焦点的类
{
public:
double x,y; //用公有的数据x,y表示焦点
};
class CLine //直线类
{
private:
double a,b,c; //用私有的数据abc表示他的三个系数.
public:
CLine():a(0),b(0),c(0) //构造函数
{
}
CLine(double a1,double b1,double c1)//有参数的构造函数
{
a = a1; //用参数来初始化直线的系数
b = b1;
c = c1;
}
CLine(){}
public:
friend bool IntersectToLines(const CLine& cLine1,const CLine& cLine2,
CPoint* pcPt);//友员函数,用来计算焦点,友员函数能访问私有变量
};
bool IntersectToLines(const CLine& cLine1,const CLine& cLine2,CPoint* pcPt)
{//计算两条直线的焦点
double temp = cLine1.b*cLine2.a - cLine1.a*cLine2.b; //得到分母
if (fabs(temp) < 0.0000001) //判断分母是否为0,分母不能为0
{
return false; //如果为0,这每焦点,量直线平行
}
if(pcPt) //计算并保存焦点
{
pcPt->x = (cLine1.b*cLine2.c - cLine1.c*cLine2.b) / temp;
pcPt->y = (cLine1.a*cLine2.c - cLine1.c*cLine2.a) / temp;
}
return true;
}
int main()
{
double a,b ,c;
while(1) //这些都是测试.
{
printf("Please input the Line parameters(a b c):(0 0 0 is end the Apllication):");
scanf("%lf%lf%lf",&a,&b,&c);
if(a == 0 && b == 0 && c == 0 )
{
break;
}
CLine cLine1(a,b,c);
printf("Please input the second line's pamaters:");
scanf("%lf%lf%lf",&a,&b,&c);
CLine cLine2(a,b,c);
CPoint cPt;
if(IntersectToLines(cLine1,cLine2,&cPt) == true)
{
printf("The two Lines's intersect point is:%lf,%lf",cPt.x,cPt.y);
}
else
{
printf("The two Lines is not intersect");
}
}
return 0;
}
这个是主要的源代码了,没有分开文件写,能完成你需要的功能.
/*
设计一个直线类Line,其中包含3个数据成员,用于描述直线方程的3 个系数,
并声明一个友元函数,用于计算两条直线的交点,和显示函数,编程测试.
提示:两条直线:a1x+b1y+c1=0和a2x+b2y+c2=0的交点坐标为:
(b1c2-b2c1)/(a1b2-a2b1),(c1a2-c2a1)/(a1b2-a2b1)
为显示交点,还要设计一个描述点的类.
请尽量详细注释一下,
*/
#include
#include
#include
class CPoint //这是焦点的类
{
public:
double x,y; //用公有的数据x,y表示焦点
};
class CLine //直线类
{
private:
double a,b,c; //用私有的数据abc表示他的三个系数.
public:
CLine():a(0),b(0),c(0) //构造函数
{
}
CLine(double a1,double b1,double c1)//有参数的构造函数
{
a = a1; //用参数来初始化直线的系数
b = b1;
c = c1;
}
CLine(){}
public:
friend bool IntersectToLines(const CLine& cLine1,const CLine& cLine2,
CPoint* pcPt);//友员函数,用来计算焦点,友员函数能访问私有变量
};
bool IntersectToLines(const CLine& cLine1,const CLine& cLine2,CPoint* pcPt)
{//计算两条直线的焦点
double temp = cLine1.b*cLine2.a - cLine1.a*cLine2.b; //得到分母
if (fabs(temp) < 0.0000001) //判断分母是否为0,分母不能为0
{
return false; //如果为0,这每焦点,量直线平行
}
if(pcPt) //计算并保存焦点
{
pcPt->x = (cLine1.b*cLine2.c - cLine1.c*cLine2.b) / temp;
pcPt->y = (cLine1.a*cLine2.c - cLine1.c*cLine2.a) / temp;
}
return true;
}
int main()
{
double a,b ,c;
while(1) //这些都是测试.
{
printf("Please input the Line parameters(a b c):(0 0 0 is end the Apllication):");
scanf("%lf%lf%lf",&a,&b,&c);
if(a == 0 && b == 0 && c == 0 )
{
break;
}
CLine cLine1(a,b,c);
printf("Please input the second line's pamaters:");
scanf("%lf%lf%lf",&a,&b,&c);
CLine cLine2(a,b,c);
CPoint cPt;
if(IntersectToLines(cLine1,cLine2,&cPt) == true)
{
printf("The two Lines's intersect point is:%lf,%lf",cPt.x,cPt.y);
}
else
{
printf("The two Lines is not intersect");
}
}
return 0;
}
这个是主要的源代码了,没有分开文件写,能完成你需要的功能.