В нашей онлайн базе уже более 10821 рефератов!

Список разделов
Самое популярное
Новое
Поиск
Заказать реферат
Добавить реферат
В избранное
Контакты
Украинские рефераты
Статьи
От партнёров
Новости
Крупнейшая коллекция рефератов
Предлагаем вам крупнейшую коллекцию из 10821 рефератов!

Вы можете воспользоваться поиском готовых работ или же получить помощь по подготовке нового реферата практически по любому предмету. Также вы можете добавить свой реферат в базу.

Алгоритм компактного хранения и решения СЛАУ высокого порядка

Страница 5

double cx,

cy,

cz,

x1,

y1,

z1,

x2,

y2,

z2,

x3,

y3,

z3;

Bounds.ReSize(4 * NumTr,6);

switch (CurrentType)

{

case BASE3D_4:

Num1 = 4;

Num2 = 3;

for (l = 0; l < Num1; l++)

for (m = 0; m < Num2+1; m++)

cData[l][m] = cData4[l][m];

break;

case BASE3D_8:

Num1 = 6;

Num2 = 4;

for (l = 0; l < Num1; l++)

for (m = 0; m < Num2 + 1; m++)

cData[l][m] = cData8[l][m];

break;

case BASE3D_10:

Num1 = 4;

Num2 = 6;

for (l = 0; l < Num1; l++)

for (m = 0; m < Num2+1; m++)

cData[l][m] = cData10[l][m];

}

printf("Create bounds . ");

for (i = 0; i < NumTr - 1; i++)

for (int j = 0; j < Num1; j++)

if (!BoundList[i][j])

{

for (l = 0; l < Num2; l++)

p[l] = FE[i][cData[j][l]];

for (DWORD k = i + 1; k < NumTr; k++)

for (int m = 0; m < Num1; m++)

if (!BoundList[k][m])

{

for (int l = 0; l < Num2; l++)

pp[l] = FE[k][cData[m][l]];

if (Test(p,pp))

BoundList[i][j] = BoundList[k][m] = 1;

}

}

for (i = 0; i < NumTr; i++)

for (j = 0; j < (DWORD)Num1; j++)

if (BoundList[i][j] == 0)

{

if (CurrentType == BASE3D_4)

{

cx = X[FE[i][cData[j][3]]];

cy = Y[FE[i][cData[j][3]]];

cz = Z[FE[i][cData[j][3]]];

}

else

if (CurrentType == BASE3D_10)

{

cx = X[FE[i][cData[j][6]]];

cy = Y[FE[i][cData[j][6]]];

cz = Z[FE[i][cData[j][6]]];

}

else

{

cx = X[FE[i][cData[j][4]]];

cy = Y[FE[i][cData[j][4]]];

cz = Z[FE[i][cData[j][4]]];

}

x1 = X[FE[i][cData[j][0]]];

y1 = Y[FE[i][cData[j][0]]];

z1 = Z[FE[i][cData[j][0]]];

x2 = X[FE[i][cData[j][1]]];

y2 = Y[FE[i][cData[j][1]]];

z2 = Z[FE[i][cData[j][1]]];

x3 = X[FE[i][cData[j][2]]];

y3 = Y[FE[i][cData[j][2]]];

z3 = Z[FE[i][cData[j][2]]];

for (l = 0; l < Num2; l++)

Data[l] = cData[j][l];

if ( ((cx-x1)*(y2-y1)*(z3-z1) + (cy-y1)*(z2-z1)*(x3-x1) + (y3-y1)*(cz-z1)*(x2-x1) -

(x3-x1)*(y2-y1)*(cz-z1) - (y3-y1)*(z2-z1)*(cx-x1) - (cy-y1)*(z3-z1)*(x2-x1)) > 0)

{

if (CurrentType == BASE3D_4)

{

Data[0] = cData[j][0];

Data[1] = cData[j][2];

Data[2] = cData[j][1];

}

else

if (CurrentType == BASE3D_10)

{

Data[0] = cData[j][0];

Data[1] = cData[j][2];

Data[2] = cData[j][1];

Data[3] = cData[j][5];

Data[5] = cData[j][3];

}

else

{

Data[0] = cData[j][0];

Data[1] = cData[j][3];

Data[2] = cData[j][2];

Data[3] = cData[j][1];

}

}

for (l = 0; l < Num2; l++)

Bounds[BnCount][l] = FE[i][Data[l]];

BnCount++;

}

}

void main(int argc,char** argv)

{

char *input1,

*input2,

*input3,

*op = "",

*sw;

bool CreateFile(char*,char*,char*,char*);

printf("ANSYS->FORL file convertor. ZSU(c) 1998. ");

if (argc < 5 || argc > 6)

{

PrintHeader();

return;

}

sw = argv[1];

input1 = argv[2];

input2 = argv[3];

input3 = argv[4];

if (!strcmp(sw,"-t10"))

CurrentType = BASE3D_10;

else

if (!strcmp(sw,"-c8"))

CurrentType = BASE3D_8;

else

{

printf("Unknown switch %s ",sw);

PrintHeader();

return;

}

if (argc == 6)

{

op = argv[5];

if (strcmp(op,"/8") && strcmp(op,"/6"))

{

printf("Unknown options %s ",op);

PrintHeader();

return;

}

}

if (CreateFile(input1,input2,input3,op))

printf("OK ");

}

bool CreateFile(char* fn1,char* fn2,char* fn3,char* Op)

{

FILE *in1,

*in2,

*in3;

Vector<double> X(1000),

Y(1000),

Z(1000);

DWORD NumPoints,

NumFE,

NumBounds = 0,

tmp;

Matrix<DWORD> FE(1000,10),

Bounds;

bool ReadTetraedrData(char*,char*,FILE*,FILE*,Vector<double>&,Vector<double>&,Vector<double>&,

Matrix<DWORD>&,DWORD&,DWORD&),

ReadCubeData(char*,char*,FILE*,FILE*,Vector<double>&,Vector<double>&,Vector<double>&,

Matrix<DWORD>&,DWORD&,DWORD&);

void Convert824(Matrix<DWORD>&,DWORD&),

Convert1024(Matrix<DWORD>&,DWORD&);

if ((in1 = fopen(fn1,"r")) == NULL)

{

printf("Unable open file %s",fn1);

return false;

}

if ((in2 = fopen(fn2,"r")) == NULL)

{

printf("Unable open file %s",fn2);

return false;

}

if (CurrentType == BASE3D_10)

{

if (!ReadTetraedrData(fn1,fn2,in1,in2,X,Y,Z,FE,NumPoints,NumFE)) return false;

if (!strcmp(Op,"/8"))

{

// Create 8*Tetraedr(4)

Convert1024(FE,NumFE);

}

Convert(X,Y,Z,FE,NumFE,Bounds,NumBounds);

return !Output(fn3,X,Y,Z,FE,NumPoints,0,NumFE,Bounds,NumBounds);

}

if (CurrentType == BASE3D_8)

{

if (!ReadCubeData(fn1,fn2,in1,in2,X,Y,Z,FE,NumPoints,NumFE)) return false;

if (!strcmp(Op,"/6"))

{

// Create 6*Tetraedr(4)

Convert824(FE,NumFE);

}

Convert(X,Y,Z,FE,NumFE,Bounds,NumBounds);

return !Output(fn3,X,Y,Z,FE,NumPoints,0,NumFE,Bounds,NumBounds);

}

return false;

}

void Convert824(Matrix<DWORD>& FE,DWORD& NumFE)

{

Matrix<DWORD> nFE(6 * NumFE,4);

DWORD data[][4] = {

{ 0,2,3,6 },

{ 4,5,1,7 },

{ 0,4,1,3 },

{ 6,7,3,4 },

{ 1,3,7,4 },

{ 0,4,6,3 }

},

Current = 0;

for (DWORD i = 0; i < NumFE; i++)

for (DWORD j = 0; j < 6; j++)

{

for (DWORD k = 0; k < 4; k++)

nFE[Current][k] = FE[i][data[j][k]];

Current++;

}

CurrentType = BASE3D_4;

NumFE = Current;

FE = nFE;

}

void Convert1024(Matrix<DWORD>& FE,DWORD& NumFE)

{

Matrix<DWORD> nFE(8 * NumFE,4);

DWORD data[][4] = {

{ 3,7,8,9 },

{ 0,4,7,6 },

{ 2,5,9,6 },

{ 7,9,8,6 },

{ 4,8,5,1 },

{ 4,5,8,6 },

{ 7,8,4,6 },

{ 8,9,5,6 }

},

Current = 0;

for (DWORD i = 0; i < NumFE; i++)

for (DWORD j = 0; j < 8; j++)

{

for (DWORD k = 0; k < 4; k++)

nFE[Current][k] = FE[i][data[j][k]];

Current++;

}

CurrentType = BASE3D_4;

NumFE = Current;

FE = nFE;

}

bool ReadTetraedrData(char* fn1,char* fn2,FILE* in1,FILE* in2,Vector<double>& X,Vector<double>& Y,Vector<double>& Z,

Matrix<DWORD>& FE,DWORD& NumPoints,DWORD& NumFE)

{

double tx,

ty,

tz;

char TextBuffer[1001];

DWORD Current = 0L,

tmp;

while (!feof(in1))

{

if (fgets(TextBuffer,1000,in1) == NULL)

{

if (feof(in1)) break;

printf("Unable read file %s",fn1);

fclose(in1);

fclose(in2);

return false;

}

if (sscanf(TextBuffer,"%ld %lf %lf %lf", &NumPoints,&tx,&ty,&tz) != 4) continue;

X[Current] = tx;

Y[Current] = ty;

Z[Current] = tz;

if (++Current == 999)

{

Vector<double> t1 = X,

t2 = Y,

t3 = Z;

X.ReSize(2 * X.Size());

Y.ReSize(2 * X.Size());

Z.ReSize(2 * X.Size());

for (DWORD i = 0; i < Current; i++)

{

X[i] = t1[i];

Y[i] = t2[i];

Z[i] = t3[i];

}

}

if (Current % 100 == 0)

printf("Line: %ld ",Current);

}

fclose(in1);

printf(" ");

NumPoints = Current;

Current = 0L;

while (!feof(in2))

{

if (fgets(TextBuffer,1000,in2) == NULL)

{

if (feof(in2)) break;

printf("Unable read file %s",fn2);

1 2 3 4 [5] 6 7

скачать реферат скачать реферат

Новинки
Интересные новости


Заказ реферата
Заказать реферат
Счетчики

Rambler's Top100

Ссылки
Все права защищены © 2005-2019 textreferat.com