Построить многоугольник по координатам, считанным из файла - 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; }
ИИ поможет Вам:
- решить любую задачу по программированию
- объяснить код
- расставить комментарии в коде
- и т.д