graphics.h Рисование правильной звезды

Задача нарисовать звезду довольно интересная. Но для многих людей, плохо знакомых с геометрией, увы, нерешаемая. Тем не менее, многое непонятное можно делать понятным, узнавая от кого-то что-нибудь по теме.
Код из этой публикации появился благодаря форумчанину Puporev, выложевшему код в одной из тем. Я очень благодерен тому человеку. Правда, код был выложен на Turbo Pascal, а я выкладываю здесь его переоформленный для C++.
Сама по себе звезда в частом понимании имеет 5 вершин, хотя звезды могут иметь разное их количество. Работа с компьютерной графикой часто требует некоторых тригонометрических знаний. Вот в построение звезды тригонометрические сведения как раз будут использованы.

Что можно сказать по коду& Сам по себе он не совсем маленький, поэтому я намеренно пропустил проверку на ошибки при работе с графикой (чтобы в глаза читателю бросался основной код, а не проверка на ошибки; проверку же на ошибкт делать нужно). Кроме того, я решил, что наиболее удобочитаемо будет как раз сделать так, чтобы ввод данных был вынесен в отдельную функцию, из которой бы уже вызывалась функция построения звезды. Во всем этом коде можно заметить буковку а. Сама по себе эта буква большого значения не имеет и обозначает угол наклона звезды. В принципе, эту букву можно вынести в ввод данных и оттуда требовать ввести угол наклона, по аналогии с требованием вводить радиус.
Принцип вычисления точек для построения состоит в том, что сначала выполняется расчёт координат каждой вершины звезды, получаемые данные записываются в массив. После заполнения массива координатами всё, что остаётся, это поочерёдно соединить координаты линиями. Я поместил центр звезды в центр экрана, но смещать её, конечно, можно в любое место. Слабенький новичок может спросить, зачем здесь динамический массив? Дело в том, что это код для построения звезды с заранее неизвестным числом вершин, поэтому мы не знаем, какая у массива должна быть ёмкость, чтобы хватило на все вычисляемые точки.
Помня, что ни к чему хорошему меня поиски решения этой задачи в основном не приводили, думаю, что эта публикация принесёт много пользы разным людям.
a * M_PI/180 — это перевод a радианов в градусы.

Добавить комментарий

Ваш адрес email не будет опубликован. Обязательные поля помечены *

Поиск

 
     

Случайная книга в электронном формате

https://www.litres.ru/aleksey-goloschapov/google-android-programmirovanie-dlya-mobilnyh-ustroystv-2/?lfrom=15589587
Яндекс.Метрика