Починил, понял, что неверно работает функция
This commit is contained in:
parent
610ed3990a
commit
c14c8ef9c2
4 changed files with 64 additions and 70 deletions
|
@ -14,7 +14,7 @@ circle MEC(point * I, int ilen, point * N, int nlen) {
|
||||||
}
|
}
|
||||||
|
|
||||||
bool belongs(circle crcl, point p) {
|
bool belongs(circle crcl, point p) {
|
||||||
if (powd(p.x - crcl.center.x) + powd(p.y - crcl.center.y) - powd(crcl.radius) <= exp) return true;
|
if (powd(p.x - crcl.center.x) + powd(p.y - crcl.center.y) <= exp + powd(crcl.radius)) return true;
|
||||||
return false;
|
return false;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
|
@ -3,30 +3,24 @@
|
||||||
#include "hope.h"
|
#include "hope.h"
|
||||||
|
|
||||||
int main(void) {
|
int main(void) {
|
||||||
points * pts;
|
points pts;
|
||||||
point N[3];
|
point N[3];
|
||||||
circle crcl;
|
circle crcl;
|
||||||
|
|
||||||
pts = getPoints(file);
|
pts = getPoints();
|
||||||
if (pts == NULL) return -1;
|
if (pts.array == NULL) return -1;
|
||||||
|
|
||||||
/*
|
printPoints(pts);
|
||||||
printf("\nPoints:\n");
|
|
||||||
for (int i = 0; i < ps.length; ++i) printf("(%.2lf, %.2lf) ", ps.array[i].x, ps.array[i].y);
|
|
||||||
printf("\n\n");
|
|
||||||
*/
|
|
||||||
|
|
||||||
printPoints(*pts);
|
|
||||||
|
|
||||||
printf("\nFast algorithm:\n");
|
printf("\nFast algorithm:\n");
|
||||||
crcl = MEC(ps->array, ps->length, N, 0);
|
crcl = MEC(pts.array, pts.length, N, 0);
|
||||||
printCircle(crcl);
|
printCircle(crcl);
|
||||||
|
|
||||||
printf("\nReliable algorithm:\n");
|
printf("\nReliable algorithm:\n");
|
||||||
crcl = hope(ps->array, ps->length);
|
crcl = hope(pts.array, pts.length);
|
||||||
printCircle(crcl);
|
printCircle(crcl);
|
||||||
|
|
||||||
free(ps->array);
|
free(pts.array);
|
||||||
|
|
||||||
return 0;
|
return 0;
|
||||||
}
|
}
|
||||||
|
|
|
@ -1,5 +1,36 @@
|
||||||
#include "tools.h"
|
#include "tools.h"
|
||||||
|
|
||||||
|
points getPoints(void) {
|
||||||
|
int fileOrRandom;
|
||||||
|
|
||||||
|
printf("0 - if points from file\n1 - if random generation of points\nYour choice: ");
|
||||||
|
|
||||||
|
if (scanf("%d", &fileOrRandom) < 1) {
|
||||||
|
printf("Enter error!\n");
|
||||||
|
return (points){NULL, 0};
|
||||||
|
}
|
||||||
|
|
||||||
|
if (fileOrRandom == 0) {
|
||||||
|
return getPointsFromFile();
|
||||||
|
} else if (fileOrRandom == 1) {
|
||||||
|
return getRandomPoints();
|
||||||
|
} else {
|
||||||
|
printf("Wrong enter!\n");
|
||||||
|
return (points){NULL, 0};
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
points getPointsFromFile(void) {
|
||||||
|
FILE * file = getFile();
|
||||||
|
points pts = (points){NULL, 0};
|
||||||
|
|
||||||
|
if (file == NULL) return (points){NULL, 0};
|
||||||
|
pts = getFilePoints(file);
|
||||||
|
|
||||||
|
fclose(file);
|
||||||
|
return pts;
|
||||||
|
}
|
||||||
|
|
||||||
FILE * getFile(void) {
|
FILE * getFile(void) {
|
||||||
char filename[50];
|
char filename[50];
|
||||||
|
|
||||||
|
@ -18,7 +49,7 @@ FILE * getFile(void) {
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
points * getFilePoints(FILE * file) {
|
points getFilePoints(FILE * file) {
|
||||||
int i, size = 2;
|
int i, size = 2;
|
||||||
point * array = NULL;
|
point * array = NULL;
|
||||||
point p;
|
point p;
|
||||||
|
@ -26,7 +57,7 @@ points * getFilePoints(FILE * file) {
|
||||||
|
|
||||||
if (fscanf(file, "%lf", ¤t) != 1) {
|
if (fscanf(file, "%lf", ¤t) != 1) {
|
||||||
printf("File is empty!\n");
|
printf("File is empty!\n");
|
||||||
return NULL;
|
return (points){NULL, 0};
|
||||||
}
|
}
|
||||||
|
|
||||||
array = (point *)malloc(size * sizeof(point));
|
array = (point *)malloc(size * sizeof(point));
|
||||||
|
@ -36,7 +67,7 @@ points * getFilePoints(FILE * file) {
|
||||||
if (++i / 2 >= size) {
|
if (++i / 2 >= size) {
|
||||||
size *= 2;
|
size *= 2;
|
||||||
array = (point *)realloc(array, size * sizeof(point));
|
array = (point *)realloc(array, size * sizeof(point));
|
||||||
if (array == NULL) return NULL;
|
if (array == NULL) return (points){NULL, 0};
|
||||||
}
|
}
|
||||||
|
|
||||||
if (i % 2 == 1) {
|
if (i % 2 == 1) {
|
||||||
|
@ -48,72 +79,40 @@ points * getFilePoints(FILE * file) {
|
||||||
if (i == 0) {
|
if (i == 0) {
|
||||||
printf("Array is empty!\n");
|
printf("Array is empty!\n");
|
||||||
free(array);
|
free(array);
|
||||||
return NULL
|
return (points){NULL, 0};
|
||||||
}
|
}
|
||||||
|
|
||||||
return &(points){array, (i + 1) / 2};
|
return (points){array, (i + 1) / 2};
|
||||||
}
|
}
|
||||||
|
|
||||||
points * GetPointsFromFile(void) {
|
points getRandomPoints(void) {
|
||||||
FILE * file = getFile();
|
points pts = (points){.array=NULL, .length=0};
|
||||||
points * pts = NULL;
|
|
||||||
|
|
||||||
if (file == NULL) return NULL;
|
|
||||||
getFilePoints(file)
|
|
||||||
|
|
||||||
fclose(file);
|
|
||||||
return pts;
|
|
||||||
}
|
|
||||||
|
|
||||||
points * getRandomPoints(void) {
|
|
||||||
points * pts = &(points){.array=NULL, .length=0};
|
|
||||||
int length;
|
int length;
|
||||||
|
|
||||||
printf("Enter the number of points: ");
|
printf("Enter the number of points: ");
|
||||||
if (scanf("%d", &length) < 1) return NULL;
|
if (scanf("%d", &length) < 1) return pts;
|
||||||
pts->length = length;
|
pts.length = length;
|
||||||
|
|
||||||
pts->array = (point *)malloc(length * sizeof(point));
|
pts.array = (point *)malloc(length * sizeof(point));
|
||||||
if (pts->array == NULL) return NULL;
|
if (pts.array == NULL) return pts;
|
||||||
|
|
||||||
generate(pts);
|
generatePoints(&pts);
|
||||||
|
|
||||||
return pts
|
return pts;
|
||||||
}
|
}
|
||||||
|
|
||||||
points * getPoints(void) {
|
void generatePoints(points * pts) {
|
||||||
int fileOrRandom;
|
srand(time(NULL));
|
||||||
|
|
||||||
printf("0 - if points from file\n1 - if random generation of points\nYour choice: ");
|
for (int i = 0; i < pts->length; i++) {
|
||||||
|
(pts->array[i]).x = (rand() % (2*MAX_RAND_COORD + 1) - MAX_RAND_COORD) * RAND_MULTIPLIER;
|
||||||
if (scanf("%d", &fileOrRandom) < 1) {
|
(pts->array[i]).y = (rand() % (2*MAX_RAND_COORD + 1) - MAX_RAND_COORD) * RAND_MULTIPLIER;
|
||||||
printf("Wrong enter!\n");
|
|
||||||
return NULL;
|
|
||||||
}
|
|
||||||
|
|
||||||
if (fileOrRandom == 0) {
|
|
||||||
return getPointsFromFile();
|
|
||||||
} else (fileOrRandom == 1) {
|
|
||||||
return getRandomPoints();
|
|
||||||
} else {
|
|
||||||
printf("Wrong enter!\n");
|
|
||||||
return NULL;
|
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
void printPoints(points pts) {
|
void printPoints(points pts) {
|
||||||
for (int i = 0; i < ((MAX_PRINT_POINTS < pts.length) ? MAX_PRINT_POINTS : pts.length); ++i) {
|
for (int i = 0; i < ((MAX_PRINT_POINTS < pts.length) ? MAX_PRINT_POINTS : pts.length); ++i) {
|
||||||
printf("%c = (%.4lf, %.4lf)\n", i + ASCII_FIRST_LETTER, pts.array[i].x, pts.array[i].y);
|
printf("%c = (%.4lf, %.4lf)\n", i + ASCII_FIRST_LETTER, pts.array[i].x, pts.array[i].y);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
void generate(points * pts)
|
|
||||||
{
|
|
||||||
srand(time(NULL));
|
|
||||||
|
|
||||||
for (int i = 0; pts->length; i++)
|
|
||||||
{
|
|
||||||
(pts->array[i]).x = (rand() % (2*MAX_RAND_COORD + 1) - MAX_RAND_COORD) * RAND_MULTIPLIER;
|
|
||||||
(pts->array[i]).y = (rand() % (2*MAX_RAND_COORD + 1) - MAX_RAND_COORD) * RAND_MULTIPLIER;
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
|
@ -3,6 +3,7 @@
|
||||||
|
|
||||||
#include <stdio.h>
|
#include <stdio.h>
|
||||||
#include <stdlib.h>
|
#include <stdlib.h>
|
||||||
|
#include <time.h>
|
||||||
#include "types.h"
|
#include "types.h"
|
||||||
|
|
||||||
#define ASCII_FIRST_LETTER 65
|
#define ASCII_FIRST_LETTER 65
|
||||||
|
@ -10,12 +11,12 @@
|
||||||
#define MAX_RAND_COORD 10000
|
#define MAX_RAND_COORD 10000
|
||||||
#define RAND_MULTIPLIER 1.e-2
|
#define RAND_MULTIPLIER 1.e-2
|
||||||
|
|
||||||
|
points getPoints(void);
|
||||||
|
points getPointsFromFile(void);
|
||||||
FILE * getFile(void);
|
FILE * getFile(void);
|
||||||
points * getFilePoints(FILE * file)
|
points getFilePoints(FILE * file);
|
||||||
points * GetPointsFromFile(void);
|
points getRandomPoints(void);
|
||||||
points * getRandomPoints(void);
|
void generatePoints(points * pts);
|
||||||
points * getPoints(void);
|
|
||||||
void printPoints(points pts);
|
void printPoints(points pts);
|
||||||
void generate(points * pts);
|
|
||||||
|
|
||||||
#endif
|
#endif
|
||||||
|
|
Loading…
Add table
Add a link
Reference in a new issue