extern void g01_enter_point (double x1, double y1, double z1, double f) { int i, j; const double dx = 1.0; const double dy = 1.0; const double dz = 1.0; int size; double** arr; double** arrCoord; double** arrCoordVertice; int index = 1; size = sizeArr (x0, Y0, z0, x1, y1, z1, dx, dy, dz); arr = (double**)malloc(size*sizeof(double*)); for (i = 0; i < size; ++i) { arr [i] = (double*)malloc(3*sizeof(double)); } arr [0][0] = x0; arr [0][1] = Y0; arr [0][2] = z0; arr [size - 1][0] = x1; arr [size - 1][1] = y1; arr [size - 1][2] = z1; filling (arr, &index, dx, 'x', size); filling (arr, &index, dy, 'y', size); filling (arr, &index, dz, 'z', size); if (x0 != x1) { sort (arr, size, 'x'); } else if (Y0 != y1) { sort (arr, size, 'y'); } int tmpSize = size; offset (arr, &size); arrCoord = (double**)malloc(size*sizeof(double*)); for (i = 0; i < size; ++i) { arrCoord [i] = (double*)malloc(3*sizeof(double)); } for (i = 0; i < size; ++i) { for (j = 0; j < 3; ++j) { arrCoord [i][j] = arr [i][j]; } } coordVertice (arrCoord, size, dx, dy, dz); int tmpSizeCoord = size; offset (arrCoord, &size); arrCoordVertice = (double**)malloc(size*sizeof(double*)); for (i = 0; i < size; ++i) { arrCoordVertice [i] = (double*)malloc(3*sizeof(double)); } printf ("(%f, %f, %f) (%f, %f, %f)\n", x0, Y0, z0, x1, y1, z1); for (i = 0; i < tmpSize; ++i) { free (arr [i]); } free (arr); for (i = 0; i < tmpSizeCoord; ++i) { free (arrCoord [i]); } free (arrCoord); for (i = 0; i < size; ++i) { free (arrCoordVertice [i]); } free (arrCoordVertice); x0 = x1; Y0 = y1; z0 = z1; }
void g01_enter_point (double x1, double y1, double z1, double f) { int i, j; const double dx = 1.0; const double dy = 1.0; const double dz = 1.0; int size; /* Размер массива */ double** arr; double** arrCoord; /* Массив точек*/ double** arrCoordVertice; /* Массив координат вершин*/ int index = 1; size = sizeArr (g_x0, g_y0, g_z0, x1, y1, z1, dx, dy, dz); /* Нахождение размера массива точек пересечения прямой с сеткой*/ arr = (double**)malloc(size*sizeof(double*)); for (i = 0; i < size; ++i) { arr [i] = (double*)malloc(3*sizeof(double)); } arr [0][0] = g_x0; arr [0][1] = g_y0; arr [0][2] = g_z0; arr [size - 1][0] = x1; arr [size - 1][1] = y1; arr [size - 1][2] = z1; /* Получение массива точек пересечения с сеткой*/ filling (arr, &index, dx, 'x', size); filling (arr, &index, dy, 'y', size); filling (arr, &index, dz, 'z', size); if (g_x0 != x1) { sort (arr, size, 'x'); /* Сортировка массива точек по координате 'x'*/ } else if (g_y0 != y1) { sort (arr, size, 'y'); /* Сортировка массива точек по координате 'y'*/ } int tmpSize = size; offset (arr, &size); /* Удаление из массива одинаковых точек*/ arrCoord = (double**)malloc(size*sizeof(double*)); for (i = 0; i < size; ++i) { arrCoord [i] = (double*)malloc(3*sizeof(double)); } for (i = 0; i < size; ++i) { for (j = 0; j < 3; ++j) { arrCoord [i][j] = arr [i][j]; } } coordVertice (arrCoord, size, dx, dy, dz); /* Массив точек прямой по сетке*/ int tmpSizeCoord = size; offset (arrCoord, &size); /* Удаление из массива одинаковых точек*/ arrCoordVertice = (double**)malloc(size*sizeof(double*)); for (i = 0; i < size; ++i) { arrCoordVertice [i] = (double*)malloc(3*sizeof(double)); } /*printf ("\n");*/ /*for (i = 0; i < size; ++i) { printf ("(%f, %f, %f)\n", arrCoord [i][0], arrCoord [i][1], arrCoord [i][2]); }*/ for (i = 0; i < tmpSize; ++i) { free (arr [i]); } free (arr); for (i = 0; i < tmpSizeCoord; ++i) { free (arrCoord [i]); } free (arrCoord); for (i = 0; i < size; ++i) { free (arrCoordVertice [i]); } free (arrCoordVertice); g_x0 = x1; g_y0 = y1; g_z0 = z1; /*handle result*/ if (handler_gcommand_result) handler_gcommand_result (g_x0, g_y0, g_z0, f); }