基础C++polygon求面积算法

Jenf_Mu 2018-05-25 10:53:06
因为项目中用到的形状比较多,虽然像矩形、圆这些形状算法面积比较简单,但如果每种形状都用程序员去写算法,太麻烦了。也不可能全部一一写出来。
只能用通用的积分求面积算法。但是怎么通过传入的polygon通过积分求面积呢?
...全文
1899 5 打赏 收藏 转发到动态 举报
写回复
用AI写文章
5 条回复
切换为时间正序
请发表友善的回复…
发表回复
schlafenhamster 2020-07-06
  • 打赏
  • 举报
回复

void CFillTudouDlg::OnButton1()
{
// TODO: Add your control notification handler code here
BOOL start=FALSE;
int end=0;
CDC *pDC=m_Pic.GetDC();
CRect rc;
m_Pic.GetClientRect(rc);
CRgn allRgn,tmpRgn;
allRgn.CreateRectRgn(0,0,0,0);
//
for(int y=0;y < rc.Height();y++)
{
for(int x=0;x < rc.Width();x++)
{
COLORREF col=pDC->GetPixel(x,y);
if((!start) && (col == RGB(0,0,0)))
{// once a line
start=TRUE;
// find end
int e=x;
int repeat=x;
// skip as many as black points
while((pDC->GetPixel(e,y) == RGB(0,0,0)) && (e < rc.Width()))
{
e++;
repeat++;
}
// search end
while((pDC->GetPixel(e,y) != RGB(0,0,0)) && (e < rc.Width()))
{
e++;
}
// if after end ,still black points
while((pDC->GetPixel(e,y) == RGB(0,0,0)) && (e < rc.Width()))
{
e++;
}
// check valid x
if(e == rc.Width())
{// not found
end=repeat;
}
else
{// found
end=e;
}
}// end if((!start) && (col == RGB(0,0,0)))
// add rgn
if(start && (x < end))
{
#if 1 // not use rgn
pDC->SetPixel(x,y,RGB(255,0,0));
#else
tmpRgn.CreateRectRgn(x,y,x+1,y+1);
allRgn.CombineRgn(&allRgn,&tmpRgn,RGN_OR);
tmpRgn.DeleteObject();
#endif
}
}// end for x
// reset flag
start=FALSE;
}// end for y
#if 0
//draw rgn
CBrush br;
br.CreateSolidBrush(RGB(255,0,0));
pDC->FillRgn(&allRgn,&br);
ReleaseDC(pDC);
#endif
}

记录 pDC->SetPixel(x,y,RGB(255,0,0)); 的点数就是 面积
Cipherliu 2020-07-05
  • 打赏
  • 举报
回复
我们是用数值积分的办法做的,所有的参数曲线都可以适用。
yang_deyuan 2020-04-07
  • 打赏
  • 举报
回复
可用鞋带公式求。具体参考:https://blog.csdn.net/yang_deyuan/article/details/78863424
fandh 2018-08-10
  • 打赏
  • 举报
回复
https://blog.csdn.net/langmanqishizaijia/article/details/51097364
赵4老师 2018-05-25
  • 打赏
  • 举报
回复
参考开源OpenCV项目中cvContourArea函数的实现。

19,468

社区成员

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

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