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

Как правильно высчитать координаты - C++

Восстановить пароль Регистрация
 
Рейтинг: Рейтинг темы: голосов - 9, средняя оценка - 4.67
Van111
кодер с++
208 / 187 / 4
Регистрация: 03.08.2011
Сообщений: 2,585
Записей в блоге: 12
15.06.2012, 18:58     Как правильно высчитать координаты #1
использую функцию glulookat
задача камера должна вращается вокруг точки posx,posy,0 ,высота heigh так же есть два угла поворота rx и ry
подскажите пожалуйста как высчитать новое положение камеры в зависимости от углов поворота и расстояния .с материалом из викепедии не получилось(точнее получилось но объекты резко изменяли положение при определённых углах).
заранее гигантское спасибо!!!
После регистрации реклама в сообщениях будет скрыта и будут доступны все возможности форума.
NoMasters
Псевдослучайный
1737 / 1080 / 69
Регистрация: 13.09.2011
Сообщений: 3,093
15.06.2012, 19:20     Как правильно высчитать координаты #2
Я не понял, heigh — это просто расстояние от камеры до точки? Вообще в таком раскладе проще отказаться от glulookat и руками двигать-вращать, а так это школьный курс геометрии, сферические координаты.
Van111
кодер с++
208 / 187 / 4
Регистрация: 03.08.2011
Сообщений: 2,585
Записей в блоге: 12
15.06.2012, 19:27  [ТС]     Как правильно высчитать координаты #3
NoMasters, в том то и дело я сделал с помощью сферических координат но камера дёргается при определённых углах и движение как то глючит вот код

C++
1
2
3
4
5
radius=posz;
deltax=sin(rotatey) *cos(rotatex) *radius;
deltay=sin(rotatey) *sin(rotatex) *radius;
deltaz=cos(rotatey) *radius;
gluLookAt(posx,posy,posz,deltax,deltay,deltaz,0,0,1);
за расстояния я принял высоту(posz) так как мы находимся над объектом
NoMasters
Псевдослучайный
1737 / 1080 / 69
Регистрация: 13.09.2011
Сообщений: 3,093
15.06.2012, 19:32     Как правильно высчитать координаты #4
А где учитывается, что вращение идёт не вокруг начала координат?
Цитата Сообщение от Van111 Посмотреть сообщение
за расстояния я принял высоту(posz) так как мы находимся над объектом
Это с какой радости?
OstapBender
 Аватар для OstapBender
581 / 519 / 35
Регистрация: 22.03.2011
Сообщений: 1,585
15.06.2012, 19:34     Как правильно высчитать координаты #5
чтобы повернуть объект относительно точки вращения необходимо 1) поместить объект ( все точки объекта) в центр точки вращения затем
2) сделать поворот, относительно нулевых координат http://ru.wikipedia.org/wiki/%D0%9C%...BE%D1%82%D0%B0

вам по видимому нужен пункт про 2-мерное пр-во.

3) вернуть объект назад на столько на сколько мы его сдвинули чтобы поместить в точку вращения...
Van111
кодер с++
208 / 187 / 4
Регистрация: 03.08.2011
Сообщений: 2,585
Записей в блоге: 12
15.06.2012, 19:35  [ТС]     Как правильно высчитать координаты #6
Цитата Сообщение от NoMasters Посмотреть сообщение
А где учитывается, что вращение идёт не вокруг начала координат?
как это сделать
Цитата Сообщение от NoMasters Посмотреть сообщение
Это с какой радости?
не знаю может потому ,что камера находится точно над объектом

можете сделать рабочий код?
OstapBender
 Аватар для OstapBender
581 / 519 / 35
Регистрация: 22.03.2011
Сообщений: 1,585
15.06.2012, 19:40     Как правильно высчитать координаты #7
во ...
Миниатюры
Как правильно высчитать координаты  
NoMasters
Псевдослучайный
1737 / 1080 / 69
Регистрация: 13.09.2011
Сообщений: 3,093
15.06.2012, 19:42     Как правильно высчитать координаты #8
Цитата Сообщение от Van111 Посмотреть сообщение
как это сделать
Нужно добавить к каждой координате переносную компоненту, то есть просто соответствующую координату точки, вокруг которой происходит вращение.
Van111
кодер с++
208 / 187 / 4
Регистрация: 03.08.2011
Сообщений: 2,585
Записей в блоге: 12
15.06.2012, 19:53  [ТС]     Как правильно высчитать координаты #9
OstapBender, надо чтоб вращался по двум осям

Добавлено через 4 минуты
Цитата Сообщение от NoMasters Посмотреть сообщение
Нужно добавить к каждой координате переносную компоненту, то есть просто соответствующую координату точки, вокруг которой происходит вращение.
NoMasters, вот так чтоли
deltax+=posx;
deltay+=posy;
deltaz+=posz;

Добавлено через 5 минут
можете скинуть рабочие формулы или код?

Добавлено через 19 секунд
можете скинуть рабочие формулы или код?
NoMasters
Псевдослучайный
1737 / 1080 / 69
Регистрация: 13.09.2011
Сообщений: 3,093
15.06.2012, 19:53     Как правильно высчитать координаты #10
Цитата Сообщение от Van111 Посмотреть сообщение
deltax+=posx;
deltay+=posy;
deltaz+=posz;
Да.
Но вообще стоит прислушаться к Остапу, он дело говорит(особенно, если в состоянии самостоятельно сформировать ровно одну матрицу для переноса и обоих поворотов).
Van111
кодер с++
208 / 187 / 4
Регистрация: 03.08.2011
Сообщений: 2,585
Записей в блоге: 12
15.06.2012, 19:56  [ТС]     Как правильно высчитать координаты #11
NoMasters, мне надо не просто вращаться вокруг объекта а вращаться над определённой точкой вокруг кучи объектов
NoMasters
Псевдослучайный
1737 / 1080 / 69
Регистрация: 13.09.2011
Сообщений: 3,093
15.06.2012, 20:00     Как правильно высчитать координаты #12
Van111, и как это влияет? Последовательность действий ровна та же, вращение всё равно происходит вокруг какой-то там одной точки.
Van111
кодер с++
208 / 187 / 4
Регистрация: 03.08.2011
Сообщений: 2,585
Записей в блоге: 12
15.06.2012, 20:01  [ТС]     Как правильно высчитать координаты #13
Цитата Сообщение от NoMasters Посмотреть сообщение
Van111, и как это влияет? Последовательность действий ровна та же, вращение всё равно происходит вокруг какой-то там одной точки.
а после этого вращения мы сможем крутить объекты вокруг своей оси?
NoMasters
Псевдослучайный
1737 / 1080 / 69
Регистрация: 13.09.2011
Сообщений: 3,093
15.06.2012, 20:05     Как правильно высчитать координаты #14
Цитата Сообщение от Van111 Посмотреть сообщение
а после этого вращения мы сможем крутить объекты вокруг своей оси?
glu делает ровно тоже самое.
MoreAnswers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
16.06.2012, 12:49     Как правильно высчитать координаты
Еще ссылки по теме:

C++ Задан массив, нужно высчитать некую m
C++ Как правильно вписать функцию в h-файл и правильно её отразить в основной функции?
Высчитать площади четырех кругов с помощью функции C++

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

Или воспользуйтесь поиском по форуму:
Van111
кодер с++
208 / 187 / 4
Регистрация: 03.08.2011
Сообщений: 2,585
Записей в блоге: 12
16.06.2012, 12:49  [ТС]     Как правильно высчитать координаты #15
вот получился такой бред ,что не так?
C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
GLvoid DrawGLScene(GLvoid)
{
 
glLoadIdentity();
glClear(GL_COLOR_BUFFER_BIT | GL_DEPTH_BUFFER_BIT);// Очистка экрана и буфера глубины
 
 
 
 
 
 
 
 
for(int i=0,size=GAME.GetCounterUnit();i<size;i++)
    {
        glPushMatrix();
        glTranslatef(posx,posy,0);
        glRotatef(rotatey,0,0,1);
        glRotatef(rotatex,1,1,0);
 
        glTranslatef(GAME.GetX(i),GAME.GetY(i),-posz);  
        glBegin(GL_TRIANGLES);                          
        for(int j1=0;j1<counter_triangles;j1++)
        {
     
     
            for(int j2=0;j2<counter_vertices_in_triangle;j2++)
            {
                
                glColor3f(my_piramid_colors[j1][j2][0],my_piramid_colors[j1][j2][1],my_piramid_colors[j1][j2][2]);
                glVertex3f(my_piramid[j1][j2][0], my_piramid[j1][j2][1], my_piramid[j1][j2][2]  );
            
            }
        }
        glEnd(); 
        glPopMatrix();
    }
Добавлено через 1 час 50 минут
вот сделал так ,что именно неправильно? камера как то не совсем так вращается как я ожидал
C++
1
2
3
4
5
6
float radius= sqrt(pow(posz,2));
deltax=radius * cos(rotatey) * cos(rotatex);
deltay=radius * cos(rotatey) ;
deltaz=radius * cos(rotatey) * sin(rotatex);
 
gluLookAt(posx+deltax,posy+deltay,-posz-deltaz,posx,posy,0,0,1,0);
Yandex
Объявления
16.06.2012, 12:49     Как правильно высчитать координаты
Ответ Создать тему
Опции темы

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