Повороты
Блин... есть тут функция... на выдумку уходит минут 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>8) {Tank.Angle=Tank.Angle+Tank.AngleSpeed; } else {Tank.Angle=Tank.Angle-Tank.AngleSpeed;} } else { if (T>-8) {Tank.Angle=Tank.Angle+Tank.AngleSpeed; } else {Tank.Angle=Tank.Angle-Tank.AngleSpeed;} } }[/highlight] Написано для ЯвыМикроЭдишн... без участия математических функций... с юзанием аналога функции SGN() все это удобнее получается Перевод на человеческий: вычитаем целевой угол от текущего... если получается разница больше чем в 180 градусов, то этот путь длинный... а если разница получается отрицательная то чисто-наоборот... ;) |
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-ы рулят |
Re: Повороты
угу! так оно и было...
гут что есть два варианта... начинающим теперь будет легче разобраться... :) |
Re: Повороты
Для С++ целесообразно также юзать оператор
Код:
+= |
Часовой пояс GMT +4, время: 17:10. |
vBulletin® Version 3.6.5.
Copyright ©2000 - 2024, Jelsoft Enterprises Ltd.
Перевод: zCarot