16,472
社区成员
发帖
与我相关
我的任务
分享
//按逆时针算出每个单元包含的节点坐标与编号矩阵
for(int c=1;c<=lay;c++)
{
int m=2*c+1; //第c层第一部分的节点总数
int l=2*c-1; //第c层第一部分的单元总数(三角形数)
NodeStruct * jn=new NodeStruct[m+1];
if(jn==NULL)
{
int tttt;
tttt++;
}
for(int ii=1;ii<=8;ii++)
{
if(ii<=7) //1-7部分算法相同,第8部分节点坐标计算有所不同,单独计算
{
for(int j=1;j<=m;j++) //第c层1部分的局部节点编号j
{
if(j%2==1) //局部节点为奇数,对应总节点编号zn
NodeIndex=1+8*c*(c-1)/2+c*ii-(c-1)+(j-1)/2;
if(j%2==0) //局部节点为偶数,对应总节点编号zn
{
if(c==1) //c=1时,偶数局部节点只有原点
NodeIndex=1;
else
NodeIndex=1+8*(c-1)*(c-2)/2+(c-1)*ii-(c-2)+(j/2-1);
}
jn[j].x=myNode[NodeIndex].x; //节点坐标赋给单个单元局部节点坐标矩阵jn
jn[j].y=myNode[NodeIndex].y;
jn[j].index=NodeIndex;
}
}
if(ii==8) //第8部分,最后两节点单独计算j==m-1和j==m
{
for(int j=1;j<=m;j++)
{
if(j<=(m-2))
{
if(j%2==1)
NodeIndex=1+8*c*(c-1)/2+c*ii-(c-1)+(j-1)/2;
if(j%2==0)
{
if(c==1)
NodeIndex=1;
else
NodeIndex=1+8*(c-1)*(c-2)/2+(c-1)*ii-(c-2)+(j/2-1);
}
}
if(j==(m-1))
{
if(c==1)
NodeIndex=1;
else
NodeIndex=1+8*(c-1)*(c-2)/2+(c-1)*1-(c-2)+(2/2-1);
}
if(j==m)
NodeIndex=1+8*c*(c-1)/2+c*1-(c-1)+(1-1)/2;
jn[j].x=myNode[NodeIndex].x; //节点坐标赋给单个单元局部节点坐标矩阵jn
jn[j].y=myNode[NodeIndex].y;
jn[j].index=NodeIndex;
}
}
for(int k=1;k<=l;k++) //取遍1部分所有的三角形单元
{
TrigIndex++;
myTrig[TrigIndex].Point[1]=jn[k];
myTrig[TrigIndex].Point[2]=jn[k+1];
myTrig[TrigIndex].Point[3]=jn[k+2];
}
}
if(jn==NULL)
{
int tmp=1;
tmp++;
}
[code=C/C++]
delete[]jn;
if(c!=4)
delete[]jn;