|
Математика Методы математического моделлирования, программирование математических концепций, роль математики в создании игр |
23.02.2007, 16:09
|
#1
|
Оператор ЭВМ
Регистрация: 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)
|
|
23.02.2007, 16:23
|
#2
|
☭
Регистрация: 26.09.2006
Сообщений: 6,035
Написано 1,474 полезных сообщений (для 2,707 пользователей)
|
Re: Формулы виграх
а функции арктангенса в ДБ нет?
|
(Offline)
|
|
23.02.2007, 16:41
|
#3
|
Оператор ЭВМ
Регистрация: 31.12.2006
Сообщений: 41
Написано 0 полезных сообщений (для 0 пользователей)
|
Re: Формулы виграх
есть !
ATAN()
Эта команда возвращает арктангенс числа. Возвращаемое значение является вещественным числом.
|
(Offline)
|
|
23.02.2007, 17:46
|
#4
|
Дэвелопер
Регистрация: 17.01.2006
Сообщений: 1,512
Написано 78 полезных сообщений (для 110 пользователей)
|
Re: Формулы виграх
На рисунке показано, как найти угол между двумя точками - A и C. Для этого строим воображаемый прямоугольный треугольник. Определяемся, какой угол нам нужно найти - альфа или бета.
Зная координаты точек A и C, мы можем найти стороны треугольника AB и BC. Затем, чтобы найти угол альфа, нужно взять арктангенс от выражения
Для угла бета соответственно
|
(Offline)
|
|
23.02.2007, 18:55
|
#5
|
Оператор ЭВМ
Регистрация: 31.12.2006
Сообщений: 41
Написано 0 полезных сообщений (для 0 пользователей)
|
Re: Формулы виграх
Сообщение от alcoSHoLiK
На рисунке показано, как найти угол между двумя точками - A и C. Для этого строим воображаемый прямоугольный треугольник. Определяемся, какой угол нам нужно найти - альфа или бета.
|
Огромное спасибо за понятие как оно должно работать , но хотелось бы разобраться в своём коде на бейсике , в алгебре я не селён и знаю что многое потерял , со временем наверстаю если апокалипсис не настанет
|
(Offline)
|
|
24.02.2007, 00:01
|
#6
|
.
Регистрация: 05.08.2006
Сообщений: 10,429
Написано 3,454 полезных сообщений (для 6,863 пользователей)
|
Re: Формулы виграх
Да нужно было мне тоже однажды найти такую формулу. Нашёл. =)
Но: она находит угол из 2 значений nx и ny. Тоесть у меня была стрела, которая двигалась в определённом направлении, и зная на сколько она сдвигалась каждый цикл, или промежуток времени, я вычислял угол:
[blitz]If ny>0
tmp=90
Else
tmp=270
EndIf
Angle=tmp+ATan(nx/ny)[/blitz]
Надеюсь без ошибок, там было или nx/ny или ny/nx. Ну сам посмотришь.
|
(Offline)
|
|
24.02.2007, 00:16
|
#7
|
Знающий
Регистрация: 17.08.2006
Сообщений: 246
Написано 0 полезных сообщений (для 0 пользователей)
|
Re: Формулы виграх
Phoenix а тебе не кажется, что это мягко не для дарка раздел.
|
(Offline)
|
|
24.02.2007, 13:50
|
#8
|
Оператор ЭВМ
Регистрация: 31.12.2006
Сообщений: 41
Написано 0 полезных сообщений (для 0 пользователей)
|
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. Ну сам посмотришь.
|
Спасибо , щас гляну , пожже отпишусь...
|
(Offline)
|
|
Ваши права в разделе
|
Вы не можете создавать темы
Вы не можете отвечать на сообщения
Вы не можете прикреплять файлы
Вы не можете редактировать сообщения
HTML код Выкл.
|
|
|
Часовой пояс GMT +4, время: 11:33.
|