一题C++,设计一个直线类Line。。。。。。
设计一个直线类Line,其中包含3个数据成员,用于描述直线方程的3个系数,并声明一个友元函数,用于计算两条直线的交点,和显示函数,编程测试。提示:两条直线:a1x+b1y...
设计一个直线类Line,其中包含3个数据成员,用于描述直线方程的3 个系数,并声明一个友元函数,用于计算两条直线的交点,和显示函数,编程测试。
提示:两条直线:a1x+b1y+c1=0和a2x+b2y+c2=0的交点坐标为:
(b1c2-b2c1)/(a1b2-a2b1),(c1a2-c2a1)/(a1b2-a2b1)
为显示交点,还要设计一个描述点的类。
请尽量详细注释一下,高分悬赏,谢谢, 展开
提示:两条直线:a1x+b1y+c1=0和a2x+b2y+c2=0的交点坐标为:
(b1c2-b2c1)/(a1b2-a2b1),(c1a2-c2a1)/(a1b2-a2b1)
为显示交点,还要设计一个描述点的类。
请尽量详细注释一下,高分悬赏,谢谢, 展开
2个回答
展开全部
/*
设计一个直线类Line,其中包含3个数据成员,用于描述直线方程的3 个系数,
并声明一个友元函数,用于计算两条直线的交点,和显示函数,编程测试。
提示:两条直线:a1x+b1y+c1=0和a2x+b2y+c2=0的交点坐标为:
(b1c2-b2c1)/(a1b2-a2b1),(c1a2-c2a1)/(a1b2-a2b1)
为显示交点,还要设计一个描述点的类。
请尽量详细注释一下,高分悬赏,谢谢,
*/
#include<stdio.h>
#include<stdlib.h>
#include<math.h>
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):\n(0 0 0 is end the Apllication):\n");
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:\n");
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\n", cPt.x, cPt.y);
}
else
{
printf("The two Lines is not intersect\n");
}
}
return 0;
}
这个是主要的源代码了,没有分开文件写,能完成你需要的功能。希望对你有帮助。呵呵。。
设计一个直线类Line,其中包含3个数据成员,用于描述直线方程的3 个系数,
并声明一个友元函数,用于计算两条直线的交点,和显示函数,编程测试。
提示:两条直线:a1x+b1y+c1=0和a2x+b2y+c2=0的交点坐标为:
(b1c2-b2c1)/(a1b2-a2b1),(c1a2-c2a1)/(a1b2-a2b1)
为显示交点,还要设计一个描述点的类。
请尽量详细注释一下,高分悬赏,谢谢,
*/
#include<stdio.h>
#include<stdlib.h>
#include<math.h>
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):\n(0 0 0 is end the Apllication):\n");
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:\n");
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\n", cPt.x, cPt.y);
}
else
{
printf("The two Lines is not intersect\n");
}
}
return 0;
}
这个是主要的源代码了,没有分开文件写,能完成你需要的功能。希望对你有帮助。呵呵。。
Sievers分析仪
2024-10-13 广告
2024-10-13 广告
是的。传统上,对于符合要求的内毒素检测,最终用户必须从标准内毒素库存瓶中构建至少一式两份三点标准曲线;必须有重复的阴性控制;每个样品和PPC必须一式两份。有了Sievers Eclipse内毒素检测仪,这些步骤可以通过使用预嵌入的内毒素标准...
点击进入详情页
本回答由Sievers分析仪提供
展开全部
VC2005下验证,程序无误。
#include <iostream>
using namespace std;
class point
{
private:
float x;
float y;//点的两个坐标,因为你是二维直线和二维点
public:
point(){};//构造函数
~point(){};//析构函数
//接口成员函数
float getX(){return x;}
float getY(){return y;}
void setX(float ax){x = ax;}
void setY(float ay){y = ay;}
};
class line
{
public:
float a;
float b;
float c;//直线系数
line(){};
~line(){};//构造函数与析构函数
//构造函数重载
line(float aa,float bb,float cc){a=aa;b=bb;c=cc;};
//友元函数,求两条直线交点
friend point intersect(line &first,line &second);
};
//求交函数实现
point intersect(line& first,line& second)
{
point pt;
float Xcoord = (first.b*second.c - first.c*second.b) / (first.a*second.b - first.b*second.a);
float Ycoord = (first.c*second.a - first.a*second.c) / (first.a*second.b - first.b*second.a);
pt.setX(Xcoord);
pt.setY(Ycoord);
return pt;
}
int main()
{
//生成两条直线
line line1(1,2,3);
line line2(3,2,1);
//计算并输出交点
point intersection;
intersection = intersect(line1,line2);
cout<<"Intersection is x:"<<intersection.getX()<<" y:"<<intersection.getY()<<endl;
//使程序暂停,用于观察结果
int a;
cin>>a;
return 1;
}
#include <iostream>
using namespace std;
class point
{
private:
float x;
float y;//点的两个坐标,因为你是二维直线和二维点
public:
point(){};//构造函数
~point(){};//析构函数
//接口成员函数
float getX(){return x;}
float getY(){return y;}
void setX(float ax){x = ax;}
void setY(float ay){y = ay;}
};
class line
{
public:
float a;
float b;
float c;//直线系数
line(){};
~line(){};//构造函数与析构函数
//构造函数重载
line(float aa,float bb,float cc){a=aa;b=bb;c=cc;};
//友元函数,求两条直线交点
friend point intersect(line &first,line &second);
};
//求交函数实现
point intersect(line& first,line& second)
{
point pt;
float Xcoord = (first.b*second.c - first.c*second.b) / (first.a*second.b - first.b*second.a);
float Ycoord = (first.c*second.a - first.a*second.c) / (first.a*second.b - first.b*second.a);
pt.setX(Xcoord);
pt.setY(Ycoord);
return pt;
}
int main()
{
//生成两条直线
line line1(1,2,3);
line line2(3,2,1);
//计算并输出交点
point intersection;
intersection = intersect(line1,line2);
cout<<"Intersection is x:"<<intersection.getX()<<" y:"<<intersection.getY()<<endl;
//使程序暂停,用于观察结果
int a;
cin>>a;
return 1;
}
已赞过
已踩过<
评论
收起
你对这个回答的评价是?
推荐律师服务:
若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询