| 网站首页 | 业界新闻 | 小组 | 威客 | 人才 | 下载频道 | 博客 | 代码贴 | 在线编程 | 编程论坛
欢迎加入我们,一同切磋技术
用户名:   
 
密 码:  
共有 779 人关注过本帖
标题:对于任意的四边形ABCD,其对角线AC与BD的中点分别是M、N,AB、CD的延长线交 ...
只看楼主 加入收藏
zhaoshi80140
Rank: 1
等 级:新手上路
帖 子:3
专家分:0
注 册:2013-11-12
结帖率:0
收藏
已结贴  问题点数:20 回复次数:3 
对于任意的四边形ABCD,其对角线AC与BD的中点分别是M、N,AB、CD的延长线交于R。验证三角形RMN的面积是四边形ABCD面积的四分之一。
图片附件: 游客没有浏览图片的权限,请 登录注册
求大神帮忙啊
搜索更多相关主题的帖子: 对角线 三角形 四边形 
2013-11-12 16:59
zhaoshi80140
Rank: 1
等 级:新手上路
帖 子:3
专家分:0
注 册:2013-11-12
收藏
得分:0 


/*
AC中点M,BD中点N,BA、CD延长后交于R
验证area(ABCD)==4*area(RMN)
*/

#include<stdio.h>
#include<stdlib.h>
#include<math.h>
#define EPS 1e-10

typedef struct
{
double x;
double y;
} Point;

#define a P[0]
#define b P[1]
#define c P[2]
#define d P[3]

/*两点之间的几何长度*/
double length(Point *A,Point *B)
{
return sqrt(pow(A->x-B->x,2)+pow(A->y-B->y,2));
}

double area_of_triangle(Point A,Point B,Point C)
{
double area=0;
/*已经快要成功啦*/
return area;
}

/*检测四边形是否合格*/
int ok(Point *p)
{
double side[4];/*4边长*/
int i,j;
for(i=0;i<4;i++)
{
double t;
j=(i+1)%4;
t=length(&p[i],&p[j]);
if(fabs(t)<EPS)return 0; /*不允许有重合在一起的点*/
side[i]=t;
}

{
double k1,k2;/*斜率*/
k1=(p[1].y-p[0].y)/(p[1].x-p[0].x);
k2=(p[3].y-p[2].y)/(p[3].x-p[2].x);
if(fabs(k2-k1)<EPS)
return 0; /*不允许AB与CD近乎平行*/
}

return 1;
}

main()
{
char pname[]="ABCD",*p=pname;
Point m,n,r,P[4],*PP=P;
double abcd,rmn;
while(*p)
{
printf("input (x,y) of point %c:",*p);
scanf("%lf%*c%lf",&PP->x,&PP->y);
p++;PP++;
} /*至此得到四边形的4个顶点的坐标*/

if(!ok(P))/*如果AB//CD则无法相交只好退出*/
{
fprintf(stderr,"\ninvalid input...\n");
exit(1); /*异常结束1*/
}

/*推算M、N两个“中点”的坐标*/
m.x = (a.x+c.x)/2;
m.y = (a.y+c.y)/2;
n.x = (b.x+d.x)/2;
n.y = (b.y+d.y)/2;

/*这里计算BA与CD延长后的交点坐标*/
{
double cdx,cdy,abx,aby,dax,day, del,du,dv;
cdx = c.x-d.x;
cdy = c.y-d.y;
abx = a.x-b.x;
aby = a.y-b.y;
dax = d.x-a.x;
day = d.y-a.y;
del = cdx*aby-cdy*abx;
du = dax*aby-day*abx;
dv = cdx*day-cdy*dax;
du /= del;
dv /= del;
r.x = d.x-du*cdx;
r.y = d.y-du*cdy;
}

/*这里计算四边形ABCD的面积*/
abcd = area_of_triangle(a,b,c) + area_of_triangle(a,d,c);

/*这里计算△RMN的面积*/
rmn = area_of_triangle(r,m,n);

/*这里是二者相除,看它是否非常接近于4.00*/
scanf("as a result\nABCD : RMN = %4.2f\n",abcd/rmn);

}
2013-11-12 17:02
zhaoshi80140
Rank: 1
等 级:新手上路
帖 子:3
专家分:0
注 册:2013-11-12
收藏
得分:0 
网上百度是楼上的,但是输入数据再按Enter一闪就没了,求大神告知是咋回事啊
2013-11-12 17:03
qunxingw
Rank: 16Rank: 16Rank: 16Rank: 16
等 级:贵宾
威 望:24
帖 子:1676
专家分:7295
注 册:2011-6-30
收藏
得分:20 
利用到解析几何知识,没考虑到平行y轴情况,三角形面积代码要补上

www.qunxingw.wang
2013-11-12 23:30
快速回复:对于任意的四边形ABCD,其对角线AC与BD的中点分别是M、N,AB、CD的延长 ...
数据加载中...
 
   



关于我们 | 广告合作 | 编程中国 | 清除Cookies | TOP | 手机版

编程中国 版权所有,并保留所有权利。
Powered by Discuz, Processed in 0.016196 second(s), 10 queries.
Copyright©2004-2024, BCCN.NET, All Rights Reserved