Форум программистов, компьютерный форум, киберфорум
Наши страницы
OpenGL
Войти
Регистрация
Восстановить пароль
 
 
Рейтинг 4.90/10: Рейтинг темы: голосов - 10, средняя оценка - 4.90
Xtir
13 / 13 / 4
Регистрация: 10.07.2010
Сообщений: 130
1

Синусы и косинусы

24.11.2011, 20:17. Просмотров 1879. Ответов 20
Метки нет (Все метки)

Пытаюсь прицепить объект к другому объекту, в данном случае контейнер к кораблю. Вроде бы делаю всё правильно, всякие разные варианты формул перепробовал, ничто не помогает. Делаю вот так:
C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
void CShip::Draw()
{
    glPushMatrix();
    glTranslated(px,py,pz);
    glRotated(dir,0,0,1);
    glColor3d(1,1,1);
    glBegin (GL_TRIANGLES);
        //здесь рисую корабль
    glEnd ();
    glPopMatrix();
 
    for(i = 0; i < cont.size(); ++i)
    {
        cont[i].px = px+(2*sin((dir)+30)); //нужна правильная формула :(
        cont[i].py = py+(2*cos((dir)+30)); //нужна правильная формула :(
        cont[i].dir = dir; 
        cont[i].Draw(); //рисую контейнер
    }
как правильно сделать что бы контейнер ровно стоял на корабле, во время его движения?
0
Similar
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
24.11.2011, 20:17
Ответы с готовыми решениями:

Косинусы и синусы
Помогите, пожалуйста, решить надо через теоремы синуса и косинуса. Заранее огромное спасибо:help:

Синусы и косинусы
Помогите, пожалуйста, решить надо через теоремы синуса и косинуса. Заранее огромное спасибо!

Синусы и косинусы
Помогите, пожалуйста, решить надо через теоремы синуса и косинуса. Заранее огромное спасибо!

Синусы и косинусы
Помогите, пожалуйста. Найдите sinα , если cosα = 0,6 и π &lt;α &lt;2π.

Синусы, косинусы
Написать программу решения следующей задачи: Из величин, определяемых выражениями A=sin(x),...

20
yamilramilev
267 / 258 / 47
Регистрация: 08.10.2009
Сообщений: 554
24.11.2011, 22:50 2
Если используешь синусы косинусы, то надо считать в радианах, а не градусах. т.е. sin( ( (dir)+30)*Pi/180)

Не по теме:

остальной код не разбирал

1
Xtir
13 / 13 / 4
Регистрация: 10.07.2010
Сообщений: 130
25.11.2011, 00:16  [ТС] 3
ну вроде разобрался...
вот так должна выглядить формула:
C++
1
2
cont[i].px = px+(10*sin((dir*3.14/180)+10));
cont[i].py = py-(10*cos((dir*3.14/180)+10));
но теперь возникает другая проблема )))
допустим устанавливаю контейнер относительно корабля, если угол поворота корабля = 0:
C++
1
2
cont.px = ship.px+10//+ левее, - правее
cont.py = ship.py+10//+ вперёд, - назад
и как же теперь с помощью вышеописанных формул, оставить этот контейнер на этих же координатах относительно корабля, если вдруг он начнёт двигаться? сам тоже буду пробовать, но с математикой в школе не очень дружил ))

Добавлено через 14 минут
тока всё равно как-то криво работает
0
AncinetHero
49 / 49 / 12
Регистрация: 22.05.2011
Сообщений: 326
25.11.2011, 00:24 4
Ничего не понял..

Разве что последний вопрос. Если координаты корабля будут изменятся изменяйте координаты контейнера вместе с кораблем одновременно! Легче сделать массив в котором будут хранится данные о каждом предмете, и изменять все координаты сразу.

Не по теме:

Математика тут вообще не причем, это логика наверное :D

0
Xtir
13 / 13 / 4
Регистрация: 10.07.2010
Сообщений: 130
25.11.2011, 00:37  [ТС] 5
не ну, изменять координаты это несложно, если корабль будет плыть тупо прямо при 0, 90, 180 или 270 градусов, а вот если он будет поворачиваться... то тут уже немного сложнее, поэтому и нужны "синусы и косинусы", а тут фигня какая-то...
Код
 cont[i].px = px+(Y*sin((dir*3.14/180)+X));
если изменяю Y, то контейнер нормально устанавливается по координатам Y. Если начинаю изменять Х, то уже что-то не то, контейнер как будто куда-то по кругу начинает носить

в принципе его можно установить так что бы он там и оставался во время движения/поворотов корабля, но как его установить туда куда мне надо... просто подгонять что ли?
0
AncinetHero
49 / 49 / 12
Регистрация: 22.05.2011
Сообщений: 326
25.11.2011, 00:50 6
Читайте мой пост...
0
Xtir
13 / 13 / 4
Регистрация: 10.07.2010
Сообщений: 130
25.11.2011, 01:02  [ТС] 7
про массив не понял, ты имеешь ввиду массив контейнеров? так он же есть у меня )))
0
Xtir
13 / 13 / 4
Регистрация: 10.07.2010
Сообщений: 130
25.11.2011, 01:34  [ТС] 8
может понятнее будет
скрин 1: корабль: x = 0, y = 0, dir = 0; контейнер: x = 7.05, y = -43.56;
скрин 2: корабль: x = 0, y = 0, dir = 25; контейнер: x = 7.05, y = -43.56;
Вопрос: как сделать так что бы контейнеры оставались на своих местах во время поворота корабля?
0
Миниатюры
Синусы и косинусы   Синусы и косинусы  
Xtir
13 / 13 / 4
Регистрация: 10.07.2010
Сообщений: 130
25.11.2011, 20:15  [ТС] 9
разобрался, вот так работает:
C++
1
2
cont[i].px = (px-(-43.56*sin(dir*3.14/180))) + (px+(7.05*sin((dir+90)*3.14/180)));
cont[i].py = (py+(-43.56*cos(dir*3.14/180))) + (px-(7.05*cos((dir+90)*3.14/180)));
0
AncinetHero
49 / 49 / 12
Регистрация: 22.05.2011
Сообщений: 326
26.11.2011, 08:36 10
Все равно все как-то запутанно. Не легче ли при нажатии какой то клавиши изменять переменную "угол", и потом при прорисовке использовать glTranslate ?
0
Xtir
13 / 13 / 4
Регистрация: 10.07.2010
Сообщений: 130
26.11.2011, 08:46  [ТС] 11
может быть и легче, но потом вычислять мировые координаты мне кажется будет геморойнее
0
AncinetHero
49 / 49 / 12
Регистрация: 22.05.2011
Сообщений: 326
26.11.2011, 12:27 12
Цитата Сообщение от AncinetHero Посмотреть сообщение
Все равно все как-то запутанно. Не легче ли при нажатии какой то клавиши изменять переменную "угол", и потом при прорисовке использовать glTranslate ?
Ой, не подумал даже, что написал
glRotate там.

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

При нажатии клавиши увеличивать угол у каждого предмета на корабле и у корабля, конечно.

Кажется я понял что вы имели в виду.
А разве у вас координат корабля нет? Есть, и коробки есть тоже.
0
Xtir
13 / 13 / 4
Регистрация: 10.07.2010
Сообщений: 130
26.11.2011, 18:31  [ТС] 13
мне кажется вы немного не понимаете )))
что во время поворота (не движения) корабля, у коробок нужно изменить не только угол поворота, но и их координаты, тогда как у корабля координаты остаются прежними )
0
AncinetHero
49 / 49 / 12
Регистрация: 22.05.2011
Сообщений: 326
26.11.2011, 19:52 14
Не нужно менять координаты, зачем О_о

То есть вы хотите сказать если вы сядете на стул который крутится и начнете крутить стул, ваши координаты изменятся?) Глупость, пересмотрите вашу программу, если вы меняете координаты

А может вы просто не знакомы с функцией glRotatef: она поворачивает предмет вокруг заданной оси ( ОХ и\или ОУ и\или OZ ) на заданный угол.
0
Xtir
13 / 13 / 4
Регистрация: 10.07.2010
Сообщений: 130
26.11.2011, 21:44  [ТС] 15
Цитата Сообщение от AncinetHero Посмотреть сообщение
То есть вы хотите сказать если вы сядете на стул который крутится и начнете крутить стул, ваши координаты изменятся?) Глупость, пересмотрите вашу программу, если вы меняете координаты
ну вы сравнили, стул с кораблём я то сижу в центре стула, а контейнеры по всему кораблю раставлены, а не тока в центре ))))
Цитата Сообщение от AncinetHero Посмотреть сообщение
А может вы просто не знакомы с функцией glRotatef: она поворачивает предмет вокруг заданной оси ( ОХ и\или ОУ и\или OZ ) на заданный угол.
мы знакомы с такой функцией ))) а ещё она поворачивает предмет вокруг своей оси, а не вокруг предмета которого мне надо )))
0
AncinetHero
49 / 49 / 12
Регистрация: 22.05.2011
Сообщений: 326
26.11.2011, 22:09 16
Цитата Сообщение от Xtir Посмотреть сообщение
ну вы сравнили, стул с кораблём я то сижу в центре стула, а контейнеры по всему кораблю раставлены, а не тока в центре ))))
Ну и что? Так и быть, вот пример (пишу на форуме, могут быть ошибки):

C++
1
2
3
4
5
6
7
8
9
10
11
12
13
const int N=100;
float Coords[N][8]; //пусть это массив наших данных, N взял произвольное
 
void Draw(int n){ //допустим у нас есть процедура, которая по заданному n, прорисовывает n кубов с заданными параметрами, которые хранятся в массиве
 
for(int i=1;i<=n;i++){
 glLoadIdentity();
 glutWireCube(Coords[i][0]);
 glTranslatef(Coords[i][1],Coords[i][2],Coords[i][3]);
 glRotatef(Coords[i][4],bool(Coords[i][5]),bool(Coords[i][6]),bool(Coords[i][7]));
}
 
}
И при повороте вы просто делаете
C++
1
for(int i=1;i<=N;i++)Coords[i][4]++;
Почему так же само не нарисовать ваш корабль (да, корабль отдельно), а потом коробки?
Что-то вы путаете...
0
Xtir
13 / 13 / 4
Регистрация: 10.07.2010
Сообщений: 130
26.11.2011, 22:25  [ТС] 17
Ну это я так понимаю, вы мне предлагаете рисовать контейнеры в одной матрице с кораблём, так? Если так, то да, высчитывать координаты лишнее, да и... угол поворота тоже, кстати.
Но меня такой способ не устраивает
0
AncinetHero
49 / 49 / 12
Регистрация: 22.05.2011
Сообщений: 326
26.11.2011, 22:41 18
Цитата Сообщение от Xtir Посмотреть сообщение
Но меня такой способ не устраивает
Так бы и сказали, но такой способ осуществим, тоже.
0
Xtir
13 / 13 / 4
Регистрация: 10.07.2010
Сообщений: 130
26.11.2011, 22:50  [ТС] 19
Цитата Сообщение от AncinetHero Посмотреть сообщение
Так бы и сказали, но такой способ осуществим, тоже.
так у нас в коде так и написано:
C++
1
2
3
4
glPushMatrix();
//корабль
glPopMatrix();
//контейнеры


Мне это надо для того, что бы, когда я краном буду брать/ставить эти контейнеры, не искать их координаты.
0
HunterTechno
19 / 19 / 7
Регистрация: 17.10.2008
Сообщений: 97
27.11.2011, 20:37 20
У вас, батенька, перестройка идет перед новой рисовалкой, а надобно, как мне кажется, после. Во всяком случае, работая с камерой, мне неоднократно приходилось наблюдать ваш баг...
0
27.11.2011, 20:37
MoreAnswers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
27.11.2011, 20:37

Косинусы и синусы в Паскале
В общем задали написать код этого примера в Паскале. Кто сможет, выручите:) Не представляю как это...

Уравнение. Синусы и косинусы от 4^(x)
вот собственно само задание \frac{\sin{4^{x+1}}}{\sin{4^{x}}\cdot\cos{4^{x}}}=1 помогите...

Задача на синусы и косинусы
Добрый день, вот уже второй день бьюсь над заданием, помогите пожалуйста. Сам пример внизу. Юзер...


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

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

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