Это на самом деле совсем не тривиальная проблема!
Видите ли, диагонали (когда мы представляем, что они являются линиями той же ширины, что и окружные линии) не очень хорошо соответствуют целочисленным координатам.Поэтому, если вы используете '*'
символов, у вас будет слишком много - по несколько на одну строку - или слишком мало, с разрывами в строке.
Возможно, вы захотите использовать алгоритм рисования линий Брезенхэмом для этой задачи.
Или - если вы хотите быть упрощенным и поместить один '*'
на строку, используйте формулу для диагонали с округлением, чтобы выбрать наилучшее значение независимо от других линий:
major_diagonal_y = (x - start_x) * ((float) rectangle_y_dim) / rectangle_x_dim
(при условии, что x является вертикальным измерением, а y является горизонтальным; выиспользовали другие символы, но я нашел их немного запутанными.)
Для противоположной (младшей) диагонали используйте
minor_diagonal_y = rectangle_y_dim - major_diagonal_y
Если вы хотите использовать других персонажей, вы можете обратиться к этому руководству по ASCII art с разделом по диагонали.Он демонстрирует, как варьировать использование символов для эффективного разрешения «подсимволов».Цитирую их пример:
/ .' _,-' __
/ .' _,-' __..--''
/ .' _,-' __..''
/ .' _,-' __..--''
/ .' _,-' __..--''
/ .' _,-' __..--'' ____....----"""
/ .' _,-' __..--'' ____....----""""
/ .' ,-' __..--'' ____....----""""