Построить многоугольник по координатам, считанным из файла - C (СИ)
Формулировка задачи:
Пользователь вводит в файл 4 пары координат,из этого файла программа считывает из файла данные и строит многоугольник.Помогите это реализовать. Заранее спасибо.
Решение задачи: «Построить многоугольник по координатам, считанным из файла»
textual
Листинг программы
#include <stdio.h>
#define FSIZE 64
#define MAX_DOTS 4
#define DOT_LINE '#'
#ifndef min
#define min(a, b) (((a) < (b)) ? (a) : (b))
#endif
#ifndef max
#define max(a, b) (((a) > (b)) ? (a) : (b))
#endif
typedef struct point {
int x, y;
} point_t;
//рисование линии (c)"Алгоритм Брезенхэма"
void draw_line(char field[][FSIZE],
const point_t* p1, const point_t* p2){
int err, err2, dx, dy, sx, sy;
int x1 = p1->x;
int y1 = p1->y;
int x2 = p2->x;
int y2 = p2->y;
x1 = min(FSIZE - 1, max(x1, 0));
y1 = min(FSIZE - 1, max(y1, 0));
dx = x2 - x1;
dy = y2 - y1;
sx = (x2 > x1) ? 1 : -1;
sy = (y2 > y1) ? 1 : -1;
if(dx < 0)
dx = 0 - dx;
if(dy < 0)
dy = 0 - dy;
err = dx - dy;
while((x1 != x2) || (y1 != y2)){
field[y1][x1] = DOT_LINE;
err2 = err * 2;
if(err2 > -dy) {
err -= dy;
x1 += sx;
}
if(err2 < dx) {
err += dx;
y1 += sy;
}
}
}
//рисование многоугольника
void draw_polygon(char field[][FSIZE],
const point_t* arr, int N){
int i;
N -= 1;
for(i = 0; i < N; ++i)
draw_line(field, &arr[i], &arr[i + 1]);
draw_line(field, &arr[N], &arr[0]);
}
int main(void){
int i, j;
char field[FSIZE][FSIZE] = {{0}};
point_t dots[MAX_DOTS] = {
{0, FSIZE/2},
{FSIZE/2, 0},
{FSIZE-1, FSIZE/2},
{FSIZE/2, FSIZE-1}
};
/* ввод 4-точки(x,y)
puts("Enter point 4");
for(i = 0; i < MAX_DOTS; ++i){
printf("x y: ");
if(scanf("%d %d", &dots[i].x, &dots[i].y) != 2){
rewind(stdin);
--i;
}
putchar('\n');
}
fflush(stdin);
*/
//нарисуем многоульник
draw_polygon(field, dots, MAX_DOTS);
//вывести символьное поле
for(i = 0; i < FSIZE; ++i){
for(j = 0; j < FSIZE; ++j)
putchar((! field[i][j]) ? ' ' : field[i][j]);
putchar('\n');
}
return 0;
}