Проведите линию между двумя точками на консоли
Как я могу нарисовать линию на консоли, если у меня есть двумерный массив символов. Функция, которую я хочу написать, выглядит примерно так:
Это моя первая попытка, но выглядит она совершенно неправильно
public static void line(char[][] mPixels, int startRow, int startColumn, int endRow, int endColumn)
{
double dY = endRow - startRow;
double dX = endColumn - startColumn;
double slope = dX / dY;
slope = Math.abs(slope);
if(slope >= 1)
{
double progress = -(dY / dX);
for(int i=startColumn; i<=endColumn; i++)
{
double j = startRow - (int) ((i-startColumn) * progress);
int yLoc = (int) (Math.round( j * 100.0 ) / 100.0);
mPixels[i][yLoc] = '*';
}
}
// print array
}
1 ответ
Используйте DDA или Bresenham,...
То, что у вас есть, выглядит как DDA, но вы неправильно обрабатываете уклоны. Вы должны разделить на ось большее количество пикселей и использовать его как ось управления так:
если |dx|>|dy|
затем for
проходит через x = x0 -> x1
а также y=y0+((x-x0)*dy/dx)
если |dx|<|dy|
затем for
проходит через y = y0 -> y1
а также x=x0+((y-y0)*dx/dy)
если они равны, используйте любой из вышеперечисленных.
если dx==0
а также dy==0
нарисовать только точку и нет for
настоящее
Не забудьте обработать, если главная ось поднимается или опускается (может быть x++,y++
или же x--,y--
) также можно сделать на целых числах только без деления или умножения, но это уже другая история