Напишем алгоритм для вывода графика функции или системы уравнений в консоль в виде текста. Будем
использовать средства Java. Для вычислений будем использовать класс Math
, а для обхода диапазона
координат — два вложенных цикла for
. Нарисуем в консоли график окружности и графики вписанных
в неё ромба и квадрата.
График функции с заполнением: Рисуем сердечко в консоли.
Каждую точку (x,y)
из выводимого диапазона координат будем проверять на принадлежность графикам
функций и в соответствии с этим выводить. Параметры функций и выводимый диапазон определим заранее
перед началом обхода.
Ромб.
Квадрат.
Окружность.
Параметры.
r
— радиус окружности;
(a,b)
— центр фигуры;
c
— половина стороны квадрата.
Для выполнения базовых математических операций в Java используется библиотека FdLibm
—
Свободно распространяемая математическая библиотека. Большинство методов реализовано на уровне
платформы для увеличения производительности. Обращаться к ним будем через класс Math
.
Для вычислений с плавающей точкой и округлений результатов будем использовать методы класса Math
.
abs(a)
— абсолютное значение аргумента a
;
pow(a,b)
— возведение аргумента a
в степень b
;
sqrt(a)
— квадратный корень из аргумента a
;
ceil(a)
— округление аргумента a
в бо́льшую сторону;
floor(a)
— округление аргумента a
в ме́ньшую сторону.
Берём диапазон координат на плоскости таким образом, чтобы выводимая фигура полностью помещалась
в печатаемой области. Обходим выбранный диапазон двумя вложенными циклами for
: сначала по оси
y
и затем по оси x
. Каждую точку проверяем на принадлежность графикам функций и выводим. Для
наглядности также выводим координатные оси, начало координат и центр фигуры.
// радиус, центр фигуры, отступ
int r=12, a=5, b=-1, gap=2;
// границы текстового изображения
int xMin=a-r-gap, xMax=a+r+gap;
int yMin=b-r-gap, yMax=b+r+gap;
// половина стороны вписанного квадрата
double c = Math.ceil(r/Math.sqrt(2));
// выводим заголовок
System.out.println("Радиус: "+r+"; центр: 0("+a+","+b+").");
// вывод в консоль построчно слева направо сверху вниз
for (int y = yMax; y >= yMin; y--) {
for (int x = xMin; x <= xMax; x++) {
// каждую точку проверяем на принадлежность графикам и выводим
if (Math.abs(x-a) + Math.abs(y-b) == r)
System.out.print("z "); // ромб
else if (Math.abs(x-a) == c && Math.abs(y-b) <= c
|| Math.abs(y-b) == c && Math.abs(x-a) <= c)
System.out.print("* "); // квадрат
else if (Math.floor(Math.sqrt(Math.pow(x-a,2)+Math.pow(y-b,2))) == r)
System.out.print("o "); // окружность
else if (y == b && x == a)
System.out.print("0 "); // центр фигуры
else if (y == 0 && x == 0)
System.out.print("+-"); // центр координат
else if (y == 0) // ось абсцисс (x)
System.out.print(x == xMax ? ">x" : "--");
else if (x == 0) // ось ординат (y)
System.out.print(y == yMax ? "↑y" : "¦ ");
else // пустое место
System.out.print(" ");
} // переход на новую строку
System.out.println();
}
Текстовое изображение в консоли.
Радиус: 12; центр: 0(5,-1).
↑y
¦
¦ o o o o z o o o o
o o z z o o
o o ¦ z z o o
* * * * * * z * * * * * z * * * * * *
o * ¦ z z * o
o * z z * o
o * z ¦ z * o
o * z ¦ z * o
o * z ¦ z * o
o z ¦ z o
o z * ¦ * z o
----o z --* ------+---------------------------* --z o -->x
z * ¦ 0 * z
o z * ¦ * z o
o z * ¦ * z o
o z ¦ z o
o * z ¦ z * o
o * z ¦ z * o
o * z ¦ z * o
o * z z * o
o * ¦ z z * o
* * * * * * z * * * * * z * * * * * *
o o ¦ z z o o
o o z z o o
¦ o o o o z o o o o
¦
¦
© Головин Г.Г., Код с комментариями, 2023