`
guoyiqi
  • 浏览: 964529 次
社区版块
存档分类
最新评论

对给定的凸多边形区域生成三角形网格

 
阅读更多

对给定的凸多边形区域生成三角形网格。
输入条件:二维凸多边形区域
实际输入:围成此区域的边界点集
输出结果:此区域的三角形网格
实际输出:网格数据
网格要求:1 任意三角形的任意边长≤1.0;
2 网格节点数目尽量少。

1、网格区域输入格式
2、网格初始化
3、网格单元的细分
4、三角形的优化
5、边界处理
6、数据结构
7、网格输出格式

三角形和节点关系定理:对于任意n个节点,如果边界上的节点数为k,(满足k<n),那么任意三角形剖分必然由2n-2-k个三角形组成。
数据结构

1)网格节点
struct Node
{
double X,Y;
}
2)三角形单元
struct Triangle
{
Node *n1, *n2, *n3;
Triangle *t1, *t2, *t3;
}

int check(triangle x){
 double max = dis(x.a,x.b),
     mid = dis(x.a,x.c),
     min = dis(x.b,x.c),
     t,A;
 int mp = 3;
 if ((max<=1.0)&&(mid<=1.0)&&(min<=1.0))
  return 0;
 if (max<mid){ t=max;max=mid;mid=t;mp = 2; }
 if (max<min){ t=max;max=min;min=t;mp = 1; }
 if (mid<min){ t=mid;mid=min;min=t; }
 A = acos((mid*mid+min*min-max*max)/(2*mid*min));
 if (A<PI/2)
  return 1;
 return 1+mp;
}
double dis(point x,point y){
 return sqrt((x.x-y.x)*(x.x-y.x)+(x.y-y.y)*(x.y-y.y));
}

int cmp(point x,point y){
    if (x.x<y.x)
       return 1;
    if (x.x>y.x)
       return -1;
    if (x.y>y.y)
       return 1;
    if (x.y<y.y)
       return -1;
    return 0;
}

分享到:
评论

相关推荐

Global site tag (gtag.js) - Google Analytics