C++ для начинающих Рисование правильного многоугольника

Рисование правильного многоугольника, как и рисование звезды, может вызвать определенные затруднения у любого начинающего. Странно, ведь это распространенная учебная задача, а найти практический пример решения достаточно проблематично.
Помню, когда я искал способы рисования звезды, в одном месте было написано: «сначала нужно нарисовать многоугольник» и бла бла бла бла. Для меня такая ситуация была тупиковой, поскольку я понятия не имел, как это делать. Но после того как я отыскал способ рисования этой злополучной звезды, почти сразу решил нарисовать правильный многоугольник, ориентируясь на найденное.

  • Сам по себе подход к рисованию многоугольника по алгоритму рисования звезды неверен

Его неправильность заключается в том, что необходимы лишние вычисления. Этот пример плох, но подходит для выхода из затруднительного положения. Очевидно: чтобы решить какую-либо задачу, достаточно включить немного соображалки.

В общем, будет создан правильный многоугольник, а в коде основой этого рисования станет алгоритм построения правильной звезды.

  

В общем, здесь код строит правильный многоугольник из алгоритма построения правильной звезды

Код С++ рисование правильного n-угольника

Сама суть построения этого правильного n-угольника находится в построении звезды. Наиболее внимательный читатель скорее всего увидит последствия моего плохого понимания темы. Конечно, здесь идет расчёт лишних точек, которые рассчитываются для вершин звезды и, по идее, совсем не нужны. С учётом того, что я не обладаю хорошими математическими знаниями, и, принимая во внимание то, от чего я отталкивался, всё объясняется легко: так для меня оказалось проще.

Наверное, кто-то может искренне возрадоваться: вот то, что нужно. Но нужное здесь будет показано только сейчас.
Код C++ Построение правильного многоугольника.

Время пояснений.
В окружности 360 градусов.
В правильном многоугольнике все углы равны, значит деление этих 360-ти градусов на n углов n-угольника даст внутренний угол многоугольника. Там, где мы запоминаем каждую координату, использована формула окружности.

Если говорить условно, но понятно, то можно сказать так: «Точка (x, y) движется по окружности, делая остановки. Вот эти места остановок запоминаются в массив. После прохождения всего маршрута цикл завершается». После завершения цикла можно соединять все найденные места поочередно.

Эти соединения можно выполнять сразу внутри первого цикла, но рекомендуется запоминать в массив и уже потом массив использовать (это чтоб расчеты не замедляли прорисовку).

  В формуле, где мы запоминаем координаты, нужно переводить меру из радианов в градусы.
Для этого (Угол * (ПИ/180)).
Эту формулу легко найти в интернете.

  Еще можно вот что сказать. Сначала у меня не получалось строить многоугольники например при n=200. Но изменив тип данных у всех переменных даже тысячеугольник получился/ А если поменять мои double на float — шеститысячеугольник!!
В структуре сделать int + остальное float — Десятитысячеугольник
(это я не разбираюсь просто)

Все комментарии на сайте проверяются, поэтому ваш комментарий может появиться не сразу. Для вставки кода в комментарий используйте теги: [php]ВАШ_КОД[/php]

9 комментариев: C++ для начинающих Рисование правильного многоугольника

  • Дмитрий говорит:

    Подскажите,как правильно подключать graphics.h?или какой компилятор его знает?Неужто нужно или использовать борлданд 3.0 или прийдётся ради простой функции как построение линии использовать ОпенГЛ?




    0



    0
  • das говорит:

    graphics.h это для Борландовских компиляторов, следовательно знать его должны те что Borland C++. При этом, его можно подключить в Dev C++ http://kpolyakov.narod.ru/school/c/faq.htmВ Visual C++ при программировании под Windows, средств прямого доступа к аппаратуре нет. Все взаимодействие с ней производится через функции API либо с помощью специальных библиотек таких как DirectX или OpenGlВ понятие С++ понятие графики не входит и все рисование обеспечивается либо средствами Операционной системы (например как Visual Studio c Win Api) либо с помощью специальных графических библиотек (например как использование graphics.h в Borland C++)Приблизительно так все выглядит




    0



    0
  • Дмитрий говорит:

    А не подскажете тогда как его заставить работать в Borland C++ 5 или 6?Ибо он там не установлен сначала,я его качаю в папку C:Program FilesBorlandCBuilder6Includeзатем он просит jview.h ,затем InterfaceKit.h , а потом и все хедеры из InterfaceKit.h.




    0



    0
  • das говорит:

    Для того чтоб я смог ответить мне нужно скачать один этих компиляторов. Интернет у меня МТС, значит скачивание займет некоторое время (много людей знает, что такое такой интернет) вы можете мне помочь если выложите ненадолго на каком-нибудь Яндекс Диске образ диска или установщик. Если выложите, то ссылку дайте по почте daslex@yandex.ru Так я быстрее скачаю чем с торрентов Если вы в такой же ситуации как я, то выложить вы не сможете, ибо долго. Вы готовы немного подождать? (дня 2 или 3) При этом при всем я не могу дать гарантий, что у меня все получится, но попробовать мне ничто не мешает




    0



    0
  • Дмитрий говорит:

    Я в такой же ситуации ) интернет у меня от МТС ЮА. я готов подождать и был бы очень благодарен за помощь,так как задача стоит какраз в построение обходя опенГЛ и ему подобные библиотеки.




    0



    0
  • das говорит:

    Думаю вам не нужен graphics.hРисовать можно по формеForm1->Canvas->LineTo(100,100); //Это код, например при клике по кнопкеЭто обычная линия без использования всяких OpenGl,DirectX, WinApi и всего подобногоНу или разместить на форме Image (вкладка Additional) и Image1->Canvas->LineTo(100,100);никаких библиотек можно не подключатьFile ->New Application и дерзайтеНадеюсь в остальном всё быстро сообразите и надеюсь это то что вам нужно




    0



    0
  • Дмитрий говорит:

    Спасибо, то что нужно)




    0



    0
  • 3 говорит:

    +1




    0



    0
  • Андр говорит:

    Это просто шикарно! Спасибо!




    0



    0

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

Ваш e-mail не будет опубликован.

Поиск

 
     

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

https://www.litres.ru/denis-kolisnichenko/php-5-6-i-mysql-6-razrabotka-web-prilozheniy/?lfrom=15589587
Яндекс.Метрика
НАГРАДИ АВТОРА САЙТА
WEBMONEY
R375024497470
U251140483387
Z301246203264
E149319127674

Демотиватор вероисповедание программист

Выражаю свою признательность

  • Максиму очень признателен за указание на мои ошибки и неточности.
  • Sergio ===> за оказание помощи в исправлении моих ошибок
  • Gen ===> за правильное стремление помочь другим новичкам и выявления моих ошибок