Форум программистов, компьютерный форум, киберфорум
Программирование графики
Войти
Регистрация
Восстановить пароль
Блоги Сообщество Поиск Заказать работу  
 
Рейтинг 4.87/38: Рейтинг темы: голосов - 38, средняя оценка - 4.87
Заблокирован

Поворот фигуры. Компьютерная графика

24.02.2012, 21:48. Показов 7263. Ответов 8
Метки нет (Все метки)

Студворк — интернет-сервис помощи студентам
Пытаюсь повернуть фигуру по часовой стрелке. При повороте фигура уменьшается в размерах и стремится в точку(начало координат). В чём дело??
C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
float ugol;
 ugol=M_PI/6;
 matrix[0][0]=cos(ugol);
 matrix[0][1]=-sin(ugol);
 matrix[1][0]=sin(ugol);
 matrix[1][1]=cos(ugol);
 Form1->Canvas->Brush->Color=clBlack;
 float tmpshape[3][3];
  for (int k = 0; k < 3; k++)
    for (int i = 0; i < 2; i++)
    {
      tmpshape[k][i] = 0;
      for (int j = 0; j < 2; j++)
      {
        tmpshape[k][i] =tmpshape[k][i]+ matrix[j][i]*trgl[k][j];
      }
    }
  for (int i = 0; i < 3; i++)
    for (int j = 0; j < 2; j++) trgl[i][j]=tmpshape[i][j];
 
 trglris();
0
cpp_developer
Эксперт
20123 / 5690 / 1417
Регистрация: 09.04.2010
Сообщений: 22,546
Блог
24.02.2012, 21:48
Ответы с готовыми решениями:

Компьютерная графика, аффинные преобразования
Помогите!!!!! Плиз!!! Написать программу позволяющую: 1) Построить простейшие геометрические объекты согласно варианта -...

Программист и компьютерная графика - есть связь?
Привет друзья. Я чайник. Объясните пожалуйста: Люди которые делают спецэффекты и анимацию - &quot;художники&quot; и получается что на...

Поворот фигуры в игре
Пишу игру &quot;Водопроводчик&quot;. Сделал поле, накидал на него своих фигур, но столкнулся с проблемой, что я не могу повернуть фигуру. Написал...

8
Каратель
Эксперт С++
6610 / 4029 / 401
Регистрация: 26.03.2010
Сообщений: 9,273
Записей в блоге: 1
24.02.2012, 21:55
формулы поворота
x' = x * cos(alpha) - y * sin(alpha)
y' = y * cos(alpha) + x * sin(alpha)
а у вас что?
0
Заблокирован
24.02.2012, 21:59  [ТС]
мне нужно реализовать поворот через перемножение матрицы координат вершин треугольника на матрицу поворота.двумерное преобразование.

Добавлено через 1 минуту
вот какие значения для вершин
C++
1
2
3
trgl[0][0]=-11; trgl[0][1]=12;
 trgl[1][0]=5; trgl[1][1]=9;
trgl[2][0]=2; trgl[2][1]=1;
0
Каратель
Эксперт С++
6610 / 4029 / 401
Регистрация: 26.03.2010
Сообщений: 9,273
Записей в блоге: 1
24.02.2012, 22:01
Цитата Сообщение от Alenka=) Посмотреть сообщение
мне нужно реализовать поворот через перемножение матрицы координат вершин треугольника на матрицу поворота.двумерное преобразование.
ну дык возьми на бумаге перемнож матрицы и получишь формулы которые я написал выше
0
Заблокирован
24.02.2012, 22:26  [ТС]
мне это перемножение программно надо сделать. но я попробовала сделать по вашим формулам. ничего не изменилось. если попытаться несколько раз выполнить поворот, фигура уменьшается.
C++
1
2
3
4
5
6
trgl[0][0] = trgl[0][0] * cos(ugol) - trgl[0][1] * sin(ugol);
 trgl[0][1]= trgl[0][1] * cos(ugol) + trgl[0][0] * sin(ugol);
 trgl[1][0] = trgl[1][0] * cos(ugol) - trgl[1][1] * sin(ugol);
 trgl[1][1]= trgl[1][1] * cos(ugol) + trgl[1][0] * sin(ugol);
 trgl[2][0] = trgl[2][0] * cos(ugol) - trgl[2][1] * sin(ugol);
 trgl[2][1]= trgl[2][1] * cos(ugol) + trgl[2][0] * sin(ugol);
0
 Аватар для XAHOK
273 / 266 / 20
Регистрация: 27.02.2009
Сообщений: 694
Записей в блоге: 7
24.02.2012, 22:38
Цитата Сообщение от Alenka=) Посмотреть сообщение
Пытаюсь повернуть фигуру по часовой стрелке. При повороте фигура уменьшается в размерах и стремится в точку(начало координат). В чём дело??
[/CPP]
Формула перемножения правильно написана. Проверяйте составление матрицы поворота и по шагам расчет новых значений. Возьмите угол 45 или 90 гр. Отлаживать будет легче.
ЗЫ. Положительное значение угла повернет против часовой стрелки.
ЗЫ2. Не понимаю. зачем вы индексы столбцов и строк местами поменяли. Сравнивать ваш код с матописанием перемножения матриц стало дико неудобно.
ЗЫ3. Не забудьте, что поворот выполняется относительно начала координат.
2
Заблокирован
26.02.2012, 13:01  [ТС]
Цитата Сообщение от XAHOK Посмотреть сообщение
Не понимаю. зачем вы индексы столбцов и строк местами поменяли.
простите не поняла, что вы имеете ввиду.

Добавлено через 6 часов 43 минуты
я попыталась поворачивать фигуру на 90 градусов. срабатывает нормально. как только ставлю угол в 30,45,60 градусов, треугольник начинает уменьшаться и стремится в начало координат=(может это связано с точностью функций синуса и косинуса?

Добавлено через 15 часов 28 минут
неужели ни у кого нет никаких соображении??
0
brony
77 / 57 / 4
Регистрация: 02.01.2012
Сообщений: 521
26.02.2012, 16:35
В книге краснова есть это. (Глава 2, ближе к концу про повороты, про матрицу в главе 3 в начале)
Там всё чётко написано.
Заключите свои повороты в glPushmatrix и glPopMatrix. (По идее команды для openGL и в делфи и в С одни и тк же.)
Без этих команд при перемножении матриц всё уменьшается в 2 раза.
1
 Аватар для XAHOK
273 / 266 / 20
Регистрация: 27.02.2009
Сообщений: 694
Записей в блоге: 7
26.02.2012, 18:27
Цитата Сообщение от Alenka=) Посмотреть сообщение
я попыталась поворачивать фигуру на 90 градусов. срабатывает нормально. как только ставлю угол в 30,45,60 градусов, треугольник начинает уменьшаться и стремится в начало координат=(может это связано с точностью функций синуса и косинуса?
Уменьшаться вполне может из-за погрешности вычислений, которая накапливается с каждым перемножением матрицы на вектор текущих координат. Лучше всего поворот пересчитывать из исходного положения(что практически всегда и делается) плюс вы всегда будете знать углы, относительно исходного положения.

ЗЫ. по поводу индексов, то матрицы перемножаются как строка на столбец. А у вас наоборот, из-за чего неудобно визуально проверять код.
1
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
raxper
Эксперт
30234 / 6612 / 1498
Регистрация: 28.12.2010
Сообщений: 21,154
Блог
26.02.2012, 18:27
Помогаю со студенческими работами здесь

Поворот фигуры в движении
фигура двигается по траектории, заданой массивом точек, но криво поворачивается. Нужно, чтобы квадрат поворачивался вокруг центра...

Поворот фигуры в lwjgl
Добрый день.Возникла проблемка при использовании glRotatef.При использовании фигура вращается вокруг одной из указанных осей.Но как сделать...

Странный поворот фигуры
Здравствуйте. Пишу под Code::Blocks на c++, компилятор - mingw. Есть квадрат, он следует за координатами мыши. Пытаюсь повернуть его, но...

Компьютерная графика. Реализация фигуры додекаэдр
class MYAPPLICATION : public APPLICATION_3D { ... // Начальные координаты мыши int mX; int mY; // Изменение...

Поворот фигуры. Графика
Предоставить пользователю возможность задать количество квадратов “n”. Причем каждый последующий квадрат должен быть вписан в...


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

Или воспользуйтесь поиском по форуму:
9
Ответ Создать тему
Новые блоги и статьи
SDL3 для Web (WebAssembly): Реализация движения на Box2D v3 - трение и коллизии с повёрнутыми стенами
8Observer8 20.02.2026
Содержание блога Box2D позволяет легко создать главного героя, который не проходит сквозь стены и перемещается с заданным трением о препятствия, которые можно располагать под углом, как верхнее. . .
Конвертировать закладки radiotray-ng в m3u-плейлист
damix 19.02.2026
Это можно сделать скриптом для PowerShell. Использование . \СonvertRadiotrayToM3U. ps1 <path_to_bookmarks. json> Рядом с файлом bookmarks. json появится файл bookmarks. m3u с результатом. # Check if. . .
Семь CDC на одном интерфейсе: 5 U[S]ARTов, 1 CAN и 1 SSI
Eddy_Em 18.02.2026
Постепенно допиливаю свою "многоинтерфейсную плату". Выглядит вот так: https:/ / www. cyberforum. ru/ blog_attachment. php?attachmentid=11617&stc=1&d=1771445347 Основана на STM32F303RBT6. На борту пять. . .
Камера Toupcam IUA500KMA
Eddy_Em 12.02.2026
Т. к. у всяких "хикроботов" слишком уж мелкий пиксель, для подсмотра в ESPriF они вообще плохо годятся: уже 14 величину можно рассмотреть еле-еле лишь на экспозициях под 3 секунды (а то и больше),. . .
И ясному Солнцу
zbw 12.02.2026
И ясному Солнцу, и светлой Луне. В мире покоя нет и люди не могут жить в тишине. А жить им немного лет.
«Знание-Сила»
zbw 12.02.2026
«Знание-Сила» «Время-Деньги» «Деньги -Пуля»
SDL3 для Web (WebAssembly): Подключение Box2D v3, физика и отрисовка коллайдеров
8Observer8 12.02.2026
Содержание блога Box2D - это библиотека для 2D физики для анимаций и игр. С её помощью можно определять были ли коллизии между конкретными объектами и вызывать обработчики событий столкновения. . . .
SDL3 для Web (WebAssembly): Загрузка PNG с прозрачным фоном с помощью SDL_LoadPNG (без SDL3_image)
8Observer8 11.02.2026
Содержание блога Библиотека SDL3 содержит встроенные инструменты для базовой работы с изображениями - без использования библиотеки SDL3_image. Пошагово создадим проект для загрузки изображения. . .
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2026, CyberForum.ru