Построить многоугольник по координатам, считанным из файла - 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;
}

ИИ поможет Вам:


  • решить любую задачу по программированию
  • объяснить код
  • расставить комментарии в коде
  • и т.д
Попробуйте бесплатно

Оцени полезность:

14   голосов , оценка 4 из 5
Похожие ответы