N noall Unregistered / Unconfirmed GUEST, unregistred user! 2006-01-03 #1 可以已知各个点的顶点的坐标. 1 .任意封闭凸多边形的面积如何计算?? 2.如何计算二个封闭凸多边形的交叉面积 如果这二个封闭凸多边形有重叠部分在一起的话!
U UnderTheRainFor Unregistered / Unconfirmed GUEST, unregistred user! 2006-01-03 #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;
第一个问题,可以这样: 先比较顶点坐标,找出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;
U UnderTheRainFor Unregistered / Unconfirmed GUEST, unregistred user! 2006-01-03 #3 第二个问题可能可以这样: 先根据顶点得出两个多边形各边的直线方程,然后计算交点(如有有交点的话)。 根据求出的交点得出新的封闭多边形(如果能封闭的话)。这个多边形就是重叠部分。 后面的解法就跟第一个一样了。
第二个问题可能可以这样: 先根据顶点得出两个多边形各边的直线方程,然后计算交点(如有有交点的话)。 根据求出的交点得出新的封闭多边形(如果能封闭的话)。这个多边形就是重叠部分。 后面的解法就跟第一个一样了。
N nicai_wgl Unregistered / Unconfirmed GUEST, unregistred user! 2006-01-03 #4 我的思路: 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。(面积计算公式)
我的思路: 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。(面积计算公式)
N nicai_wgl Unregistered / Unconfirmed GUEST, unregistred user! 2006-01-03 #5 问题2: 1、两个凸多边形相交后,相交的部分肯定也是一个凸多变形(平面几何中的定理?忘了,呵呵)。 2、既然也是凸多边形,只需找出相交部分的各个顶点,按上述方法求解即可。 3、交点坐标求法较复杂,a、首先判断是否相交,b、相交后求两相交顶点。
问题2: 1、两个凸多边形相交后,相交的部分肯定也是一个凸多变形(平面几何中的定理?忘了,呵呵)。 2、既然也是凸多边形,只需找出相交部分的各个顶点,按上述方法求解即可。 3、交点坐标求法较复杂,a、首先判断是否相交,b、相交后求两相交顶点。
R royal1442 Unregistered / Unconfirmed GUEST, unregistred user! 2006-01-03 #6 第一个问题以前做过,思路是:(假设白色的底色,黑色的线条) 遍历所有的点,如果: 1.该行没有点,跳入下一行; 2.如果该行有一个点,面积值加1; 3.如果该行有两个,那么,面积值加上(右边的点-左边的点+1); 4.如果有三个以上的点,报错吧!
第一个问题以前做过,思路是:(假设白色的底色,黑色的线条) 遍历所有的点,如果: 1.该行没有点,跳入下一行; 2.如果该行有一个点,面积值加1; 3.如果该行有两个,那么,面积值加上(右边的点-左边的点+1); 4.如果有三个以上的点,报错吧!
R royal1442 Unregistered / Unconfirmed GUEST, unregistred user! 2006-01-03 #7 第二个问题:(假设两个多边形肯定有交集) 遍历各行,如果该行有4各点,那么将中间两个点的距离加到面积里面去!