RSS    

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

p>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& FE, DWORD& NumFE)
    {
    Matrix 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& FE, DWORD& NumFE)
    {
    Matrix 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& X, Vector& Y, Vector& Z,

    Matrix& 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 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\r", Current);
    }
    fclose(in1);
    printf(" \r");
    NumPoints = Current;
    Current = 0L;
    while (! feof(in2))
    {
    if (fgets(TextBuffer, 1000, in2) == NULL)
    {
    if (feof(in2)) break;
    printf("Unable read file %s", fn2);
    fclose(in2);
    return false;
    }

if (sscanf(TextBuffer, "%d %d %d %d %d %ld %ld %ld %ld %ld %ld %ld %ld", &tmp, &tmp, &tmp, &tmp, &tmp,

&FE[Current][0], &FE[Current][1], &FE[Current][2], &FE[Current][3], &FE[Current][4], &FE[Current][5], &FE[Current][6], &FE[Current][7]) ! = 13) continue;

    if (fgets(TextBuffer, 1000, in2) == NULL)
    {
    printf("Unable read file %s", fn2);
    fclose(in2);
    return false;
    }

if (sscanf(TextBuffer, "%ld %ld", &FE[Current][8], &FE[Current][9]) ! = 2) {

    printf("Unable read file %s", fn2);
    fclose(in2);
    return false;
    }
    {

if (fabs((tx = 0. 5*(X[FE[Current][0] - 1] + X[FE[Current][1] - 1])) X[FE[Current][4] - 1]) > Eps)

    X[FE[Current][4] - 1] = tx;

if (fabs((ty = 0. 5*(Y[FE[Current][0] - 1] + Y[FE[Current][1] - 1])) Y[FE[Current][4] - 1]) > Eps)

    Y[FE[Current][4] - 1] = ty;

if (fabs((tz = 0. 5*(Z[FE[Current][0] - 1] + Z[FE[Current][1] - 1])) Z[FE[Current][4] - 1]) > Eps)

    Z[FE[Current][4] - 1] = tz;

if (fabs((tx = 0. 5*(X[FE[Current][2] - 1] + X[FE[Current][1] - 1])) X[FE[Current][5] - 1]) > Eps)

    X[FE[Current][5] - 1] = tx;

if (fabs((ty = 0. 5*(Y[FE[Current][2] - 1] + Y[FE[Current][1] - 1])) Y[FE[Current][5] - 1]) > Eps)

    Y[FE[Current][5] - 1] = ty;

if (fabs((tz = 0. 5*(Z[FE[Current][2] - 1] + Z[FE[Current][1] - 1])) Z[FE[Current][5] - 1]) > Eps)

    Z[FE[Current][5] - 1] = tz;

if (fabs((tx = 0. 5*(X[FE[Current][0] - 1] + X[FE[Current][2] - 1])) X[FE[Current][6] - 1]) > Eps)

    X[FE[Current][6] - 1] = tx;

if (fabs((ty = 0. 5*(Y[FE[Current][0] - 1] + Y[FE[Current][2] - 1])) Y[FE[Current][6] - 1]) > Eps)

    Y[FE[Current][6] - 1] = ty;

if (fabs((tz = 0. 5*(Z[FE[Current][0] - 1] + Z[FE[Current][2] - 1])) Z[FE[Current][6] - 1]) > Eps)

    Z[FE[Current][6] - 1] = tz;

if (fabs((tx = 0. 5*(X[FE[Current][0] - 1] + X[FE[Current][3] - 1])) X[FE[Current][7] - 1]) > Eps)

    X[FE[Current][7] - 1] = tx;

if (fabs((ty = 0. 5*(Y[FE[Current][0] - 1] + Y[FE[Current][3] - 1])) Y[FE[Current][7] - 1]) > Eps)

    Y[FE[Current][7] - 1] = ty;

if (fabs((tz = 0. 5*(Z[FE[Current][0] - 1] + Z[FE[Current][3] - 1])) Z[FE[Current][7] - 1]) > Eps)

    Z[FE[Current][7] - 1] = tz;

if (fabs((tx = 0. 5*(X[FE[Current][3] - 1] + X[FE[Current][1] - 1])) X[FE[Current][8] - 1]) > Eps)

    X[FE[Current][8] - 1] = tx;

if (fabs((ty = 0. 5*(Y[FE[Current][3] - 1] + Y[FE[Current][1] - 1])) Y[FE[Current][8] - 1]) > Eps)

    Y[FE[Current][8] - 1] = ty;

if (fabs((tz = 0. 5*(Z[FE[Current][3] - 1] + Z[FE[Current][1] - 1])) Z[FE[Current][8] - 1]) > Eps)

    Z[FE[Current][8] - 1] = tz;

if (fabs((tx = 0. 5*(X[FE[Current][3] - 1] + X[FE[Current][2] - 1])) X[FE[Current][9] - 1]) > Eps)

    X[FE[Current][9] - 1] = tx;

if (fabs((ty = 0. 5*(Y[FE[Current][3] - 1] + Y[FE[Current][2] - 1])) Y[FE[Current][9] - 1]) > Eps)

    Y[FE[Current][9] - 1] = ty;

if (fabs((tz = 0. 5*(Z[FE[Current][3] - 1] + Z[FE[Current][2] - 1])) Z[FE[Current][9] - 1]) > Eps)

    Z[FE[Current][9] - 1] = tz;
    }
    if (++Current == 999)
    {
    Matrix t = FE;
    FE. ReSize(2 * FE. Size1(), 10);
    for (DWORD i = 0; i < Current; i++)
    for (DWORD j = 0; j < 10; j++)
    FE[i][j] = t[i][j];
    }
    if (Current % 100 == 0)
    printf("Line: %ld\r", Current);
    }
    NumFE = Current;
    for (DWORD i = 0; i < NumFE; i++)
    for (DWORD j = 0; j < 10; j++)
    FE[i][j]--;
    printf(" \r");
    return true;
    }

bool ReadCubeData(char* fn1, char*fn2, FILE* in1, FILE* in2, Vector& X, Vector& Y, Vector& Z,

    Matrix& 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;
    }

Страницы: 1, 2, 3, 4, 5, 6


Новости


Быстрый поиск

Группа вКонтакте: новости

Пока нет

Новости в Twitter и Facebook

                   

Новости

© 2010.