Показать сообщение отдельно
Старый 23.02.2007, 16:09   #1
Phoenix
Оператор ЭВМ
 
Регистрация: 31.12.2006
Сообщений: 41
Написано 0 полезных сообщений
(для 0 пользователей)
Формулы виграх

пишу я на Дарк бейсике , но формулы беруться практически одни и теже ..
Я вот тут застрял , хочу написать игрушку в стиле "кримслонда" даже нашёл формулу на Дельфи


Нахождение угла между осью OY и точкой
  • x1,y1 - координаты, допустим, курсора мыши.
  • x2,y2 - координаты точки относительно которой нужно найти угол (например координаты игрока в Crimsonland).
  • На выходе получаем угол в градусах.
function getAng(x1, y1, x2, y2: integer): double;
var
hyp, kat1, kat2: single;
begin
hyp := sqrt(sqr(y1 - y2) + sqr(x1 - x2)); //посчитаем гипотенузу
kat1 := x2 - x1; //посчитаем катет 1
kat2 := y1 - y2; //посчитаем катет 2
if kat2 >= 0 then
begin
if hyp <> 0 then result := radtodeg(arcsin(kat1 / hyp)) //чтобы избежать деления на 0
end
else
if hyp <> 0 then result := 180 - radtodeg(arcsin(kat1 / hyp)); //чтобы избежать деления на 0
if result > 90 then result := result - 90 else result := 270 + result; //Смещаем начало круга на 90 градусов (поскольку
//не совпадает со стандатной системой)
end;

Вроди бы немного принцип понял , но переведя код в бейсик , работает как попало , что здесь может быть не так , помогите

Вот мой код бейсика......
x=100
y=120
aaa:

cls
set cursor 8,8 : print "Угол ",res#

mx=mousex()
my=mousey()
hyp# = sqrt(sqrt(my-y)+sqrt(mx-x))
kat1# = x-mx
kat2# = my-y
if kat2# >= 0 then if hyp# <> 0 then res# =(asin(kat1#/hyp#))*180/3.14: goto bbb:
if hyp# <> 0 then res# = 180 - (asin(kat1#/hyp#))*180/3.14
bbb:
if res# > 90 then res# = res# - 90
if res# < 90 then res# = 270 + res#
goto aaa


Буду очень благодарен за помощ
(Offline)
 
Ответить с цитированием