1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 |
//C++ 3.1 Листинг #1 MS-DOS Рисование правильного n-угольника #include <iostream.h> #include <conio.h> #include <graphics.h> #include <math.h> /*Сруктура для удобства работы с точкам*/ struct Point{ double x, y; }; int main(){ clrscr(); unsigned N = 6; //количество вершин unsigned radius = 40; //радиус описаннной вокруг многоугольника окружности double angle = 0; //угол для определения точки на окружности Point *arr_points = new Point[N+1]; //массив будущих вершин многоугольника /*Вычисляем координаты вершин многоугольника*/ for (int i=0; i<N+1; i++){ arr_points[i].x = radius * cos(angle * M_PI/180); arr_points[i].y = radius * sin(angle * M_PI/180); angle = angle + 360.0/N; //ВАЖНО! число 360 должно быть не целым } /*Запускаем графический режим*/ int gr = DETECT, gm; initgraph(&gr,&gm,""); moveto(arr_points[0].x + getmaxx()/2, arr_points[0].y + getmaxy()/2); //устанавливаем курсор на точку начала рисования /*обходим массив с точками*/ for (i=0; i<N+1; i++){ lineto(arr_points[i].x + getmaxx()/2, arr_points[i].y + getmaxy()/2); //Соединяем линии. Выводим это со смещением в центр экрана } cin.get(); delete []arr_points; closegraph(); return 0; } |
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 |
//C++ 3.1 Листинг #2 MS-DOS Рисование правильного многоугольника #include <iostream.h> #include <conio.h> #include <graphics.h> #include <math.h> #include <stdlib.h> struct Point{ double x, y; }; int main(){ clrscr(); unsigned N = 5; unsigned radius = 100; double angle = 0; if (N < 3){ cout << "mission inpossible, N must be greater 2\n"; cin.get(); } else{ Point *arr_points = new Point[N+1]; for (int i=0; i<=N; i++){ arr_points[i].x = radius * cos(angle * M_PI/180); arr_points[i].y = radius * sin(angle * M_PI/180); angle = angle + 360./N; } int gr = DETECT, gm; initgraph(&gr,&gm,""); int err = graphresult(); //graphresult() возвращает признак успешного запуска графического режима if (err != grOk){ //если произошла ошибка, запускаем этот блок cout << "ERROR" << grapherrormsg(err); //сообщаем об ошибке и выводим данные о ней на экран cout << "Press any key to halt"; cin.get(); exit(1); //выполняем экстренный выход из программы } else{ moveto(arr_points[0].x + getmaxx()/2, arr_points[0].y + getmaxy()/2); for (i=0; i<=N; i++){ lineto(arr_points[i].x + getmaxx()/2, arr_points[i].y+getmaxy()/2); } } cin.get(); closegraph(); cin.get(); } return 0; } |
Подскажите,как правильно подключать graphics.h?или какой компилятор его знает?Неужто нужно или использовать борлданд 3.0 или прийдётся ради простой функции как построение линии использовать ОпенГЛ?
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++)Приблизительно так все выглядит
А не подскажете тогда как его заставить работать в Borland C++ 5 или 6?Ибо он там не установлен сначала,я его качаю в папку C:Program FilesBorlandCBuilder6Includeзатем он просит jview.h ,затем InterfaceKit.h , а потом и все хедеры из InterfaceKit.h.
Для того чтоб я смог ответить мне нужно скачать один этих компиляторов. Интернет у меня МТС, значит скачивание займет некоторое время (много людей знает, что такое такой интернет) вы можете мне помочь если выложите ненадолго на каком-нибудь Яндекс Диске образ диска или установщик. Если выложите, то ссылку дайте по почте daslex@yandex.ru Так я быстрее скачаю чем с торрентов Если вы в такой же ситуации как я, то выложить вы не сможете, ибо долго. Вы готовы немного подождать? (дня 2 или 3) При этом при всем я не могу дать гарантий, что у меня все получится, но попробовать мне ничто не мешает
Я в такой же ситуации ) интернет у меня от МТС ЮА. я готов подождать и был бы очень благодарен за помощь,так как задача стоит какраз в построение обходя опенГЛ и ему подобные библиотеки.
Думаю вам не нужен graphics.hРисовать можно по формеForm1->Canvas->LineTo(100,100); //Это код, например при клике по кнопкеЭто обычная линия без использования всяких OpenGl,DirectX, WinApi и всего подобногоНу или разместить на форме Image (вкладка Additional) и Image1->Canvas->LineTo(100,100);никаких библиотек можно не подключатьFile ->New Application и дерзайтеНадеюсь в остальном всё быстро сообразите и надеюсь это то что вам нужно
Спасибо, то что нужно)
+1
Это просто шикарно! Спасибо!
Админ, я б тебе руки поотрывал за чёрный фон.
Это не читабельно.
код забрал, попробую перевести на нужный мне язык
Не знаю, чем Вам фон не угодил:
Код перегнал на PureBasic, всё заработало, но сегодня вылез интересный глюк, на некоторых нечётных многоугольниках не замыкается контур, 7 и 11, есть и другие с большим количеством углов. Вылезло при попытках «заливать».
Спасибо за код.
P.S.
(это чтоб расчеты не замедляли прорисовку).
с этой фразы оборжался, может таки наоборот?
—-
не для печати
о своих глазах не думаешь, так о чужих подумай
Есть разница между цепочкой
а) посчитать отрезок-нарисовать отрезок-посчитать отрезок-нарисовать отрезок-посчитать отрезок-нарисовать отрезок-посчитать отрезок-нарисовать отрезок
и цепочкой
б) сначала провести расчёт каждой точки всех отрезков и нарисовать все отрезки по известным координатам.
Эта фраза относится именно к этому, как бы ни было смешно, второй вариант лучше.
Лоханулся я, всё правильно работает, не учёл что расчёты идут не с целыми числами, поменял тип переменных и всё стало на свои места.
Расчёты это очень быстро, рисование это всегда медленно, вот поэтому и ржал. Заявление о том что расчёты замедляют рисование, ну чё тут скажешь, или это на СИ так? 😯
А то что нужно сначала посчитать, а потом рисовать, так это вроде и не обсуждается.
Я позже поменяю ту фразу. Рисование везде всегда медленно. Расчёты, конечно, не замедляют рисование, только если не считать во время рисования. Если считать прямо во время рисование, то и без того медленное рисование замедляется дополнительно. Поэтому я и хотел дать понять, что сначала нужно провести расчёты и срисовывать с готового, а не рисовать по кусочкам, высчитывая координаты на лету. Как-то так.