1 .任意封闭凸多边形的面积如何计算??? 2.如何计算二个封闭凸多边形的交叉面积(50分)

  • 主题发起人 主题发起人 noall
  • 开始时间 开始时间
N

noall

Unregistered / Unconfirmed
GUEST, unregistred user!
可以已知各个点的顶点的坐标.
1 .任意封闭凸多边形的面积如何计算??

2.如何计算二个封闭凸多边形的交叉面积
如果这二个封闭凸多边形有重叠部分在一起的话!
 
第一个问题,可以这样:
先比较顶点坐标,找出x坐标最小的记做x1和x坐标最大的记住x2,这是积分限。
任给一个积分变量x ,对于大于x1且小于x2的任一个值x0 , 求出x=x0与多边形的交点的Y坐标,记做y1(x) 和y2(x)。这里得先把多边形的各边的直线方程求出来。
最后对 |y1(x) - y2(x)| 在x1 到 x2 上积分。
在程序中的积分就取个很小的dx,在x1到x2 做循环就可以了,循环体中做叠加:
sum := sum + abs(y1(x) -y2(x)) * dx;
x:= x + dx;
 
第二个问题可能可以这样:
先根据顶点得出两个多边形各边的直线方程,然后计算交点(如有有交点的话)。
根据求出的交点得出新的封闭多边形(如果能封闭的话)。这个多边形就是重叠部分。
后面的解法就跟第一个一样了。
 
我的思路:
1、一个凸多边型可以分割成N-2个三角型,可以通过求所有三角形的面积累加得出N凸边型的面积。
2、三角型的分割,所有顶点坐标按X轴坐标(或Y轴坐标)排序,可以分割为(1,2,3)..(N-2,N-1,N)共N-2个三角形,其中N为顶点排序后的坐标位置。
3、通过计算N-2格三角型的面积累加得到整个凸多边形的面积。
4、S=根号(p*(p-a)*(p-b)*(p-c)) 其中p=(a+b+c)/2。(面积计算公式)
 
问题2:
1、两个凸多边形相交后,相交的部分肯定也是一个凸多变形(平面几何中的定理?忘了,呵呵)。
2、既然也是凸多边形,只需找出相交部分的各个顶点,按上述方法求解即可。
3、交点坐标求法较复杂,a、首先判断是否相交,b、相交后求两相交顶点。
 
第一个问题以前做过,思路是:(假设白色的底色,黑色的线条)
遍历所有的点,如果:
1.该行没有点,跳入下一行;
2.如果该行有一个点,面积值加1;
3.如果该行有两个,那么,面积值加上(右边的点-左边的点+1);
4.如果有三个以上的点,报错吧!
 
第二个问题:(假设两个多边形肯定有交集)
遍历各行,如果该行有4各点,那么将中间两个点的距离加到面积里面去!
 
多人接受答案了。
 

Similar threads

D
回复
0
查看
2K
DelphiTeacher的专栏
D
D
回复
0
查看
1K
DelphiTeacher的专栏
D
D
回复
0
查看
1K
DelphiTeacher的专栏
D
S
回复
0
查看
3K
SUNSTONE的Delphi笔记
S
后退
顶部