forum.boolean.name

forum.boolean.name (http://forum.boolean.name/index.php)
-   Математика (http://forum.boolean.name/forumdisplay.php?f=85)
-   -   Формулы виграх (http://forum.boolean.name/showthread.php?t=2784)

Phoenix 23.02.2007 16:09

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


Нахождение угла между осью 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


Буду очень благодарен за помощ :SOS:

HolyDel 23.02.2007 16:23

Re: Формулы виграх
 
а функции арктангенса в ДБ нет?

Phoenix 23.02.2007 16:41

Re: Формулы виграх
 
есть !
ATAN()
Эта команда возвращает арктангенс числа. Возвращаемое значение является вещественным числом.

alcoSHoLiK 23.02.2007 17:46

Re: Формулы виграх
 
Вложений: 2
На рисунке показано, как найти угол между двумя точками - A и C. Для этого строим воображаемый прямоугольный треугольник. Определяемся, какой угол нам нужно найти - альфа или бета.

Зная координаты точек A и C, мы можем найти стороны треугольника AB и BC. Затем, чтобы найти угол альфа, нужно взять арктангенс от выражения
Код:

BC / AB
Для угла бета соответственно
Код:

AB / BC

Phoenix 23.02.2007 18:55

Re: Формулы виграх
 
Цитата:

Сообщение от alcoSHoLiK
На рисунке показано, как найти угол между двумя точками - A и C. Для этого строим воображаемый прямоугольный треугольник. Определяемся, какой угол нам нужно найти - альфа или бета.

Огромное спасибо за понятие как оно должно работать , но хотелось бы разобраться в своём коде на бейсике , в алгебре я не селён и знаю что многое потерял , со временем наверстаю если апокалипсис не настанет >>:(

moka 24.02.2007 00:01

Re: Формулы виграх
 
Да нужно было мне тоже однажды найти такую формулу. Нашёл. =)
Но: она находит угол из 2 значений nx и ny. Тоесть у меня была стрела, которая двигалась в определённом направлении, и зная на сколько она сдвигалась каждый цикл, или промежуток времени, я вычислял угол:

[blitz]If ny>0
tmp=90
Else
tmp=270
EndIf
Angle=tmp+ATan(nx/ny)[/blitz]
Надеюсь без ошибок, там было или nx/ny или ny/nx. Ну сам посмотришь.

Тарас Шевченко 24.02.2007 00:16

Re: Формулы виграх
 
Phoenix а тебе не кажется, что это мягко не для дарка раздел.

Phoenix 24.02.2007 13:50

Re: Формулы в играх
 
Цитата:

Сообщение от Тарас Шевченко
Phoenix а тебе не кажется, что это мягко не для дарка раздел.

Blitz и DarkBasic по кодингу почти одинаковы , да и вообще как ты заметитл выше приведённые примеры были написаны на паскале ... В этой теме имеется формула , и неважно в какой язык ты её переведёшь , переведи в Блитз , мне даже легше разобраться будет .. конечно если помочь хочешь....
Реально я заметил что есть раздел для формул , но заметил я это пожже , если админ или модератор перенесут тему , буду только блогодарен.

Цитата:

MoKaДа нужно было мне тоже однажды найти такую формулу. Нашёл. =)
Но: она находит угол из 2 значений nx и ny. Тоесть у меня была стрела, которая двигалась в определённом направлении, и зная на сколько она сдвигалась каждый цикл, или промежуток времени, я вычислял угол:

Код If ny>0
tmp=90
Else
tmp=270
EndIf
Angle=tmp+ATan(nx/ny)


Надеюсь без ошибок, там было или nx/ny или ny/nx. Ну сам посмотришь.
Спасибо , щас гляну , пожже отпишусь...


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

vBulletin® Version 3.6.5.
Copyright ©2000 - 2024, Jelsoft Enterprises Ltd.
Перевод: zCarot