回复 5楼 beyondyf
#include "iostream.h"
#include "math.h"
#include "stdio.h"
#include "stdlib.h"
#define
N 5
//分割圈数
float power(float a,int b)
//计算平方项的函数
{
float ss=1;
int i;
if (b==0)
{
return(1);
}
else
{
for (i=0;i<b;i++)
{
ss*=a;
}
return(ss);
}
}
double S_triangle(double ax,double ay,double bx,double by,double cx,double cy)
//计算面积函数
{
double mx=by-cy,my=cy-ay,nx=cx-bx,ny=ax-cx;
double S_tri=0.5*(mx*ny-my*nx);
if(S_tri>=0)
return S_tri;
else
return (-1*S_tri);
}
void main()
{
// UpdateData(TRUE);
int i,j,s,m,k=0;
int Q=6*N*N; // 单元数
int QQ=3*N*(N+1)+1;//节点总数
int *ERT;
double *area;
double *Y,*YY;
YY=(double*)malloc(9*sizeof(double));
Y=(double*)malloc(Q*9*sizeof(double));
area=(double*)malloc(Q*sizeof(int));
ERT=(int*)malloc(Q*3*sizeof(int));
int EI=0;
int ZEN;//区节点
int eq=0;//每区的节点数
int qj;//每圈的节点总数
for (i=1;i<=N;i++)
{
eq=2*i-1;
qj=6*i;
if (i==1)
{
for (j=0;j<5;j++)
{
*(ERT+j*3)=0;
*(ERT+j*3+1)=j+1;
*(ERT+j*3+2)=j+2;
}
*(ERT+15)=0;
*(ERT+16)=6;
*(ERT+17)=1;
}
else
{
*(ERT+EI*3)=3*(i-1)*(i-2)+1; //第i圈第一单元编号
*(ERT+EI*3+1)=3*i*(i-1)+1;
*(ERT+EI*3+2)=3*i*(i-1)+2;
*(ERT+(EI+1)*3)=3*(i-1)*(i-2)+1; //第i圈第二单元编号
*(ERT+(EI+1)*3+1)=3*i*(i-1)+2;
*(ERT+(EI+1)*3+2)=3*(i-1)*(i-2)+2;
for (j=2;j<eq;j++)
{
*(ERT+(EI+j)*3)=*(ERT+(EI+j-2)*3)+1;
//第i圈剩余单元编号
*(ERT+(EI+j)*3+1)=*(ERT+(EI+j-2)*3+1)+1;
*(ERT+(EI+j)*3+2)=*(ERT+(EI+j-2)*3+2)+1;
}
for (s=1;s<6;s++)
//第i圈其余区间的单元编号
{
ZEN=s*eq;
for (m=0;m<eq;m++)
{
if (m%2!=0)
{
*(ERT+(EI+ZEN+m)*3)=*(ERT+(EI+m)*3)+s*(i-1);
*(ERT+(EI+ZEN+m)*3+1)=*(ERT+(EI+m)*3+1)+s*i;
*(ERT+(EI+ZEN+m)*3+2)=*(ERT+(EI+m)*3+2)+s*(i-1);
}
else
{
*(ERT+(EI+ZEN+m)*3)=*(ERT+(EI+m)*3)+s*(i-1);
*(ERT+(EI+ZEN+m)*3+1)=*(ERT+(EI+m)*3+1)+s*i;
*(ERT+(EI+ZEN+m)*3+2)=*(ERT+(EI+m)*3+2)+s*i;
}
}
}
*(ERT+(EI+6*eq-1)*3)=3*(i-1)*(i-2)+1;
*(ERT+(EI+6*eq-1)*3+1)=3*(i+1)*i;
*(ERT+(EI+6*eq-1)*3+2)=3*(i-1)*i+1;
*(ERT+(EI+6*eq-2)*3)=3*i*(i-1);
*(ERT+(EI+6*eq-2)*3+1)=3*(i+1)*i;
*(ERT+(EI+6*eq-2)*3+2)=3*(i-1)*(i-2)+1;
}
EI+=6*eq;
}
int t=1;
float R=100;
double pi=3.1415926;
int pn=0;//每圈的节点个数
float *px;
float *py;
px=(float*)malloc((3*N*(N+1)+1)*sizeof(float));
py=(float*)malloc((3*N*(N+1)+1)*sizeof(float));
*(px)=0;
*(py)=0;
for(i=0;i<=QQ;i++)
{
*(px+i)=0;
*(px+i)=0;
}
for( i=0;i<=N;i++)
{
pn=6*i;
for(int w=0;w<pn;w++)
{
*(px+w+t)=float(i*R*cos(2*pi*w/pn)/N);
*(py+w+t)=float(i*R*sin(2*pi*w/pn)/N);
//
printf("PX[%d]=%f,PY[%d]=%f\n",w+t,*(px+w+t),w+t,*(py+w+t));
}
t=t+pn;
}
for (i=0;i<6*(N)*(N);i++)
//计算面积
{
printf("%d:%f,%f\n%d:%f,%f\n%d:%f,%f\n",ERT[i*3],px[ERT[i*3]],py[ERT[i*3]],ERT[i*3+1],px[ERT[i*3+1]],py[ERT[i*3+1]],ERT[i*3+2],px[ERT[i*3+2]],py[ERT[i*3+2]]);
*(area+i)=S_triangle(px[ERT[i*3]],py[ERT[i*3]],px[ERT[i*3+1]],py[ERT[i*3+1]],px[ERT[i*3+2]],py[ERT[i*3+2]]);
printf("area[%d]=%f\n",i,area[i]);
}
/*
for (j=0;j<6*(N)*(N);j++)
{
printf("area[%d]=%f\n",j,area[j]);
}*/
}