Построение простых точек - PullRequest
1 голос
/ 05 октября 2019

Я пришел сюда, чтобы узнать, как построить простые точки в C с помощью этого простого кода. Я только хочу построить метод plot_points. Хотя я и не взял полный код, он хочет получить

  1. Получение числа n
  2. Случайное фиксирование n точек
  3. Печать точек в терминале(выглядит как график)

и я пропустил третий шаг после долгого дня поиска ..

Спасибо за чтение

typedef struct
{
    int x;
    int y;
} point;

srand( time(NULL));
for (int j = 0; j < n; j++)
{
    x = rand() % RANGE + 1;
    y = rand() % RANGE + 1;

    p[j].x = x;
    p[j].y = y;
}

void print_points( point *p, int n)
{
}

1 Ответ

0 голосов
/ 05 октября 2019

Мы можем визуализировать график на двумерном массиве и очистить массив в конце экрана. Вот простейшая реализация графика, построенного в терминале. Это предполагает, что point.x и point.y находятся между 0 и MAXWIDTH и MAXHEIGHT. Мы можем распространить эту идею на огромные точки, масштабируя их до нашей ограниченной плоскости, но есть компромисс между точностью.

РЕДАКТИРОВАТЬ: Я также добавил масштабный код.

#include <stdio.h>

#define MAXWIDTH    30
#define MAXHEIGHT   30

#define MAXX        100
#define MAXY        100

#define NPTS 3

int main() {
    /* our limited plane */
    char G[MAXHEIGHT][MAXWIDTH];

    /* points to be plotted */
    int pts[NPTS][2] = {
        {20,90},
        {94,39},
        {15, 5}
    };

    /* clean up the plane */
    for(int i=0; i<MAXHEIGHT; i++)
        for(int j=0; j<MAXWIDTH; j++)
            G[i][j]=' ';

    /* find out the scaling factor */
    double scalex=(double)MAXWIDTH/MAXX;
    double scaley=(double)MAXHEIGHT/MAXY;

    /* render the points on plane here, scaling must be applied here */
    for(int i=0; i<NPTS; i++) {
        G[(int)(pts[i][1] * scaley)][(int)(pts[i][0] * scalex)] = '*';
    }

    /* render to screen */
    for(int i=0; i<MAXHEIGHT; i++) {
        printf("\n   +");
        for(int j=0; j<MAXWIDTH; j++) {
            putchar(G[i][j]);
        }
    }

    /* print the bottom line */
    printf("\n     ");
    for(int i=0; i<MAXWIDTH; i++)
        putchar('|');
    putchar('\n');
}

Вывод (вы можете добавить больше косметики, если хотите):

   +                              
   +    *                         
   +                              
   +                              
   +                              
   +                              
   +                              
   +                              
   +                              
   +                              
   +                              
   +                            * 
   +                              
   +                              
   +                              
   +                              
   +                              
   +                              
   +                              
   +                              
   +                              
   +                              
   +                              
   +                              
   +                              
   +                              
   +                              
   +      *                       
   +                              
   +                              
     ||||||||||||||||||||||||||||||

Если вы хотите, вы можете генерировать графики в HTML, записав SVG в файл. У меня есть небольшая реализация здесь https://github.com/mmpataki/mchartjs/tree/master/cport

...