[Статья]Jass поляризация - Форум


Правила форума ·

  • Страница 1 из 1
  • 1
Форум » Warcraft III » Библиотека » [Статья]Jass поляризация (полярки и кое-что от меня)
[Статья]Jass поляризация

H_A_PK

#1
-Я был на форуме мне сказали: "юзай полярки!". Что это? Да да, сейчас я всё для вас разжую.
Плярка "PolarProjectionsBJ" in jass. Поглядим , что внутри этой функции.
[jass]
functions PolarProjectionsBJ takes location loc, real a, real deegres returns location
local real x = GetLocationX(loc) + a * CosBJ(deegres)
local real y = GetLocationX(loc) + a * SinBJ(deegres)
local location loc = Location(x,y)
return loc
endfunction[/jass]

А вообще по хорошему всё должно быть так:
[jass]

globals
location Nloc = Location(0,0)
endglobals

functions PolarProjections takes location loc, real a, real deegres returns location
local real xl = GetLocationX(loc)
local real yl = GetLocationY(loc)
local real x = xl + a * Cos(.0174532*deegres)
local real y = yl + a * Sin(.0174532*deegres)
call MoveLocation(Nloc,x,y)
return Nloc
endfunction[/jass]
Функция изначально предназначена для нахождения точки на окружности, а точнее , это элементарное тождество косинуса и синуса.
Нарисуем круг, точка loc есть центр круга , число a есть радиус , а deegres угол.

Да, выглядит это так. Формула:

[jass]
x + r * CosA
у + r * SinA[/jass]

в эту формулу ведено всего две плоскости х и у и один угла пусть для нас он будет "поворот" .
Я придумал формулу на три плоскости включая два поворота "поворот" и "угл атаки", то есть точка уже будет на шаре, а не круге.
[jass]

x + (r*CosB) * CosA
y + (r*SinB) * CosA
z + r * SinA[/jass]

Да, точка включает теперь "угл атаки" (если не знаете , что это, то создайте камеру и посмотрите там), то есть вводить предётся два угла. Уже этой формулой можно найти любую точку на шаре.
Выглядит рисунок по подобной формуле так:

То есть шар создать из юнитов или молний теперь рас плюнуть. А если вы будете вращать по этой формуле ?
Плоскость Z будет не красиво ходить разнообразно;), чтоб наше вращение выглядело как орбита юпитера, нужно вводить третий угл "крен". Но увы я такую формулу только разрабатываю , ждите обновлений =)
Ползут 2 пирожка.
Первый: Я тебя щас трахну.
Второй: Почему?
Первый: Потому что я с яйцами :D

SunCreep

#2
Quote (H_A_PK)
То есть шар создать из юнитов или молний теперь рас плюнуть.

То бишь благодаря этой формуле,что ты вывел,можно создать трехмерную фигуру,вернее пока что только шар.
Если так,то это стоит запомнить.Вопрос наверно не очень адекватный,но если речь идёт о шаре,вывести формулу для куба сможешь?

H_A_PK

#3
SunCreep, Дело в том, что в шар можно вписать любую фигуру, т.е. эта формула уже произвольная ;)От неё и квадрат и пирамида и т.д.



[jass]
globals
array lightning udg_l
array real udg_x
array real udg_y
array real udg_z
real udg_an
string udg_s
endglobals

function act takes nothing returns nothing

local integer i = 0
local real a = 275
local real r = 0
local integer an = 0
local integer an2 = 0
local real atan = 0
local real znull = (a/Sin(45*.0174532))-a
local real xc = 0
local real yc = 0
local real zc = a + znull

if udg_s == "ball" then

loop
exitwhen an == 360
set an2 = 0
loop
exitwhen an2 == 360
set udg_x[i] = xc + (a*Cos(.0174532*an))*Cos(.0174532*an2)
set udg_y[i] = yc + (a*Cos(.0174532*an))*Sin(.0174532*an2)
set udg_z[i] = zc + a * Sin(.0174532*an)

set atan = bj_RADTODEG * Atan2(udg_y[i]-yc, udg_z[i]-zc)
set r = SquareRoot(((a*a)-Pow(SquareRoot((xc-udg_x[i])*(xc-udg_x[i])),2)))
set udg_y[i] = yc + r * Cos(.0174532 * (udg_an+atan))
set udg_z[i] = zc + r * Sin(.0174532 * (udg_an+atan))

set i = i + 1
set an2 = an2 + 36
endloop
set an = an + 36
endloop

set i = 0

loop
exitwhen i==110

call MoveLightningEx(udg_l[i],true,udg_x[i],udg_y[i],udg_z[i],udg_x[i+1],udg_y[i+1],udg_z[i+1])
call MoveLightningEx(udg_l[i+1],true,udg_x[i+1],udg_y[i+1],udg_z[i+1],udg_x[i+2],udg_y[i+2],udg_z[i+2])
call MoveLightningEx(udg_l[i+2],true,udg_x[i+2],udg_y[i+2],udg_z[i+2],udg_x[i+3],udg_y[i+3],udg_z[i+3])
call MoveLightningEx(udg_l[i+3],true,udg_x[i+3],udg_y[i+3],udg_z[i+3],udg_x[i+4],udg_y[i+4],udg_z[i+4])
call MoveLightningEx(udg_l[i+4],true,udg_x[i+4],udg_y[i+4],udg_z[i+4],udg_x[i+5],udg_y[i+5],udg_z[i+5])
call MoveLightningEx(udg_l[i+5],true,udg_x[i+5],udg_y[i+5],udg_z[i+5],udg_x[i+6],udg_y[i+6],udg_z[i+6])
call MoveLightningEx(udg_l[i+6],true,udg_x[i+6],udg_y[i+6],udg_z[i+6],udg_x[i+7],udg_y[i+7],udg_z[i+7])
call MoveLightningEx(udg_l[i+7],true,udg_x[i+7],udg_y[i+7],udg_z[i+7],udg_x[i+8],udg_y[i+8],udg_z[i+8])
call MoveLightningEx(udg_l[i+8],true,udg_x[i+8],udg_y[i+8],udg_z[i+8],udg_x[i+9],udg_y[i+9],udg_z[i+9])
call MoveLightningEx(udg_l[i+9],true,udg_x[i+9],udg_y[i+9],udg_z[i+9],udg_x[i],udg_y[i],udg_z[i])

set i = i + 10
endloop

set i = 0
loop
exitwhen i >= 90
call MoveLightningEx(udg_l[i+100],true,udg_x[i],udg_y[i],udg_z[i],udg_x[i+10],udg_y[i+10],udg_z[i+10])
set i = i + 1
endloop

endif

if udg_s == "Cube" then

set udg_x[0] = xc + a
set udg_y[0] = yc + a
set udg_z[0] = znull

set udg_x[1] = xc + a
set udg_y[1] = yc - a
set udg_z[1] = znull

set udg_x[2] = xc - a
set udg_y[2] = yc - a
set udg_z[2] = znull

set udg_x[3] = xc - a
set udg_y[3] = yc + a
set udg_z[3] = znull

set udg_x[4] = xc + a
set udg_y[4] = yc + a
set udg_z[4] = znull+(a*2)

set udg_x[5] = xc + a
set udg_y[5] = yc - a
set udg_z[5] = znull+(a*2)

set udg_x[6] = xc - a
set udg_y[6] = yc - a
set udg_z[6] = znull+(a*2)

set udg_x[7] = xc - a
set udg_y[7] = yc + a
set udg_z[7] = znull+(a*2)

set i = 0

loop
set atan = bj_RADTODEG * Atan2(udg_x[i]-xc, udg_y[i]-yc)
set udg_x[i] = xc + a * Cos(.0174532 * (udg_an+atan))
set udg_y[i] = yc + a * Sin(.0174532 * (udg_an+atan))
set i = i + 1
exitwhen i == 8
endloop

set i = 0

loop
exitwhen i >= 7
call MoveLightningEx(udg_l[i],true,udg_x[i],udg_y[i],udg_z[i],udg_x[i+1],udg_y[i+1],udg_z[i+1])
call MoveLightningEx(udg_l[i+1],true,udg_x[i+1],udg_y[i+1],udg_z[i+1],udg_x[i+2],udg_y[i+2],udg_z[i+2])
call MoveLightningEx(udg_l[i+2],true,udg_x[i+2],udg_y[i+2],udg_z[i+2],udg_x[i+3],udg_y[i+3],udg_z[i+3])
call MoveLightningEx(udg_l[i+3],true,udg_x[i+3],udg_y[i+3],udg_z[i+3],udg_x[i],udg_y[i],udg_z[i])
set i = i + 4
endloop

set i = 0
loop
exitwhen i >= 4
call MoveLightningEx(udg_l[i+8],true,udg_x[i],udg_y[i],udg_z[i],udg_x[i+4],udg_y[i+4],udg_z[i+4])
set i = i + 1
endloop

endif

if udg_s == "Tripp" then

set udg_x[0] = xc + a
set udg_y[0] = yc + a
set udg_z[0] = znull

set udg_x[1] = xc - a
set udg_y[1] = yc + a
set udg_z[1] = znull

set udg_x[2] = xc
set udg_y[2] = yc - a
set udg_z[2] = znull

set udg_x[3] = xc
set udg_y[3] = yc
set udg_z[3] = zc + a/2

set i = 0
loop
set atan = bj_RADTODEG * Atan2(udg_x[i]-xc, udg_z[i]-zc)
set udg_x[i] = xc + a * Cos(.0174532 * (udg_an+atan))
set udg_z[i] = zc + a * Sin(.0174532 * (udg_an+atan))
set i = i + 1
exitwhen i == 4
endloop

call MoveLightningEx(udg_l[0],true,udg_x[0],udg_y[0],udg_z[0],udg_x[1],udg_y[1],udg_z[1])
call MoveLightningEx(udg_l[1],true,udg_x[1],udg_y[1],udg_z[1],udg_x[2],udg_y[2],udg_z[2])
call MoveLightningEx(udg_l[2],true,udg_x[2],udg_y[2],udg_z[2],udg_x[0],udg_y[0],udg_z[0])

call MoveLightningEx(udg_l[3],true,udg_x[0],udg_y[0],udg_z[0],udg_x[3],udg_y[3],udg_z[3])
call MoveLightningEx(udg_l[4],true,udg_x[1],udg_y[1],udg_z[1],udg_x[3],udg_y[3],udg_z[3])
call MoveLightningEx(udg_l[5],true,udg_x[2],udg_y[2],udg_z[2],udg_x[3],udg_y[3],udg_z[3])


endif
set udg_an = udg_an + 3

endfunction

function InitTrig_g2 takes nothing returns nothing

local trigger t = CreateTrigger()
local integer i = 0

call TriggerRegisterTimerEventPeriodic(t, 0.025)
call TriggerAddAction(t, function act )

call FogEnableOff()
call FogMaskEnableOff()
set udg_s = "ball"

loop
call AddLightningLoc( "LEAS", GetRectCenter(GetPlayableMapRect()), GetRectCenter(GetPlayableMapRect()) )
set udg_l[i] = GetLastCreatedLightningBJ()
set i = i + 1
exitwhen i == 191
endloop

endfunction
[/jass]

Если кому интересно конечно smile
Ползут 2 пирожка.
Первый: Я тебя щас трахну.
Второй: Почему?
Первый: Потому что я с яйцами :D

Pro100Killer

#5
скрины выглядят класс)
Мафия бессмертна!
Тестерирую на досуге мапы,без фанатизма)
nikikin
-Человек с очень завышеным ЧСВ и слабой нервной системой.
Это многое объясняет)
Весь мир это иллюзия бред больного ума и охреневшего сознания

H_A_PK

#6
Quote (Omni174)
Если быть честным........то я нехрена не понял sad

Это математика(тригонометрия), тут надо шарить и считать уметь=)

Добавлено (21.08.11, 14:30)
---------------------------------------------

Quote (Pro100Killer)
скрины выглядят класс)

для вас старался smile
Ползут 2 пирожка.
Первый: Я тебя щас трахну.
Второй: Почему?
Первый: Потому что я с яйцами :D

H_A_PK

#8
Quote (Omni174)
некоторые функции..

ты про это ?

Это вставь просто себе в карту =) желательно чтобы у тебя был JNGP и cJass, иначе
Quote (H_A_PK)
globals
array lightning udg_l
array real udg_x
array real udg_y
array real udg_z
real udg_an
string udg_s
endglobals

придёться объявлять в ручную в редакторе переменных
array - массив
real - реальная
string - строка
lightning - молния
Ползут 2 пирожка.
Первый: Я тебя щас трахну.
Второй: Почему?
Первый: Потому что я с яйцами :D

H_A_PK

#10
Quote (Omni174)
Окей,а как использовать JNGP/cJass чтобы код написанный в нем шел в WE?

Да лучше скачай сборку Драгона (Спирита) JNGP, в настройках включи Adic Helper , вообщем там в настройках можно включить cJass
Ползут 2 пирожка.
Первый: Я тебя щас трахну.
Второй: Почему?
Первый: Потому что я с яйцами :D
Форум » Warcraft III » Библиотека » [Статья]Jass поляризация (полярки и кое-что от меня)
  • Страница 1 из 1
  • 1
Поиск: