设为首页 加入收藏

TOP

一种低效但逻辑简单清晰的Delaunay三角网生成算法(二)
2014-11-23 23:57:07 来源: 作者: 【 】 浏览:26
Tags:低效 逻辑 简单 清晰 Delaunay 三角 生成 算法
ayEx(vector& vecPT, vector& vecTriangleWork);


BOOL IsPtsBuildTriangle(PT* pt1, PT* pt2, PT* pt3);
public:
CMyDelaunay();
virtual ~CMyDelaunay();


};


//判断三个点能否组成一个三角形
BOOL CMyDelaunay::IsPtsBuildTriangle(PT* pt1, PT* pt2, PT* pt3)
{
double offset_x1 = pt2->x - pt1->x;
double offset_x2 = pt3->x - pt2->x;
double offset_y1 = pt2->y - pt1->y;
double offset_y2 = pt3->y - pt2->y;


if((fabs(offset_x1) < EP) && (fabs(offset_x2) < EP)) //竖直
{
return FALSE;
}

if(fabs(offset_x1) > EP && fabs(offset_x2) > EP)
{
if(fabs(offset_y1/offset_x1 - offset_y2/offset_x2) < EP)
return FALSE;
}

return TRUE;
}


void CMyDelaunay::BuildDelaunayEx(vector& vecPT, vector& vecTriangleWork)
{
int nSize = vecPT.size();
if(nSize < 3)
return;

for(int i = 0; i < nSize - 2; ++i)
{
for(int j = i + 1; j < nSize - 1; ++j)
{
for(int k = j + 1; k < nSize; ++k)
{
PT* pt1 = &vecPT[i];
PT* pt2 = &vecPT[j];
PT* pt3 = &vecPT[k];
BOOL bFind = TRUE;
for(int m = 0; m < nSize; ++m)
{
PT* pt = &vecPT[m];
if(pt != pt1 && pt != pt2 && pt != pt3 && IsPtsBuildTriangle(pt1, pt2, pt3))
{
TRIANGLE tri(pt1, pt2, pt3);
if(tri.IsPtInCircle(pt))
{
bFind = FALSE;
break;
}
}
}
if(bFind)
{
vecTriangleWork.push_back(tri);
}


}
}
}
}


首页 上一页 1 2 下一页 尾页 2/2/2
】【打印繁体】【投稿】【收藏】 【推荐】【举报】【评论】 【关闭】 【返回顶部
分享到: 
上一篇Linux下Qt调用Matlab引擎 下一篇Linux环境下编译CLucene

评论

帐  号: 密码: (新用户注册)
验 证 码:
表  情:
内  容: