|
|
Регистрация Восстановить пароль |
Повторная активизация e-mail |
Регистрация | Задать вопрос |
Заплачу за решение |
Новые сообщения |
Сообщения за день |
Расширенный поиск |
Правила |
Всё прочитано |
|
Опции темы | Поиск в этой теме |
12.05.2008, 16:19 | #1 |
Форумчанин
Регистрация: 19.12.2007
Сообщений: 159
|
не дорисовывается одна сторона многоуголника на си
Почему то никак не хочет дорисовываться последняя сторона,может кто сможет поправить. Заранее спаисбо.
#include <dos.h> #include <iostream.h> #include <stdio.h> #include <graphics.h> #include <math.h> class _multiangle { int angles_num; int radius; float area; int _max_x; int _max_y; int alpha; void selectPoints(int&, int&, int); public: int* ps; _multiangle() { } ~_multiangle() { if(ps) delete[] ps; } void initGraph(); void draw(); void closeGraph() { closegraph(); } void getUserInput(int _angles, int _rad); float getArea() { return this->area; } }; void _multiangle::selectPoints(int& x, int& y, int index) { x = /*this->_max_x/2 + */ceil( this->radius * cos(index * ((this->alpha * M_PI)/180) ) +this->_max_x/2); y = /*this->_max_y/2 + */ceil( this->radius * sin(index * ((this->alpha * M_PI)/180) ) +this->_max_y/2); } void _multiangle::getUserInput(int _angles, int _rad) { this->angles_num = _angles; this->radius = _rad; //площадь this->area = this->angles_num / 2 * this->radius * this->radius * sin(2 * M_PI / this->angles_num); //память под пары (x,y) для многоугольника ps = new int[(_angles+1) * 2]; this->alpha = ceil(360 / _angles); } void _multiangle::initGraph() { int graphdriver = DETECT, gmode, errorcode = 0; initgraph(&graphdriver,&gmode,""); //errorcode = graphresult(); this->_max_x = getmaxx(); this->_max_y = getmaxy(); int i = 0; while(i<this->angles_num) { this->selectPoints(ps[2*i], ps[2*i+1], i+1); i++; } this->ps[2*i] =this->ps[0]; this->ps[2*i+1] =this->ps[1]; } void _multiangle:raw() { moveto(0,0); //moveto(this->ps[0], this->ps[1]); drawpoly(this->angles_num, this->ps); delay(5000); } typedef _multiangle *MultiAngle; int main(int argc, char* const argv[]) { int r, n; //радиус, кол-во углов MultiAngle object = new _multiangle; cout << "Radius: "; cin >> r; cout << "Angles num: "; cin >> n; object->getUserInput(n, r); object->initGraph(); //while(!kbhit()) object->draw(); object->closeGraph(); cout << "Area: " << object->getArea() << "\n\n"; int i =0; while(i <= n) { cout << "(" << object->ps[2*i] << "," << object->ps[2*i+1] << ")" << "\n"; i++; } delete object; return 0; }
Пока ремонтируют кукольный домик, живу на форуме.
|
12.05.2008, 16:20 | #2 |
Форумчанин
Регистрация: 19.12.2007
Сообщений: 159
|
ой там где смайлик там draw было
Пока ремонтируют кукольный домик, живу на форуме.
|
12.05.2008, 16:30 | #3 |
Участник клуба
Регистрация: 26.10.2007
Сообщений: 1,244
|
Си не знаю, не синяк
Я так понимаю что точки заносятся в массив и потом по ним рисуется. Кординаты последней точки это есть координаты первой точки... Цикл н доходит, надо продлить.
Умом Россию не понять, пока не выпито ноль пять,
А если выпито ноль пять всё делом кажется не хитрым, Попытка глубже понимать уже попахивает литром... |
12.05.2008, 22:39 | #4 |
Форумчанин
Регистрация: 19.12.2007
Сообщений: 159
|
спасибо,попроавила,все дорисовывается, теперь проблема с тем что площадь не выводиться после рисунка, Если запускать прогу еще раз или альт a 5 нажимать то можно увидеть предудущую площадь,а вот чтоб после рисунка никак не получается
Пока ремонтируют кукольный домик, живу на форуме.
|
Похожие темы | ||||
Тема | Автор | Раздел | Ответов | Последнее сообщение |
ёщё одна задача | terminadoor | Помощь студентам | 9 | 23.07.2008 22:50 |
еще одна задачка | koston | Помощь студентам | 4 | 09.04.2008 18:43 |
Еще одна задача | felice | Паскаль, Turbo Pascal, PascalABC.NET | 2 | 03.02.2008 14:32 |
Беда не приходит одна! | Tayfun | Свободное общение | 6 | 30.12.2007 07:58 |
еще одна задача в BP | Jasper | Паскаль, Turbo Pascal, PascalABC.NET | 2 | 05.12.2006 15:13 |