//两点距离函数
float Distance(TwoD DotA,TwoD DotB)
{float d;
d=sqrt((DotA.x-DotB.x)*(DotA.x-DotB.x)+(DotA.y-DotB.y)*(DotA.y-DotB.y));
return (d);
}
//int _tmain(int argc,_TCHAR* argv[])
int main()
{ TwoD DotA,DotB,DotC;//外三角形个顶点
TwoD DotA1,DotB1,DotC1;//3个分点
TwoD DotA2,DotB2,DotC2;//内三角形个顶点
float a,b,c,a1,b1,c1;//外,内三角形的边
double s,s1,n;//外三角形面积,内三角形面积,面积比值
//TwoD A2,B2,C2;//3个分点
cout<<"input data please"<
>DotA.x;
cin>>DotA.y;
cin>>DotB.x;
cin>>DotB.y;
cin>>DotC.x;
cin>>DotC.y;//输入个顶点坐标
a=Distance(DotA,DotB);
b=Distance(DotB,DotC);
c=Distance(DotB,DotC);//求外三角形边
if( ((a+b)<=c)||((b+c)<=a)||((a+c)<=b) )
cout<<"不能构成三角形!"<s1=Area(a1,b1,c1);//内三角形面积
n=s/s1;
cout<<"the scanle of their areas is"<
#include
#include
#include
using namespace std;
typedef struct
{
double x;//x坐标
double y;//y坐标
}TwoD;//用结构体表示二维坐标
double Area (double,double,double);//求三角形面积函数
double Area1(double,double,double,double);//求四边形面积函数
double Distance(TwoD,TwoD);//求两点距离函数
TwoD Crossdot(TwoD DotA,TwoD DotB,TwoD DotC,TwoD DotD);
//求中点M,N函数
TwoD Midpot(TwoD DotA,TwoD DotB)
{
TwoD DotD;
DotD.x=(DotA.x+DotB.x)/2;
DotD.y=(DotA.y+DotB.y)/2;
return (DotD);
}
/*这里计算BA与CD延长后的交点坐标*/
TwoD Crossdot(TwoD DotA,TwoD DotB,TwoD DotC,TwoD DotD)
{
TwoD DotR;
double cdx,cdy,abx,aby,dax,day, del,du,dv;
cdx = DotC.x-DotD.x;
cdy = DotC.y-DotD.y;
abx = DotA.x-DotB.x;
aby = DotA.y-DotB.y;
dax = DotD.x-DotA.x;
day = DotD.y-DotA.y;
del = cdx*aby-cdy*abx;
du = dax*aby-day*abx;
dv = cdx*day-cdy*dax;
du /= del;
dv /= del;
DotR.x = DotD.x-du*cdx;
DotR.y = DotD.y-du*cdy;
return(DotR);
}
//三角形面积函数
double Area(double a,double b,double c)
{
double temp;
double s;
temp=(a+b+c)/2;
s=sqrt(temp*(temp-a)*(temp-b)*(temp-c));
return (s);
}
//四边形面积函数
double Area1(TwoD DotA,TwoD DotB,TwoD DotC,TwoD DotD)
{double s;
s=0.5*(abs((DotB.x-DotA.x)*(DotC.y-DotA.y)-(DotB.y-DotA.y)*(DotC.x-DotA.x))+abs
((DotB.x-DotD.x)*(DotC.y-DotD.y)-(DotC.y-DotD.y)*(DotC.x-DotD.x)));
return(s);
}
//两点距离函数
double Distance(TwoD DotA,TwoD DotB)
{double d;
d=sqrt((DotA.x-DotB.x)*(DotA.x-DotB.x)+(DotA.y-DotB.y)*(DotA.y-DotB.y));
return (d);
}
int main()
{ TwoD DotA,DotB,DotC,DotD;//四边形的四个顶点坐标
TwoD /*DotM,DotN*/DotR;//三角形个顶点
TwoD DotM,DotN;//两个中点坐标M,N坐标
double s,s1,radio;//三角形面积,四边形面积,面积比值
double m,n,r;//三角形三边
printf("input data please\n");
cin>>DotA.x;
cin>>DotA.y;
cin>>DotB.x;
cin>>DotB.y;
cin>>DotC.x;
cin>>DotC.y;
cin>>DotD.x;
cin>>DotD.y;//输入个顶点坐标
s1=Area1(DotA,DotB,DotC,DotD);//四角形面积
DotM=Midpot(DotA,DotC);//中点M坐标
DotN=Midpot(DotB,DotD);//中点N坐标
DotR=Crossdot(DotA,DotB,DotC,DotD);//求交点R
m=Distance(DotM,DotN);
n=Distance(DotN,DotR);
r=Distance(DotR,DotM);//求三角形边
s=Area(m,n,r);//三角形面积
radio=s1/s;
cout<<"the scanle of their areas is"<