Форум программистов
 

Восстановите пароль или Зарегистрируйтесь на форуме, о проблемах и с заказом рекламы пишите сюда - alarforum@yandex.ru, проверяйте папку спам!

Вернуться   Форум программистов > разработка игр, графический дизайн и моделирование > Gamedev - cоздание игр: Unity, OpenGL, DirectX
Регистрация

Восстановить пароль
Повторная активизация e-mail

Купить рекламу на форуме - 42 тыс руб за месяц

Ответ
 
Опции темы Поиск в этой теме
Старый 02.07.2009, 19:41   #1
KorDum
Пользователь
 
Аватар для KorDum
 
Регистрация: 27.06.2009
Сообщений: 35
По умолчанию Ограничение на поворот тела

И снова здравствуйте. Я хоть и сдал математику егэ на 5, но вот понял, что не могу составить простенькую формулу...
Дано: ноги и тело. Каждый объект имеет свою angle. Необходимо сделать так, чтобы тело никогда не поворачивалось левее, чем поворот ног + PI/3, и правее, чем поворот ног - PI/3. Вроде просто. Получилось вот такое:
Код:
if body.Angle > foots.Angle + PI/3 then body.Angle := foots.Angle + PI/3;
if body.Angle < foots.Angle - PI/3 then body.Angle := foots.Angle - PI/3;
Этот код корректно работает, когда поворот ног равен 0. Но вот когда он отличен от 0, поворот тела ведет себя странно, либо убегает вперед ограничений, либо не доходит до них и останавливается. Помогите, пожалуйста, вывести рабочую формулу
dum spiro, spero
Мой блог
KorDum вне форума Ответить с цитированием
Старый 03.07.2009, 13:56   #2
Kostia
Участник клуба
 
Аватар для Kostia
 
Регистрация: 21.11.2007
Сообщений: 1,690
По умолчанию

Тото и оно, ведь угол может быть и 200 и 300 радиан и угол тела может намного быть меньше угла ног. В добавок угол может резко переходить от 180 к -180 или от 360 к 0.
Я рекомендую использовать sin или cos уж они то точно не подведут, проверено.

Я делал модель планеты и хотел сделать так, чтобы с темной стороны на планету накладывалась ночная текстура. Так там нужно было учесть, что планета летит вокруг солнца + вращается вокруг своей оси, спас меня синус.
Kostia вне форума Ответить с цитированием
Старый 03.07.2009, 18:04   #3
KorDum
Пользователь
 
Аватар для KorDum
 
Регистрация: 27.06.2009
Сообщений: 35
По умолчанию

а пример использования можно посмотреть, пожалуйста?) Я в математике не шибко шарю)
dum spiro, spero
Мой блог
KorDum вне форума Ответить с цитированием
Старый 03.07.2009, 18:28   #4
Kostia
Участник клуба
 
Аватар для Kostia
 
Регистрация: 21.11.2007
Сообщений: 1,690
По умолчанию

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

Во, только что осенило. Нужно вычислить угол между прямыми ноги и тело.
Код:
function getangle(x1,y1,x2,y2: real):real;
begin
  getangle:=arccos(x1*x2+y1*y2);
end;
a:=getangle(cos(body.Angle),sin(body.Angle),cos(foots.Angle),sin(foots.Angle));
if a>=pi/3 then then a:=pi/3;
Примерно так, не проверял, писал сразу.

А вот и пример!
Вложения
Тип файла: rar 123.rar (4.2 Кб, 13 просмотров)

Последний раз редактировалось Kostia; 03.07.2009 в 19:04.
Kostia вне форума Ответить с цитированием
Старый 04.07.2009, 14:11   #5
KorDum
Пользователь
 
Аватар для KorDum
 
Регистрация: 27.06.2009
Сообщений: 35
По умолчанию

спасибо, буду разбираться)
dum spiro, spero
Мой блог
KorDum вне форума Ответить с цитированием
Старый 04.07.2009, 15:12   #6
Blade
Software Engineer
Участник клуба
 
Аватар для Blade
 
Регистрация: 07.04.2007
Сообщений: 1,618
По умолчанию

Цитата:
Сообщение от KorDum Посмотреть сообщение
Я хоть и сдал математику егэ на 5
Цитата:
Сообщение от KorDum Посмотреть сообщение
Я в математике не шибко шарю)
И этим все сказано
Ну и какое нам нафиг ЕГЭ?
Мужество есть лишь у тех, кто ощутил сердцем страх, кто смотрит в пропасть, но смотрит с гордостью в глазах. (с) Ария
Blade вне форума Ответить с цитированием
Старый 04.07.2009, 17:03   #7
KorDum
Пользователь
 
Аватар для KorDum
 
Регистрация: 27.06.2009
Сообщений: 35
По умолчанию

Вот так и знал, что найдется такой человек, который придерется к этому и обязательно это выскажет, хотя тема вообще о другом. Не сочтите за грубость)
dum spiro, spero
Мой блог
KorDum вне форума Ответить с цитированием
Старый 04.07.2009, 21:33   #8
DeKot
Участник клуба
 
Аватар для DeKot
 
Регистрация: 12.08.2008
Сообщений: 1,977
По умолчанию

"Мы все когда-то там учились, чему нибудь и как нибудь".
Программирование конкретных задач ( в частности игр) как раз и исправляет эту проблему.А экзамены,зачеты - это неизбежность, с которой многие уже смирились.
Не сочтите за ОФФТОП.Это в поддержку духа топстартика.
И не сомневайся даже ... отдых - кайф, работа - лажа!
DeKot вне форума Ответить с цитированием
Старый 05.07.2009, 15:56   #9
Blade
Software Engineer
Участник клуба
 
Аватар для Blade
 
Регистрация: 07.04.2007
Сообщений: 1,618
По умолчанию

Цитата:
Сообщение от KorDum Посмотреть сообщение
Вот так и знал, что найдется такой человек, который придерется к этому и обязательно это выскажет, хотя тема вообще о другом. Не сочтите за грубость)
Обязательно
Но я это "высказал" (а лучше сказать заметил) не для того, что бы вас как-то оскорбить, а для того, что бы было видно к чему идет наша система образования. У меня у самого в школе отлично было по математике, а в ВУЗе вот 2 года с ней проблемы... так что так.
З.Ы. Извиняюсь за оффтоп, но не создавать же специально тему для этого
Мужество есть лишь у тех, кто ощутил сердцем страх, кто смотрит в пропасть, но смотрит с гордостью в глазах. (с) Ария
Blade вне форума Ответить с цитированием
Ответ


Купить рекламу на форуме - 42 тыс руб за месяц



Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Движение тела под углом Lemo Помощь студентам 6 05.04.2009 14:49
Помогите пожалуйста решить задачу с вращением объёмного тела! (Турбо Паскаль) mens-evgenij Помощь студентам 10 12.03.2009 18:07
извлечение из своего тела exe файла Titan123 Общие вопросы Delphi 4 22.10.2008 19:17
движение вокруг тела по заданной траектории PADOCTb Помощь студентам 2 12.10.2008 16:39
Распознавание тела письма при получении iamur Работа с сетью в Delphi 1 11.02.2008 17:33