Извините, ничего не найдено.

Не расстраивайся! Лучше выпей чайку!
Регистрация
Справка
Календарь

Вернуться   forum.boolean.name > Программирование в широком смысле слова > Алгоритмика

Алгоритмика Об алгоритмах вообще; методы, обсуждения способов решения

Ответ
 
Опции темы
Старый 06.08.2006, 18:37   #1
SubZer0
Администратор
 
Аватар для SubZer0
 
Регистрация: 03.09.2005
Сообщений: 2,408
Написано 301 полезных сообщений
(для 996 пользователей)
Радость Повороты

Блин... есть тут функция... на выдумку уходит минут 15, и поскольку она в себе ничего серьезного не несет, после того как выдумана и закодена - сразу забывается... но когда снова приходится такое писать опять получается стопр минут на 10-15... вот думаю где бы ее записать, так чтобы ее потом можно было в любое время посмотреть... и надумал напостить тут! (да и новичкам в программировании поможет)

Описание:

Функция поворота объекта на нужный угол по минимальному пути поворота...
Поподробнее... Допустим у нас есть танк, повернут на угол в 248 градусов (система 0-360)... теперь в программе нам надо его повернуть на угол в 54 градуса в какую сторону нам его поворачивать?

итак сама функция:

[highlight=java]if (Tank.Angle != Tank.TargetAngle) {
int T=Tank.Angle-Tank.TargetAngle;
if (T>0) {
if (T> {Tank.Angle=Tank.Angle+Tank.AngleSpeed;
} else {Tank.Angle=Tank.Angle-Tank.AngleSpeed;}
} else {
if (T>- {Tank.Angle=Tank.Angle+Tank.AngleSpeed;
} else {Tank.Angle=Tank.Angle-Tank.AngleSpeed;}
}
}[/highlight]

Написано для ЯвыМикроЭдишн... без участия математических функций... с юзанием аналога функции SGN() все это удобнее получается

Перевод на человеческий:

вычитаем целевой угол от текущего... если получается разница больше чем в 180 градусов, то этот путь длинный... а если разница получается отрицательная то чисто-наоборот...

__________________
Как минимум я помог многим (с)
(Offline)
 
Ответить с цитированием
Старый 06.08.2006, 19:14   #2
impersonalis
Зануда с интернетом
 
Аватар для impersonalis
 
Регистрация: 04.09.2005
Сообщений: 14,014
Написано 6,798 полезных сообщений
(для 20,935 пользователей)
Сообщение Re: Повороты

Как это можно сделать на B3D (если, конечно, не юзать готовую фунЕцию AlignToVector entity,vector_x#,vector_y#,vector_z#,axis[,rate#] или PointEntity entity,target[,roll#] ) в одну формулу (благодаря SGN)
[highlight=blitzbasic]
current_angle#=100
target_angle#=120
angle_speed#=1

;================
current_angle#=current_angle+Sgn(target_angle-current_angle)*angle_speed#
;================

DebugLog current_angle#
[/highlight]
Можно, кончено SGN и самому реализовать ( различными способами) но в случае Sub-а важна скорость выполнения - IF-ы рулят
__________________
http://nabatchikov.com
Мир нужно делать лучше и чище. Иначе, зачем мы живем? tormoz
А я растила сына на преданьях
о принцах, троллях, потайных свиданьях,
погонях, похищениях невест.
Да кто же знал, что сказка душу съест?
(Offline)
 
Ответить с цитированием
Старый 06.08.2006, 19:19   #3
SubZer0
Администратор
 
Аватар для SubZer0
 
Регистрация: 03.09.2005
Сообщений: 2,408
Написано 301 полезных сообщений
(для 996 пользователей)
Re: Повороты

угу! так оно и было...

гут что есть два варианта... начинающим теперь будет легче разобраться...
__________________
Как минимум я помог многим (с)
(Offline)
 
Ответить с цитированием
Старый 06.08.2006, 19:32   #4
impersonalis
Зануда с интернетом
 
Аватар для impersonalis
 
Регистрация: 04.09.2005
Сообщений: 14,014
Написано 6,798 полезных сообщений
(для 20,935 пользователей)
Re: Повороты

Для С++ целесообразно также юзать оператор
+=
__________________
http://nabatchikov.com
Мир нужно делать лучше и чище. Иначе, зачем мы живем? tormoz
А я растила сына на преданьях
о принцах, троллях, потайных свиданьях,
погонях, похищениях невест.
Да кто же знал, что сказка душу съест?
(Offline)
 
Ответить с цитированием
Ответ


Опции темы

Ваши права в разделе
Вы не можете создавать темы
Вы не можете отвечать на сообщения
Вы не можете прикреплять файлы
Вы не можете редактировать сообщения

BB коды Вкл.
Смайлы Вкл.
[IMG] код Вкл.
HTML код Выкл.

Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
как сделать плавные повороты Timon 3D-программирование 7 30.09.2006 13:34
Плавные повороты Guest 3D-программирование 8 08.04.2006 01:52


Часовой пояс GMT +4, время: 20:50.


vBulletin® Version 3.6.5.
Copyright ©2000 - 2024, Jelsoft Enterprises Ltd.
Перевод: zCarot
Style crйe par Allan - vBulletin-Ressources.com