 |
可以计算曲线内像素的个数,这个方法类似于有限元法。
张杰的意见:
将闭合曲线内用特殊颜色填色后,计算图象内该颜色的象素数更快。
ZYS的意见:
如果是多边形(凹凸均可)可以直接用叉积公式算出!
求一个逆时针给出顶点的三角形面积。
设顶点(x1,y1),(x2,y2),(x3,y3)
S=(x1y2+x2y3+x3y1-x1y3-x2y1-x3y2)/2
可以把一个凸多边形划分成许多互相不重叠的三角形,依次求出面积,再求和。
但是凹多边形呢?
注意:S大小可能为负!这点很重要。
我们可以发现,在凹多边形中,按照原来的求法(最后再取绝对值)结果仍然是对的!
比如多边形ABCDEF
我们先算ABC面积,再算ACD面积,
这时,绿色和蓝色部分被算了一次,而蓝色和黄色部分又被减了一次。
再算ADE和AEF后,可发现该算的部分正好算了一次!
唉,还是说不清楚,反正先将点逆时针排序,然后确定一个顶点,依次按顺序枚举另外的两个点,对每次结果进行求和,最后取平均值。
如上图,依次算ABC,ACD,ADE,AEF求和后取绝对值(点顺序算反影响结果)。
本算法复杂度O(N)
闻捷问: 画一个方框把不规则图形包住,然后在里面随机打点,曲线内点的数目和点的总数目的比例就是图形面积和方框面积的比例。(主持人注:这是一种近似的做法,很有趣,但不一定准确。)
相关问题:
QA000121 "如何填充任意封闭区域"
此问题由Ninputer回答。
附加关键字:编程, 源程序, programming, source code, Visual Basic, VB, 其他方面, 。
|