问题描述
求任意多边形面积(包括边交叉的情况),边交叉的情况时画出来的多边形就是用vml画polygon的那种,如下面例子(这个就是画出的多边形的情况)自己运行下看看:<!DOCTYPEHTMLPUBLIC"-//W3C//DTDHTML4.0Transitional//EN"><HTMLxmlns:v="urn:schemas-microsoft-com:vml"><HEAD><TITLE>NewDocument</TITLE><METANAME="Generator"CONTENT="EditPlus"><METANAME="Author"CONTENT=""><METANAME="Keywords"CONTENT=""><METANAME="Description"CONTENT=""><scriptlanguage="javascript">varflag=0;varpoint="";varpointX=newArray();varpointY=newArray();functioncreatepolygon(event){varobj=document.getElementById("mainpane");varx=event.clientX;vary=event.clientY;pointX.push(x);pointY.push(y);//varm=parseInt(obj.style.left.replace("px",""));//varn=parseInt(obj.style.top.replace("px",""));x=x-12;y=y-17;varpolyline=document.getElementById("poly");if(flag==0){point+=x+","+y;flag=1;}else{point+=","+x+","+y;polyline.points.value=point;}}functionmeasure(){//varpoints=point.toArray();varvcount=pointX.length;varx=pointX;vary=pointY;vari;vars;if(vcount<3)return0;s=y[0]*(x[vcount-1]-x[1]);for(i=1;i<vcount;i++)s+=y[i]*(x[(i-1)]-x[(i+1)%vcount]);alert(Math.abs(s/2));}varscreen=newArray();for(vari=1;i<501;i++){screen[i]=newArray();for(varj=1;j<501;j++){screen[i][j]=0;}}functionmeasure1(){alert("hello");}</script></HEAD><style>v:*{BEHAVIOR:url(#default#VML)}#mainpane{width:400px;height:300px;border:1pxoutset#ff0000;left:10px;top:10px;background:#EFEFFF;}</style><BODY><divid="mainpane"style="left:10px;top:10px"onclick="createpolygon(event);"><v:polylineid=polyfilled="t"style="z-index:1;position:absolute;"/></div><inputtype=buttonvalue="计算面积"onclick="measure1();"></BODY></HTML>求出这样的多边形面积有没有好点的算法,我用的开发工具是geoserver+mapbuilder里面好像没计算面积一类的函数,只能自己写出来。我只能给出20分了这是我全部家当,摆脱各位大哥了。请指教一下吧
解决方案
解决方案二:
是不是分太少啦我可是只有这么多分啊,在线等。。。。。
解决方案三:
兄弟,我也正在研究呢,加我吧79666049
解决方案四:
我的帖子要在最前面,急需解决!!!!各位大哥知道一点说一点,好有个参考!
解决方案五:
upup
解决方案六:
kkk
解决方案七:
转篇文章混分. 今天在论坛看到这样一个问题,程序输入一系列的点,按输入顺序首尾相连构成一个多边形,如何求这个多边形的面积? 其实方法很简单,定积分。我还是简单解释一下,如果是没有读过高等数学的朋友,也让你大致明白。 定积分的本质是求和,计算f(x)在积分区间[a,b]上的一个和S,首先把积分区间分成n份,这样的分法记为λ,记Δ(λ)=max{Δx|[xi-1,xi]},也就是所有这些分成的小段中长度最大的一段的长,如果当Δ→0的时候,和式S=∑f(θ)Δx(θ∈[xi-1,xi])的极限如果存在的话,就称其为f(x)在[a,b]上的定积分,记为b∫f(x)dxa 其意义从几何上解释,就是f(x)的曲线与x轴、直线x=a,x=b围成的图形的面积。 现在要求的多边形是由线段组成的,只要把所有的线段都求定积分,最后把和加起来,就是多边形的面积。这个推论的证明从略。值得注意的是,用定积分求的面积有正负之分,即:ba∫f(x)dx=-∫f(x)dxab从a积到b,与从b积到a只相差一个负号。 线段定积分的计算公式的推导给出两个点,如何求这两点连成的线段的定积分值呢?直线的方程可以用y=kx+b表示,所以围成的面积S=x2∫(kx+b)dxx1=k/2(x2^2-x1^2)+b(x2-x1)而斜率k=(y2-y1)/(x2-x1)截距b=y1-kx1=y1-x1(y2-y1)/(x2-x1),代入前式得S=(y2-y1)(x2+x1)/2+y1(x2-x1)-x1(y2-y1)=(x2-x1)(y1+y2)/2这让我想到一个初等公式,梯形面积公式,y1,y2看成上下底,(x2-x1)看成是高,上底加下底乘高除二,对直线定积分得到的正是这个梯形的面积。这样走了一个大弯又回到初中了。 C++程序代码#include<iostream.h>floatlinesqr(x1,y1,x2,y2)floatx1,y1,x2,y2;{return(x2-x1)*(y1+y2)/2.0;}voidmain(){floatfx,fy,x1,y1,x2,y2,s=0.0;intn,i;cout<<"多边形的顶点数";do{cin>>n;}while(n<3);cout<<"第1个点坐标"<<endl;cin>>x1>>y1;fx=x1;fy=y1;cout<<"第2个点坐标"<<endl;cin>>x2>>y2;s=linesqr(x1,y1,x2,y2);for(i=3;i<=n;++i){x1=x2;y1=y2;cout<<"第"<<i<<"个点坐标"<<endl;cin>>x2>>y2;s+=linesqr(x1,y1,x2,y2);}s+=linesqr(x2,y2,fx,fy);//首尾相连cout<<"多边形的面积为"<<s<<endl;}
解决方案八:
有点难度哦
解决方案九:
goolgeapi3.0离线版,缓存api和地图到本地,从此调用不在受goolge服务器限制地图缓存技术分为三种1.通过goolge地图下载工具下载选定范围内所有层级的地图数据(电子地图、卫星地图)2.按需服务器缓存,用户在浏览地图时,浏览到哪里服务器缓存到哪里3.按需客户端缓存,用户在浏览地图时,客户端按需缓存引擎缓存用户浏览的区域支持goolge地图、mapabc地图、矢量地图(需单独购买切片工具)网站:www.qwgis.comqq:1737805467
解决方案十:
goolgeapi3.0离线版,缓存api和地图到本地,从此调用不在受goolge服务器限制地图缓存技术分为三种1.通过goolge地图下载工具下载选定范围内所有层级的地图数据(电子地图、卫星地图)2.按需服务器缓存,用户在浏览地图时,浏览到哪里服务器缓存到哪里3.按需客户端缓存,用户在浏览地图时,客户端按需缓存引擎缓存用户浏览的区域支持goolge地图、mapabc地图、矢量地图(需单独购买切片工具)网站:www.qwgis.comqq:1737805467