Форум программистов, компьютерный форум, киберфорум
Наши страницы

Программирование Android

Войти
Регистрация
Восстановить пароль
 
SlowAR
0 / 0 / 0
Регистрация: 30.04.2014
Сообщений: 48
#1

Поворот объекта относительно заданной точки OpenGL ES 2.0 - Программирование Android

02.03.2016, 04:19. Просмотров 545. Ответов 5
Метки нет (Все метки)

Здравствуйте! У меня есть прямоугольник 100 на 50, который я хочу повернуть относительно точки, к примеру, (20, 10), но у меня никак не выходит. Лучшее, чего я смог добиться - поворот по левому верхнему углу:
Java
1
2
3
Matrix.multiplyMM(rotationMatrix, 0, projectionMatrix, 0, viewMatrix, 0);
Matrix.translateM(rotationMatrix, 0, myPosX, myPosY, 0);
Matrix.rotateM(rotationMatrix, 0, angle, 0, 0, 1.0f);
Как можно вращать объект относительно некоторой точки? Заранее благодарю, все обыскал, ничего не выходит!
0
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
Similar
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
02.03.2016, 04:19
Я подобрал для вас темы с готовыми решениями и ответами на вопрос Поворот объекта относительно заданной точки OpenGL ES 2.0 (Программирование Android):

OpenGl ES 2.0. Некорректный поворот объекта - Программирование Android
Здравствуйте! Пытаюсь применять матрицы транформации к отрисовке объекта, но вращение происходит криво, не могу понять по чему... Мне...

Поворот отрезка на произвольный угол относительно заданной точки - C#
Доброго всем времени суток. Не как не получается найти метод для поворота отрезка Сам отрезок нарисовал System.Drawing.Pen myPen =...

Такая проблема: осуществляю поворот относительно заданной точки на заданный(Button 5) - C++ Builder
Фигура деформируется и вращается вокруг исходной фигуры,а должна вращаться относительно заданной точки. Подскажите пожалуйста формулу для...

Поворот объекта относительно другого - Графика и игры
Приветствую, есть два объекта в трехмерном пространстве, известны углы их поворота относительно мировых координат, необходимо перенести...

Поворот относительно произвольной точки - C++/CLI WinForms
Здравствуйте. Занимаюсь 2d преобразованиями на форме. У меня получается вращать набор отрезков относительно начала координат. Как...

Поворот прямоугольника относительно точки - C#
Столкнулся со следующей проблемой. Есть Класс который содержит координаты вершин прямоугольника и галочки внутри него. Надо повернуть эту...

5
SlowAR
0 / 0 / 0
Регистрация: 30.04.2014
Сообщений: 48
03.03.2016, 22:48  [ТС] #2
неужели никто не знает?
0
DemD10
58 / 47 / 12
Регистрация: 03.09.2013
Сообщений: 443
04.03.2016, 08:01 #3
Тебе нужно на какой-нибудь специальный форум по гейм деву или по OpenGL. Тут люди в большинстве своём в сдк андроида шарят.
0
SlowAR
0 / 0 / 0
Регистрация: 30.04.2014
Сообщений: 48
04.03.2016, 08:58  [ТС] #4
DemD10, эхх, попытка не пытка когда найду решение - напишу подробно сюда
0
Valakin
431 / 97 / 15
Регистрация: 21.02.2015
Сообщений: 736
04.03.2016, 09:15 #5
Цитата Сообщение от SlowAR Посмотреть сообщение
У меня есть прямоугольник 100 на 50, который я хочу повернуть относительно точки, к примеру, (20, 10),
тут ответа даже на другом форуме не будет, поскольку ты не пишешь где находится прямоугольник, какие координаты полигонов
0
SlowAR
0 / 0 / 0
Регистрация: 30.04.2014
Сообщений: 48
04.03.2016, 13:28  [ТС] #6
Valakin, я хотел узнать в общем как делать, но я только что решил эту проблему, у меня была ошибка в формуле расчета смещения. через 2,5 часа доберусь до компа с инетом и распишу

Добавлено через 3 часа 46 минут
Вот как я сделал:
Java
1
2
3
4
5
6
7
8
9
10
11
float angleCos = (float)(Math.cos(angle*Math.PI/180) * radius);   //1
float angleSin = (float)(Math.sin(angle*Math.PI/180) * radius)
float offsetX = angleCos + angleSin;
float offsetY = angleSin - angleCos;
 
Matrix.multiplyMM(rotationMatrix, 0, projectionMatrix, 0, viewMatrix, 0);
 
Matrix.translateM(rotationMatrix, 0, posX, posY, 0);   //2
Matrix.translateM(rotationMatrix, 0, -offsetX, -offsetY, 0);
 
Matrix.rotateM(rotationMatrix, 0, angle, 0, 0, 1.0f);  //3
Вращение объекта вокруг некой точки осуществляется путем смещения его левого верхнего угла на определенное значение, вычисляемое при помощи угла поворота. Это нужно для того, чтобы нужная нам точка вращения находилась на одном месте. Смещение по оси Х и по оси У рассчитывается в пункте 1. Здесь angle - мой некий угол поворота в градусах, который переводится в радианы angle*Math.PI/180 (т.к. функции sin и cos принимают углы в радианах), переменная radius - это расстояние от левого верхнего угла объекта до моей точки, вокруг которой надо вращать. Вычисляется по формуле:
Java
1
radius = (float) Math.sqrt(Math.pow(pointX, 2) + Math.pow(pointY, 2));
, где pointX и pointY - расстояния от левого верхнего угла объекта до вашей точки по оси Х и У.
В результате в переменных offsetX и offsetY будут наши смещения для для левого верхнего угла объекта для текущего угла.

В пункте 2 я перемещаю свой объект в какую-то точку posX и posY и затем смещаю его на полученные значения.

В пункте 3 я поворачиваю на тот же самый угол angle свой объект. После передаю rotationMatrix на отрисовку.
Теперь левый верхний угол объекта будет перемещаться по линии окружности на расстоянии radius от нашей точки вращения.

Старался объяснить максимально подробно. Если будут вопросы - постараюсь ответить
0
04.03.2016, 13:28
MoreAnswers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
04.03.2016, 13:28
Привет! Вот еще темы с ответами:

Поворот прямоугольника на угол относительно точки, C# - OpenGL
Здравствуйте, проблема с поворотом прямоугольника. Четкого примера в нете не нашел, прошу помочь вот что написал, рисуется просто...

Поворот изображения относительно начальной точки в Photoshop CS6 - Photoshop
Добрый вечер! У меня появился следующий вопрос - можно ли как-то в фотошопе CS6 повернуть изображение относительно начальной точки? Если...

Нахождение точки, симметричной заданной относительно заданной прямой - Геометрия
Задание на скрине - del распишите поподробнее, как и почему. не могу нагуглить решение, уже мозг кипит

Поворот фигуры вокруг заданной точки - Геометрия
Не могу найти ни как формулы. Кто знает подскажите пожалуйста. Имеются координаты (x,y), дана точка (i, j), задан угол t. Как...


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

Или воспользуйтесь поиском по форуму:
6
Ответ Создать тему
Опции темы

КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin® Version 3.8.9
Copyright ©2000 - 2018, vBulletin Solutions, Inc.
Рейтинг@Mail.ru