Мы можем визуализировать график на двумерном массиве и очистить массив в конце экрана. Вот простейшая реализация графика, построенного в терминале. Это предполагает, что 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