logo资料库

验证三角形A2B2C2的面积是正三角形ABC的面积的七分之一.doc

第1页 / 共5页
第2页 / 共5页
第3页 / 共5页
第4页 / 共5页
第5页 / 共5页
资料共5页,全文预览结束
四、全部源程序清单 #include #include #include #include using namespace std; typedef struct { float x;//x坐标 float y;//y坐标 }TwoD;//用结构体表示二维坐标 double Area (float,float,float);//求面积函数 TwoD Thirddot(TwoD,TwoD);//求三分点函数 TwoD Crossdot(TwoD,TwoD,TwoD,TwoD);//求两线交点函数 float Distance(TwoD,TwoD);//求两点距离函数 //求三分点函数 TwoD Thirddot(TwoD DotA,TwoD DotB) { TwoD DotC; DotC.x=(DotA.x+2*DotB.x)/3; DotC.y=(DotA.y+2*DotB.y)/3; return (DotC); } //求两线交点函数 TwoD Crossdot(TwoD DotA,TwoD DotB,TwoD DotC,TwoD DotD) //即AB和CD交点 { float a,b; TwoD DotE; a=(DotA.y-DotB.y)/(DotA.x-DotB.x); b=(DotC.y-DotD.y)/(DotC.x-DotD.x); DotE.x=(DotC.y-DotA.y+a*DotA.x-b*DotC.x)/(a-b); DotE.y=a*(DotE.x-DotA.x)+DotA.y; return (DotE); } //三角形面积函数 double Area(float a,float b,float c) { float temp; double s; temp=(a+b+c)/2; s=sqrt(temp*(temp-a)*(temp-b)*(temp-c)); return (s); }
//两点距离函数 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"<
分享到:
收藏