![]() |
| ||
|
|
Новости |
Поиск |
FAQ |
Статьи |
Книги |
Новости VCL
| | Форумы ЧАТ |
Орешник |
|
| |||
| |||
« предыдущая ветвь | форум | следующая ветвь »
Поворот спрайта в сторону курсора (DelphiX) [Delphi, Windows]
KOT_BEGEMOT © (2005-09-19 23:07:00)Мне надо чтоб спрайт повернулся в сторону курсора... Я видел много исходников, но все они неточные, тоесть спрайт бывает смотрит левее указателя или правее... А мне бы точную формулу... Есть х, у курсора и х, у спрайта ПЛИЗ ПОМОГИТЕ!
OSokin (2005-10-09 11:20:00) [1]А я его изучал? Нет еще. Значит буду пользоваться тем, что знаю.
A22 (2005-10-04 12:23:00) [2]я все никак не пойму, чем плох арктангенс? вышел из моды?..
OSokin (2005-10-03 19:38:00) [3]Линк не дам - не вышел еще выпуск. Ответ считается в градусах, PiDiv2 - это заморочки с переводом. Вместо этого можно использовать RadToDeg
Zer0 (2005-10-01 17:55:00) [4][30] OSokin ©
принимать апстенуголовой наружно до просветления
Servelat (2005-10-01 13:14:00) [5]2 Осокин
А где линк на статью? Не особо понятно, в чем выдается ответ (видимо в количествах пи-пололам поместившихся в нужном угле)?
Вообще ИМХО лучше арктангенс юзать, там тебе не надо лишних рассчетов производить, оба катета известны (X и Y), а так твое Sqrt((X * X + Y * Y)) вычисляется довольно долго.
oO (2005-09-29 20:10:00) [6]> OSokin © (29.09.05 18:35) [30]
божественно!
OSokin (2005-09-29 18:36:00) [7]Это из моей новой статьи. Переодически отправляю на исходники.ру
OSokin (2005-09-29 18:35:00) [8]function GetAngle(X, Y: Real): Real;
begin
GetAngle := -(ArcSin(X / Sqrt((X * X + Y * Y))))) / PiDiv2;
end;
Следует отметить, что точка должна находиться относительно центра координат в (0;0). Таким образом, для получения угла между точками нужно подставить значения X-X0, Y-Y0.
Петр (2005-09-26 01:33:00) [9]блин ну неужели всё так сложно..
это ж геометрия из начальной школы..
я так понимаю что для поворота спрайта в DelphiX используется угол из 256 градусов :) Ну вот, вычисляешь угол, запоминаешь его в какую-нибудь переменную типа Double например. преобразовываешь к byte, запоминаешь в другую переменную.
для перемещения используешь вещественную, для поворота - типа byte.
и усё!
KOT_BEGEMOT (2005-09-26 01:22:00) [10]АП! )))
KOT_BEGEMOT (2005-09-24 00:38:00) [11]П7, мож мне на мыло исходник кинуть если есть?
KOT_BEGEMOT (2005-09-24 00:20:00) [12]
> Как вариант хранить single-угол и byte-угол. Расчёты вести
> по первому, а рисовать по второму!
эта как?
П7 (2005-09-24 00:02:00) [13]Ещё бы он точно летел, при целомзначении угла, да ещё и урезанном до 256 значений.
Как вариант хранить single-угол и byte-угол. Расчёты вести по первому, а рисовать по второму!
KOT_BEGEMOT (2005-09-23 21:36:00) [14]>Может, недостаточно точно вычисляется угол. Может попробовать >запоминать точку назначения для твоего спрайта и рассчитывать угол >заново на каждом шаге?
а это, кстати, идея! нада попробовать
ПЁС_ПЫЛЕСОС (2005-09-23 21:00:00) [15]
> но пробовал все примеры, все работают, но там спрайт по-
> прежнему не точно летит(((((((
Может, недостаточно точно вычисляется угол. Может попробовать запоминать точку назначения для твоего спрайта и рассчитывать угол заново на каждом шаге?
KOT_BEGEMOT (2005-09-23 19:39:00) [16]2 Zer0
очень хочу! Знал бы ты как хочу!
но пробовал все примеры, все работают, но там спрайт по-прежнему не точно летит(((((((
скиньте плиз кто-то исходник на:
iradchenko@bigmir.net
Zer0 (2005-09-23 19:09:00) [17]типа сам разобраться не хочешь?
KOT_BEGEMOT (2005-09-23 08:09:00) [18]Плиз, дайте свое мыло, я скину исходник, может кто-то что-то исправит
KOT_BEGEMOT (2005-09-22 22:58:00) [19]Все равно летит по-разному. Все примеры пробовал. Все работали, но спрайт летел не точно в ту сторону куда надо((( постоянно косил то вправо, то влево(((((
KOT_BEGEMOT (2005-09-21 16:09:00) [20]А чтоб спрайт двигался к курсору пойдет такая формула?:
gox:=3*cos((angle+64)*pi/128);
goy:=3*sin((angle+64)*pi/128);
x:=x+gox;
y:=y+goy;