Форум программистов, компьютерный форум, киберфорум
С++ для начинающих
Войти
Регистрация
Восстановить пароль
Блоги Сообщество Поиск Заказать работу  
 
Рейтинг 4.50/8: Рейтинг темы: голосов - 8, средняя оценка - 4.50
290 / 193 / 23
Регистрация: 03.08.2011
Сообщений: 2,824
Записей в блоге: 12

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

15.06.2012, 18:58. Показов 1742. Ответов 14
Метки нет (Все метки)

Студворк — интернет-сервис помощи студентам
использую функцию glulookat
задача камера должна вращается вокруг точки posx,posy,0 ,высота heigh так же есть два угла поворота rx и ry
подскажите пожалуйста как высчитать новое положение камеры в зависимости от углов поворота и расстояния .с материалом из викепедии не получилось(точнее получилось но объекты резко изменяли положение при определённых углах).
заранее гигантское спасибо!!!
0
Programming
Эксперт
39485 / 9562 / 3019
Регистрация: 12.04.2006
Сообщений: 41,671
Блог
15.06.2012, 18:58
Ответы с готовыми решениями:

Как правильно брать координаты курсора по событию WM_LBUTTONDOWN в x64?
Как правильно брать координаты курсора по событию WM_LBUTTONDOWN в x64? В x32 было x=LOWORD(Lparam); y=HIWORD(Lparam);. А в x64 как? По...

Как правильно вычислить координаты?
Имеется отцентрированная рамка с надписью "HTML 5", и справа у края экрана цифра 5. Эта цифра с помощью скрипта передвигается влево на...

Как правильно задать координаты курсора
Доброго времени суток.Нужно реализовать клик мышкой по координатам.Сделал так: textBox2.Text = x1; textBox3.Text = y1; ...

14
Псевдослучайный
1946 / 1146 / 98
Регистрация: 13.09.2011
Сообщений: 3,215
15.06.2012, 19:20
Я не понял, heigh — это просто расстояние от камеры до точки? Вообще в таком раскладе проще отказаться от glulookat и руками двигать-вращать, а так это школьный курс геометрии, сферические координаты.
1
290 / 193 / 23
Регистрация: 03.08.2011
Сообщений: 2,824
Записей в блоге: 12
15.06.2012, 19:27  [ТС]
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) так как мы находимся над объектом
0
Псевдослучайный
1946 / 1146 / 98
Регистрация: 13.09.2011
Сообщений: 3,215
15.06.2012, 19:32
А где учитывается, что вращение идёт не вокруг начала координат?
Цитата Сообщение от Van111 Посмотреть сообщение
за расстояния я принял высоту(posz) так как мы находимся над объектом
Это с какой радости?
1
 Аватар для OstapBender
594 / 532 / 76
Регистрация: 22.03.2011
Сообщений: 1,585
15.06.2012, 19:34
чтобы повернуть объект относительно точки вращения необходимо 1) поместить объект ( все точки объекта) в центр точки вращения затем
2) сделать поворот, относительно нулевых координат http://ru.wikipedia.org/wiki/%... 1%82%D0%B0

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

3) вернуть объект назад на столько на сколько мы его сдвинули чтобы поместить в точку вращения...
1
290 / 193 / 23
Регистрация: 03.08.2011
Сообщений: 2,824
Записей в блоге: 12
15.06.2012, 19:35  [ТС]
Цитата Сообщение от NoMasters Посмотреть сообщение
А где учитывается, что вращение идёт не вокруг начала координат?
как это сделать
Цитата Сообщение от NoMasters Посмотреть сообщение
Это с какой радости?
не знаю может потому ,что камера находится точно над объектом

можете сделать рабочий код?
0
 Аватар для OstapBender
594 / 532 / 76
Регистрация: 22.03.2011
Сообщений: 1,585
15.06.2012, 19:40
во ...
Миниатюры
Как правильно высчитать координаты  
1
Псевдослучайный
1946 / 1146 / 98
Регистрация: 13.09.2011
Сообщений: 3,215
15.06.2012, 19:42
Цитата Сообщение от Van111 Посмотреть сообщение
как это сделать
Нужно добавить к каждой координате переносную компоненту, то есть просто соответствующую координату точки, вокруг которой происходит вращение.
1
290 / 193 / 23
Регистрация: 03.08.2011
Сообщений: 2,824
Записей в блоге: 12
15.06.2012, 19:53  [ТС]
OstapBender, надо чтоб вращался по двум осям

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

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

Добавлено через 19 секунд
можете скинуть рабочие формулы или код?
0
Псевдослучайный
1946 / 1146 / 98
Регистрация: 13.09.2011
Сообщений: 3,215
15.06.2012, 19:53
Цитата Сообщение от Van111 Посмотреть сообщение
deltax+=posx;
deltay+=posy;
deltaz+=posz;
Да.
Но вообще стоит прислушаться к Остапу, он дело говорит(особенно, если в состоянии самостоятельно сформировать ровно одну матрицу для переноса и обоих поворотов).
1
290 / 193 / 23
Регистрация: 03.08.2011
Сообщений: 2,824
Записей в блоге: 12
15.06.2012, 19:56  [ТС]
NoMasters, мне надо не просто вращаться вокруг объекта а вращаться над определённой точкой вокруг кучи объектов
0
Псевдослучайный
1946 / 1146 / 98
Регистрация: 13.09.2011
Сообщений: 3,215
15.06.2012, 20:00
Van111, и как это влияет? Последовательность действий ровна та же, вращение всё равно происходит вокруг какой-то там одной точки.
0
290 / 193 / 23
Регистрация: 03.08.2011
Сообщений: 2,824
Записей в блоге: 12
15.06.2012, 20:01  [ТС]
Цитата Сообщение от NoMasters Посмотреть сообщение
Van111, и как это влияет? Последовательность действий ровна та же, вращение всё равно происходит вокруг какой-то там одной точки.
а после этого вращения мы сможем крутить объекты вокруг своей оси?
0
Псевдослучайный
1946 / 1146 / 98
Регистрация: 13.09.2011
Сообщений: 3,215
15.06.2012, 20:05
Цитата Сообщение от Van111 Посмотреть сообщение
а после этого вращения мы сможем крутить объекты вокруг своей оси?
glu делает ровно тоже самое.
1
290 / 193 / 23
Регистрация: 03.08.2011
Сообщений: 2,824
Записей в блоге: 12
16.06.2012, 12:49  [ТС]
вот получился такой бред ,что не так?
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);
0
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
inter-admin
Эксперт
29715 / 6470 / 2152
Регистрация: 06.03.2009
Сообщений: 28,500
Блог
16.06.2012, 12:49
Помогаю со студенческими работами здесь

Как правильно взять из класса координаты точек х и у
Имеется класс int kol_v=1; // количество созданных классов class vershina { public: int x,y; // координаты };

Как правильно привязать обработанные координаты к линии?
в таком виде все работает вроде нормально, но затыка в том что координаты линии не равны напрямую значениям в комбобоксах, а должны проити...

Как правильно задавать координаты кнопок в WPF
Когда я ставлю кнопки в WPF и при увеличении или даже при запуске приложения они меняют своё положение. Как правильно задавать...

График функции, как правильно поменять координаты
тут вот архив, не знаю как правильно координаты поменять..

Как правильно вычислять координаты элемента при перемещении?
Вообщем на экране простой блок див с размерами 100/100 px (квадрат). Нужно перемещать этот квадрат при клике на нём и удерживании кнопки...


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

Или воспользуйтесь поиском по форуму:
15
Ответ Создать тему
Новые блоги и статьи
http://iceja.net/ сервер решения полиномов
iceja 18.01.2026
Выкатила http:/ / iceja. net/ сервер решения полиномов (находит действительные корни полиномов методом Штурма). На сайте документация по API, но скажу прямо VPS слабенький и 200 000 полиномов. . .
Первый деплой
lagorue 16.01.2026
Не спеша развернул своё 1ое приложение в kubernetes. А дальше мне интересно создать 1фронтэнд приложения и 2 бэкэнд приложения развернуть 2 деплоя в кубере получится 2 сервиса и что-бы они. . .
Расчёт переходных процессов в цепи постоянного тока
igorrr37 16.01.2026
/ * Дана цепь постоянного тока с R, L, C, k(ключ), U, E, J. Программа составляет систему уравнений по 1 и 2 законам Кирхгофа, решает её и находит: токи, напряжения и их 1 и 2 производные при t = 0;. . .
Восстановить юзерскрипты Greasemonkey из бэкапа браузера
damix 15.01.2026
Если восстановить из бэкапа профиль Firefox после переустановки винды, то список юзерскриптов в Greasemonkey будет пустым. Но восстановить их можно так. Для этого понадобится консольная утилита. . .
Изучаю kubernetes
lagorue 13.01.2026
А пригодятся-ли мне знания kubernetes в России?
Сукцессия микоризы: основная теория в виде двух уравнений.
anaschu 11.01.2026
https:/ / rutube. ru/ video/ 7a537f578d808e67a3c6fd818a44a5c4/
WordPad для Windows 11
Jel 10.01.2026
WordPad для Windows 11 — это приложение, которое восстанавливает классический текстовый редактор WordPad в операционной системе Windows 11. После того как Microsoft исключила WordPad из. . .
Classic Notepad for Windows 11
Jel 10.01.2026
Old Classic Notepad for Windows 11 Приложение для Windows 11, позволяющее пользователям вернуть классическую версию текстового редактора «Блокнот» из Windows 10. Программа предоставляет более. . .
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2026, CyberForum.ru