На счёт рисовки вдоль кривой, была в универе недавно похожая задача, только там нужно было нарисовать график функции на промежутке.
Вот можешь глянуть код:
define SCREENW 119
#define SCREENH 30
void DrawFunction(FILE* fout, double a, double b, double (*f)
(double))
{
char screen[SCREENW][SCREENH];
double x, y[SCREENW];
double ymin = 0, ymax = 0;
double hx, hy;
int i, j;
int xz, yz;
hx = (b - a) / (SCREENW - 1);
for (i = 0, x = a; i < SCREENW; ++i, x += hx) {
y[i] = f(x);
if (y[i] < ymin) ymin = y[i];
if (y[i] > ymax) ymax = y[i];
}
hy = (ymax - ymin) / (SCREENH - 1);
yz = (int)floor(ymax / hy + 0.5);
xz = (int)floor(-a / hx + 0.5);
for (j = 0; j < SCREENH; ++j) {
for (i = 0; i < SCREENW; ++i) {
if (j == yz && i == xz)
screen[i][j] = '+';
else if (j == yz)
screen[i][j] = '-';
else if (i == xz)
screen[i][j] = '|';
else
screen[i][j] = ' ';
}
}
for (i = 0; i < SCREENW; ++i) {
j = (int)floor((ymax - y[i]) / hy + 0.5);
screen[i][j] = '.';
}
for (j = 0; j < SCREENH; ++j) {
for (i = 0; i < SCREENW; ++i)
fputc(screen[i][j], fout);
fprintf(fout, "\n");
}
}
double FirstFunct(double x)
{
return pow(log10(sin(4 * x) + 1), 2);
}
void A1() {
//Промежуток тут от 0 до 2
//Уравнение функции записано в FirstFunct
DrawFunction(stdout, 0, 2.0, FirstFunct);
}
Вот вывод в консоли и в гугл таблицах соответственно:
Однако учти, что символ в консоли имеет четкую ЦЕЛОЧИСЛЕННУЮ позицию (
COORD)
Получается делаем вывод, что символ не может находиться где-то посередине