求教:给出封闭图形的坐标,计算其面积的算法

szbw 2002-09-15 09:33:08
给出封闭图形的一组坐标,如何计算该封闭图形的面积?
...全文
425 16 打赏 收藏 转发到动态 举报
写回复
用AI写文章
16 条回复
切换为时间正序
请发表友善的回复…
发表回复
opentuxedo 2002-09-20
  • 打赏
  • 举报
回复
其实这个办法还是不正规,正规的办法是:
1先找到任意一个顶点
用这个顶点和每一条对边相连,生成一系列的三角形,
计算每个三角形的代数面积,然后相加
三角形的代数面积可以用向量叉乘的办法得到。叉积的一半就是三角形面积。
计算叉积的方法是:
|i j k|
|x1 y1 z1|
|x2 y2 z2|
其中x1=x[n]-x[0];y1=y[n]-y[0];x2=x[n+1]-x[0];y2=y[n+1]-y[0];
szbw 2002-09-20
  • 打赏
  • 举报
回复
经过与ctl2008(ctl)的几次讨论,对于一个边界不交叉的封闭多边形面积算法基本成型:

1、计算多边形每条与x轴所形成梯形的矢量面积
2、将所有矢量面积相加,得出多边形面积

矢量面积的原则是:当x(i-1)>=x(i)时,y(i-1)-y(i),当x(i-1)<x(i)时,y(i)-y(i-1),或者完全反过来,这样才能利用矢量面积来消除重叠的部分。

存在问题:
1、如果多边形边界存在交叉,如“8”字形,则该算法无法正确计算
2、如果是一个多个封闭多边形组成的形状(内部被另一个多边形掏空),如古钱币的形状,则无法计算。这应该是另外一类问题。

致谢:
ctl2008(ctl)
opentuxedo(开缝的燕尾服)

szbw (bw@4u.net)
szbw 2002-09-20
  • 打赏
  • 举报
回复
经过与ctl2008(ctl)的几次讨论,对于一个边界不交叉的封闭多边形面积算法基本成型:

1、计算多边形每条与x轴所形成梯形的矢量面积
2、将所有矢量面积相加,得出多边形面积

矢量面积的原则是:当x(i-1)>=x(i)时,y(i-1)-y(i),当x(i-1)<x(i)时,y(i)-y(i-1),或者完全反过来,这样才能利用矢量面积来消除重叠的部分。

存在问题:
1、如果多边形边界存在交叉,如“8”字形,则该算法无法正确计算
2、如果是一个多个封闭多边形组成的形状(内部被另一个多边形掏空),如古钱币的形状,则无法计算。这应该是另外一类问题。

致谢:
ctl2008(ctl)
opentuxedo(开缝的燕尾服)
ctl2008 2002-09-17
  • 打赏
  • 举报
回复
如果仅仅是求多边形的面积,就用opentuxedo(开缝的燕尾服)所说的方法最单不过,只算一下每条边与X轴(或Y)的梯形面积,再减去重叠部分就行了,谈不上用什么高等数学、微积分。若要代码与我联系。c1934@21cn.com
szbw 2002-09-17
  • 打赏
  • 举报
回复
splitter(小刚)的算法我们想过,问题是我们只有(拐)点坐标,相邻拐点之间的边界点坐标还得算出来,巨烦!有没有更简单的方法?

又:楼上的邮箱wujianghua658@sohu.com退信了。如果真能解决问题,请再给一次邮箱地址。
wuamy 2002-09-16
  • 打赏
  • 举报
回复
请问是求多边形的面积还是其它图形的面积,

若求多边形面积,请同我联系

wujianghua658@sohu.com
harry202 2002-09-16
  • 打赏
  • 举报
回复
切分为水平或者垂直矩形好一些,windows系统的区域函数内部实现就是这样计算的。
splitter 2002-09-16
  • 打赏
  • 举报
回复
构造一个包含你多边形的二维栅格平面,对多边形每个边作离散化。离散化
后所占的栅格标志为1,其余为0。然后做填充算法,将这个多边形内全部填充
为1。最后可以得到标志为1的个数。这样就可以大致计算出它的面积。
关于离散化和填充算法,可以参考计算机图形学和数字图像处理。

szbw 2002-09-16
  • 打赏
  • 举报
回复
我想这应该不是一个需要研究的问题,肯定有一些成熟的算法。前面有一个《判断一个点,是否在一个多边形内(平面),有没有方法,有重谢》的贴子解决了一些问题,现在问题是给出的只有边界拐点的坐标,如何确定一个边界点相邻的另外两个点,以及构建完整的边界坐标系。

这个问题不是简单的所谓的高等数学问题、微积分问题,还请各位高手指教!
petpetg 2002-09-15
  • 打赏
  • 举报
回复
高等数学可以帮倒你.Have a look 吧!
沙老师 2002-09-15
  • 打赏
  • 举报
回复
to opentuxedo(开缝的燕尾服) :
好办法!
stonespace 2002-09-15
  • 打赏
  • 举报
回复
可以切分成三角形分别计算,也可以用积分直接计算。
opentuxedo 2002-09-15
  • 打赏
  • 举报
回复
还有一个办法是向量点乘。
opentuxedo 2002-09-15
  • 打赏
  • 举报
回复
求每条边和轴所夹的代数面积(根据边和向量方向来定义符号的面积值)然后把这些代数面积相加。
bch515 2002-09-15
  • 打赏
  • 举报
回复
用微积分,如果真的不行,那就用尺子量吧!
nuaazwg 2002-09-15
  • 打赏
  • 举报
回复
需确定一下精度吧。

19,469

社区成员

发帖
与我相关
我的任务
社区描述
VC/MFC 图形处理/算法
社区管理员
  • 图形处理/算法社区
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧