//三个点的坐标去判断这个点围成的三角形及面积(根据两两之间的距离)
//用(第一个点的纵坐标减去第二个点的纵坐标)/(第一个点的横坐标减去第二个点的横坐标)---M1
//用(第三个点的纵坐标减去第二个点的纵坐标)/(第三个点的横坐标减去第二个点的横坐标)---M2
//如果M1!=M2说明这三个点构成是三角形M1=M2时不是三角形
#include"stdafx.h"
#include
#include
#include
usingnamespacestd;
classpoint//
{
public:
doublex,y;//此处定义为公有成员便于继承
voidset(doublex1,doubley1){x=x1;y=y1;}
voidprint(){cout<<"("< doubledistance(pointf)//求两个点之间的坐标
{
returnsqrt((x-f.x)(x-f.x)+(y-f.y)(y-f.y));
}//两个点的横坐标相减的平方+纵坐标相减的平方最后开方
};//f.x表示另一点的横坐标
//举例:a和b间的距离--a.distance(b)此处是将a的横坐标减去b坐标的横坐标
classtrlangle:publicpoint//
{
public:
boolistrlangle(pointa,pointb,pointc)//判断是否为三角形因为是公有继承可以访问point对象的公有成员
{
boolkey;
if((a.y-b.y)/(a.x-b.x)==(c.y-b.y)/(c.x-b.x))//举例:三个点的坐标
key=false;//用(第一个点的纵坐标减去第二个点的纵坐标)/(第一个点的横坐标减去第二个点的横坐标)---M1
else//用(第三个点的纵坐标减去第二个点的纵坐标)/(第三个点的横坐标减去第二个点的横坐标)---M2
key=true;//如果M1!=M2说明这三个点构成是三角形M1=M2时不是三角形
returnkey;
}
voidtrlangletype(doublea,doubleb,doublec)//判断三角形类型
{//其中的a/b/c表示三边的长
doublemax;
//此处判断直角三角形首先得找出最大的一边--此处是把第一边赋给最大的
max=a;
if(b>max)
max=b;
elseif(c>max)
max=c;//以上就找出三边中最大的一边
if(a==b||a==c||b==c)
cout<<"三角形是等腰三角形!"< elseif(a==b&&b==c)
cout<<"三角形是等边三角形!"< elseif(max==a&&maxmax==bb+cc)//a^2=b^2+c^2
cout<<"三角形是直角三角形!"< elseif(max==b&&maxmax==aa+cc)//b^2=a^2+c^2
cout<<"三角形是直角三角形!"< elseif(max==c&&maxmax==aa+bb)//c^2=a^2+b^2
cout<<"三角形是直角三角形!"< else
cout<<"三角形是普通三角形!"<
}
doublearea(doublea,doubleb,doublec)//求三角形面积
{
doubles,area1;
s=(a+b+c)/2;
area1=sqrt(s(s-a)(s-b)(s-c));
returnarea1;
}
};
intmain(intargc,charargv[])
{
doublen,m,f;
trlangleA;//定义了一个trlangle类的对象
pointa,b,c;//定义了一个point类的对象
cout<<"请输入a的坐标:"< cin>>n>>m;
a.set(n,m);
a.print();//每输入一个坐标就输出一个坐标
cout<<"请输入b的坐标:"< cin>>n>>m;
b.set(n,m);
b.print();//每输入一个坐标就输出一个坐标
cout<<"请输入c的坐标:"< cin>>n>>m;
c.set(n,m);
c.print();//每输入一个坐标就输出一个坐标
cout<<"a和b两点间的距离:"< cout<<"c和a两点间的距离:"< cout<<"b和c两点间的距离:"< if(A.istrlangle(a,b,c)==true)//注意此处的调用方法
{
A.trlangletype(a.distance(b),b.distance(c),c.distance(a));
f=A.area(a.distance(b),b.distance(c),c.distance(a));
cout<<"三角形面积为:"< }
else
cout<<"此图形不是一个三角形!"< getch();
return0;
}
|
|