В настоящее время я делаю заголовок для создания простой графики в консоли С++. 2 дня назад я добавил функцию для рисования линий с использованием алгоритма растеризации, используемого здесь.
Но у меня есть проблема: поскольку декартова плоскость консоли работает только с целыми числами, моя функция ничего не рисует, когда числа, заданные при приближении, равны 0, поэтому я блуждал, если бы вы могли сделать что-то вроде этого:
if ( y == 0 )
{
//fix using some kind of 'forecast' of what y could be
}
так вот мой код:
void Engine::line(int ax, int ay, int bx, int by, int color)
{
int i = 0;
if(ax < bx)
i = 1;
if(ax > bx)
i = -1;
int dx = bx - ax;
int dy = by - ay;
for (int x = ax; x != bx; x+=i)
{
int y = ay + (by - ay) * (x - ax)/(bx - ax);
HANDLE hConsole = GetStdHandle(STD_OUTPUT_HANDLE);
SetConsoleTextAttribute(hConsole, color);
Engine::gotoxy(x,y); printf("%c", 219);
}
}
И вот мой вывод, где, если линия сильно наклонена, она не отображается должным образом: image
Я действительно надеюсь, что вы можете мне помочь, но если нет, можете ли вы дать мне лучший алгоритм, который все еще прост, но отлично работает с целыми числами? (не тот, что у Брезенхэма)
std::swap(ax,by)
, еслиax > bx
- person Martin Bonner supports Monica   schedule 24.01.2019