Наши проекты:
Журнал · Discuz!ML · Wiki · DRKB · Помощь проекту |
||
ПРАВИЛА | FAQ | Помощь | Поиск | Участники | Календарь | Избранное | RSS |
[3.129.67.38] |
|
Сообщ.
#1
,
|
|
|
Доброе время суток
Не откажите в совете (хоть и тема, я думаю, заезжена ). реализовал алгоритм средней точки, использование полярных функций считаю не АЙС!!!! void CGraphScena2D::_circleMidlPoint(GLdouble r,GLdouble xc,GLdouble yc) { GLdouble x,y,xk,yk; GLdouble p = 5/4 - r; //Переношу точку а начало координат x = 0; y = r; xk = x; yk = y; auto now = std::chrono::time_point_cast<std::chrono::milliseconds>(std::chrono::system_clock::now()); while (x <= y) { xk += 0.1; if (p < 0) p += 2*x + 1; else { p += 2*(x - y) + 1; yk -= 0.1; } glBegin(GL_LINES); glVertex2d(xc+x,yc+y); glVertex2d(xc+xk,yc+yk); glEnd(); glBegin(GL_LINES); glVertex2d(xc-x,yc+y); glVertex2d(xc-xk,yc+yk); glEnd(); glBegin(GL_LINES); glVertex2d(xc-y,yc+x); glVertex2d(xc-yk,yc+xk); glEnd(); glBegin(GL_LINES); glVertex2d(xc-y,yc-x); glVertex2d(xc-yk,yc-xk); glEnd(); glBegin(GL_LINES); glVertex2d(xc-x,yc-y); glVertex2d(xc-xk,yc-yk); glEnd(); glBegin(GL_LINES); glVertex2d(xc+x,yc-y); glVertex2d(xc+xk,yc-yk); glEnd(); glBegin(GL_LINES); glVertex2d(xc+y,yc-x); glVertex2d(xc+yk,yc-xk); glEnd(); glBegin(GL_LINES); glVertex2d(xc+y,yc+x); glVertex2d(xc+yk,yc+xk); glEnd(); x = xk,y = yk; } auto comm = (std::chrono::time_point_cast<std::chrono::milliseconds>(std::chrono::system_clock::now()) - now).count(); printf_s("Время отрисовки круга... - %f(секунд)\n",(double)(comm/1000.0)); } Но в результате отрисовывается элипс а не окружность. Что я сделал не корректно? Подскажите, пожалуйста. |
Сообщ.
#2
,
|
|
|
В матрице модельного вида устанавливаются пропорции по Ox и Oy. Их надо учесть.
Добавлено П.С. функции glBegin/glEnd архимедленные, так что много лучше вынести их за while. |
Сообщ.
#3
,
|
|
|
Доброе время суток.
Спасибо за совет |