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

对给定的凸多边形区域生成三角形网格。
输入条件:二维凸多边形区域
实际输入:围成此区域的边界点集
输出结果:此区域的三角形网格
实际输出:网格数据
网格要求: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;
}

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值