-Я был на форуме мне сказали: "юзай полярки!". Что это? Да да, сейчас я всё для вас разжую. Плярка "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, Дело в том, что в шар можно вписать любую фигуру, т.е. эта формула уже произвольная ;)От неё и квадрат и пирамида и т.д.
[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 >= 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
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]
Если кому интересно конечно
Ползут 2 пирожка. Первый: Я тебя щас трахну. Второй: Почему? Первый: Потому что я с яйцами :D
Мафия бессмертна! Тестерирую на досуге мапы,без фанатизма) nikikin -Человек с очень завышеным ЧСВ и слабой нервной системой. Это многое объясняет) Весь мир это иллюзия бред больного ума и охреневшего сознания
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 >= 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
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
Это вставь просто себе в карту =) желательно чтобы у тебя был 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