Здравствуйте, уважаемые!
Пытаюсь сделать автоматические преследование (как в валкере), столкнулся с проблеммой: не могу рассчитать координаты, куда должен бежать ведомый (совсем забыл геометрию)
Быть может есть у кого готовый кусок кода, отвечающий за это?
Насколько я понял, сначала нужно высчитать угол наклона гипотенузы (от лидера к ведомому), зная длины катетов (разность между координатами).
Потом нужно высчитать длины катетов (разность координат между лидером и необходимой точкой), зная длину и угол наклона катета...
Кто хорошо помнит матчасть - помоги пожалуйста)
Заранее благодарен!
__________________
Если Вы недовольны моими действиями - то Вам сюда!
Если я не ошибаюсь в волкере ведомый получает координаты передвижения ведущего из пакета 01=MoveToLocation:d(ObjectID)d(DestX)d(DestY)d(Des tZ)d(CurX)d(CurY)d(CurZ) для t0
вообщето вопрос был по расчету.. а не как словить координаты.
углы катeтов.. гм...достаточно "процентального" коофициента.
кусок с моего бота:
delphi Код:
TL2SpawnObject = class(TL2Object)
x, y, z : real;
Procedure MoveTo(dist:real);
Function DistanceTo(dtox,dtoy,dtoz:integer):real;overload;
end;
function TL2SpawnObject.DistanceTo(dtox, dtoy, dtoz: integer): real;
begin
result := sqrt(sqr(dtox-x)+sqr(dtoy-y));
result := sqrt(sqr(result)+sqr(dtoz-z));
if result = 0then result := 0.1; //anti div 0end;
procedure TL2SpawnObject.MoveTo(dist: real);
var
coof : real;
runx, runy, runz : integer;
begin
coof := dist/DistanceTo(SelfData.x, SelfData.y, SelfData.z);
runx := round(X + coof*(SelfData.x - X));
runy := round(Y + coof*(SelfData.y - Y));
runz := round(z + coof*(SelfData.z - Z));
CallMoveBackwardToLocation(runx, runy, runz);
end;
где SelfData.x/y/z собственные координаты
L2SpawnObject.X/Y/Z координаты объекта к которому производиться движение
dist - требуемая дистанция до объекта. dist может принимать отрицательное значение если нужно забежать за объект
__________________
L2Ext - project closed.
Последний раз редактировалось alexteam, 28.11.2009 в 15:29.
За это сообщение alexteam нажился 2 спасибками от:
от ведущего брать кординаты из пакета ValidatePosition
от ведомого брать кординаты из пакета ValidatePosition
и ведомый отправляет MoveBackwardToLocation
WriteD(X от ведущего);
WriteD(Y от ведущего);
WriteD(Z от ведущего);
WriteD(X от ведомого);
WriteD(Y от ведомого);
WriteD(Z от ведомого);
__________________
Тут не форум гадалок, если ты делаешь все правильно и по пунктам - то все должно работать
TAMBIK, так можно ибез знания матчасти) до встречи с первым попавшимся ГМом... дело в том, что ведомый персонаж будет вставать ровно на позичию ведущего (как бы внутрь него)... даже для самого глупого и бухого ГМа будет налицо использование сторонних программ.
__________________
Если Вы недовольны моими действиями - то Вам сюда!
я думал конечно над условиями такими... но посчитал просчет вектора более правильным и реалистичным... если ни чего не получится - придётся делать условия...
PS: вопрос остаётся в силе )
__________________
Если Вы недовольны моими действиями - то Вам сюда!