Форум программистов, компьютерный форум CyberForum.ru

Поворот треугольника (вокруг центра) - C++

Восстановить пароль Регистрация
 
Алерон
5 / 5 / 0
Регистрация: 13.10.2009
Сообщений: 526
02.07.2015, 21:01     Поворот треугольника (вокруг центра) #1
Есть функция которая рисует треугольник по трём точкам. Эти точки заданы координатами(ху). В классе переменной pvo содержатся все 6 координат(x1,y1 -1 точка, x,y - 2 точка, x2,y2 - третья точка). Если начать изменять параметр альфа, то треугольник будет поворачиваться, но при этом еще и перемещаться(по кругу). Подскажите, где ошибка?
C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
void Draw()
{
    glClear(GL_COLOR_BUFFER_BIT);
    glPushMatrix();
    //alfa += 0.1;
    if (alfa == 360)
        alfa = 0;
    glBegin(GL_TRIANGLES);
    glVertex2f(pvo.x1*cos(alfa*3.14 / 180) - pvo.y1*sin(alfa*3.14 / 180), pvo.x1*sin(alfa*3.14 / 180) + pvo.y1*cos(alfa*3.14 / 180));
    glVertex2f(pvo.x*cos(alfa*3.14 / 180) - pvo.y*sin(alfa*3.14 / 180), pvo.x*sin(alfa*3.14 / 180) + pvo.y*cos(alfa*3.14 / 180));
    glVertex2f(pvo.x2*cos(alfa*3.14 / 180) - pvo.y2*sin(alfa*3.14 / 180), pvo.x2*sin(alfa*3.14 / 180) + pvo.y2*cos(alfa*3.14 / 180));
    glEnd();
    glPopMatrix();
    glutSwapBuffers();
}
После регистрации реклама в сообщениях будет скрыта и будут доступны все возможности форума.
Excalibur921
426 / 235 / 37
Регистрация: 12.10.2013
Сообщений: 1,787
02.07.2015, 21:22     Поворот треугольника (вокруг центра) #2
Странный код.
Цитата Сообщение от Алерон Посмотреть сообщение
pvo.x1*cos(alfa*3.14 / 180) - pvo.y1*sin(alfa*3.14 / 180)
Крутить точку вокруг x0 y0 всего:
x=x0+Cos[Alfa]*R
y=y0+Sin[Alfa]*R
Что у вас за муть непонятно, и почему она там где уже передают данные на видеокарту а не вычислена ранее..
И там радианы а не углы вроде.
Алерон
5 / 5 / 0
Регистрация: 13.10.2009
Сообщений: 526
02.07.2015, 21:24  [ТС]     Поворот треугольника (вокруг центра) #3
Excalibur921, что есть "R"?
dvano
 Аватар для dvano
131 / 62 / 16
Регистрация: 18.06.2014
Сообщений: 216
Завершенные тесты: 1
02.07.2015, 21:27     Поворот треугольника (вокруг центра) #4
Почему бы не использовать функции glTranslatef и glRotatef?
C++
1
2
3
4
5
6
7
8
glTranslatef(R, R, 0.0F);
glRotatef(alfa * 3.14 / 180, 0.0F, 0.0F, 1.0F);
glBegin(GL_TRIANGLES);
    glVertex2f(pvo.x1, pvo.y1);
    glVertex2f(pvo.x, pvo.y);
    glVertex2f(pvo.x2, pvo.y2);
glEnd();
glTranslatef(-R, -R, 0.0F);
Алерон
5 / 5 / 0
Регистрация: 13.10.2009
Сообщений: 526
02.07.2015, 21:38  [ТС]     Поворот треугольника (вокруг центра) #5
dvano, на сколько я понимаю, их действие распространится на всю матрицу и собственно на сцену, на которой, по идее, будут располагаться и другие объекты(они не должны изменяться).
dvano
 Аватар для dvano
131 / 62 / 16
Регистрация: 18.06.2014
Сообщений: 216
Завершенные тесты: 1
02.07.2015, 21:40     Поворот треугольника (вокруг центра) #6
Для этого существуют функции glPushMatrix() и glPopMatrix().
Алерон
5 / 5 / 0
Регистрация: 13.10.2009
Сообщений: 526
02.07.2015, 21:46  [ТС]     Поворот треугольника (вокруг центра) #7
dvano, я их использую для смены кадров, а как мне их применить для того, что бы изменения коснулись нужного мне "треугольника"?
Excalibur921
426 / 235 / 37
Регистрация: 12.10.2013
Сообщений: 1,787
02.07.2015, 21:49     Поворот треугольника (вокруг центра) #8
Цитата Сообщение от Алерон Посмотреть сообщение
что бы изменения коснулись нужного мне
Читайте про
Цитата Сообщение от dvano Посмотреть сообщение
функции glPushMatrix() и glPopMatrix().
Kerry_Jr
Модератор
 Аватар для Kerry_Jr
1855 / 1651 / 574
Регистрация: 14.05.2014
Сообщений: 4,726
Записей в блоге: 1
Завершенные тесты: 5
02.07.2015, 21:54     Поворот треугольника (вокруг центра) #9
Цитата Сообщение от Алерон Посмотреть сообщение
что есть "R"?
радиус описанной окружности, а точка вращения есть центр этой самой окружности.
Алерон
5 / 5 / 0
Регистрация: 13.10.2009
Сообщений: 526
03.07.2015, 18:31  [ТС]     Поворот треугольника (вокруг центра) #10
dvano, R - должен динамически рассчитываться?
dvano
 Аватар для dvano
131 / 62 / 16
Регистрация: 18.06.2014
Сообщений: 216
Завершенные тесты: 1
03.07.2015, 18:37     Поворот треугольника (вокруг центра) #11
Алерон, Как хотите. Можете вручную посчитать.
Алерон
5 / 5 / 0
Регистрация: 13.10.2009
Сообщений: 526
03.07.2015, 19:47  [ТС]     Поворот треугольника (вокруг центра) #12
dvano, рассчитал по формулам радиус описанной окружности...ну как бы и происходит вращение, однако, почему то до сих пор двигается...
Excalibur921
426 / 235 / 37
Регистрация: 12.10.2013
Сообщений: 1,787
03.07.2015, 20:37     Поворот треугольника (вокруг центра) #13
quote="Алерон;7835825"]рассчитал по формулам радиус описанной окружности..[/quote]
Чтозабред? Причем тут? АХаха .
Давайте так: что вы хотите? Вращать треугольник вокруг заданной точки через параметр Альфа?
Ну так создаете цикл, где рассчитываете угол для каждого шага какой шаг в радианах, и сколько шагов.
Затем еще один цикл, где по таймеру тикает счетчик меняет номер указателя на массив в котором ваши углы.

В итоге с каждым тиком таймера будет поворот треугольника на заданный вами угол.
Алерон
5 / 5 / 0
Регистрация: 13.10.2009
Сообщений: 526
03.07.2015, 20:56  [ТС]     Поворот треугольника (вокруг центра) #14
Excalibur921, а как выглядят формулы расчёта координат и угла альфа?
x=x0+Cos[Alfa]*R
y=y0+Sin[Alfa]*R
Здесь наверно не равно, а плюс равно? И чей же та радиус, если не описанной окружности?
dvano
 Аватар для dvano
131 / 62 / 16
Регистрация: 18.06.2014
Сообщений: 216
Завершенные тесты: 1
03.07.2015, 21:06     Поворот треугольника (вокруг центра) #15
Вам нужно переместить систему координат в центр треугольника, повернуть его на заданный угол, переместить систему координат в начальную позицию.
MoreAnswers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
03.07.2015, 21:14     Поворот треугольника (вокруг центра)
Еще ссылки по теме:

C++ Имитация вращения дефиса вокруг центра симметрии
C++ Поворот матрицы на 90 градусов относительно центра
Поворот треугольника, закрашенного текстурой. Ввод данных C++

Искать еще темы с ответами

Или воспользуйтесь поиском по форуму:
Excalibur921
426 / 235 / 37
Регистрация: 12.10.2013
Сообщений: 1,787
03.07.2015, 21:14     Поворот треугольника (вокруг центра) #16
1)Почитать и главное ПОНИМАТЬ что такое Cos Sin для начала.
2)Глянуть что такое окружность и ее параметрическое задание(в википедии).
2)А как насчет погуглить “поворот треугольника OpenGL”?

А еще лучше Липчак Суперкнига OpenGL с примерами и еще + 100500 книг типа Компьютерная графика…
Иначе с такими вопросами вам не стоит заниматься программированием.
Yandex
Объявления
03.07.2015, 21:14     Поворот треугольника (вокруг центра)
Ответ Создать тему
Опции темы

Текущее время: 20:28. Часовой пояс GMT +3.
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin® Version 3.8.9
Copyright ©2000 - 2016, vBulletin Solutions, Inc.
Рейтинг@Mail.ru