Graphs

Chocobo

White-Flower
Reaction score
409
I'm trying to create a system (for myself xd) so instead of putting the parametric equation of the graph (that's too long to parse it), I put some checkpoints (that makes a graph closes to what I want).

however, it seems to not to work correctly, it also doesn't show anything.

JASS:
globals
    real array udg_List1
    real array udg_List2
    real array udg_List3
    real array udg_List4
    integer udg_DimList
endglobals

function GraphB takes integer degree, real duration returns nothing
    local integer T = 0
    local integer Tpitch = 38-4*degree
    local integer Tmax = 1
    local integer i = 0
    local lightning array Lightning
    loop
        exitwhen T >= 1
        set i = i + 1
        set T = T + Tpitch
        set Tmax = T + Tpitch
        if T+Tmax < 1 then
            set Tmax = 1
        endif
        if degree == 2 then
            set Lightning<i> = AddLightning(&quot;CLPB&quot;, true, udg_List1[1]*T*T-2*udg_List1[2]*T+udg_List1[3], udg_List2[1]*T*T-2*udg_List2[2]*T+udg_List2[3], udg_List3[1]*Tmax*Tmax-2*udg_List3[2]*Tmax+udg_List3[3], udg_List4[1]*Tmax*Tmax-2*udg_List4[2]*Tmax+udg_List4[3])
        endif
    endloop
    call TriggerSleepAction(duration)
    loop
        exitwhen i == 0
        call DestroyLightning(Lightning<i>)
        set Lightning<i> = null
        set i = i - 1
    endloop
endfunction

function GraphN takes integer degree, real duration returns nothing
    local integer T = 0
    local integer Tpitch = 38-4*degree
    local integer Tmax = 1
    local integer i = 0
    local lightning array Lightning
    loop
        exitwhen T &gt;= 1
        set i = i + 1
        set T = T + Tpitch
        set Tmax = T + Tpitch
        if T+Tmax &lt; 1 then
            set Tmax = 1
        endif
        if degree == 2 then
            set Lightning<i> = AddLightning(&quot;CLPB&quot;, true, udg_List3[1]*T*T+udg_List3[2]*T+udg_List3[3] ,udg_List4[1]*T*T+udg_List4[2]*T+udg_List4[3], udg_List3[1]*Tmax*Tmax+udg_List3[2]*Tmax+udg_List3[3] ,udg_List4[1]*Tmax*Tmax+udg_List4[2]*Tmax+udg_List4[3])
        endif
    endloop
    call TriggerSleepAction(duration)
    loop
        exitwhen i == 0
        call DestroyLightning(Lightning<i>)
        set Lightning<i> = null
        set i = i - 1
    endloop
endfunction

function Calculate takes integer degree, real duration, integer which, real delay returns nothing
    local integer Z = 0
    loop
        set Z = Z + 1
        call UnitApplyTimedLife(CreateUnit(Player(0), 'hfoo', udg_List1[Z], udg_List2[Z], 0.0), 'BTLF', duration)
        if degree == 2 then
            if which == 1 then
                set udg_List3[1] = 2*(udg_List1[Z]-2*udg_List1[Z+1]+udg_List1[Z+2])
                set udg_List3[2] = -3*udg_List1[Z]+4*udg_List1[Z+1]-udg_List1[Z+2]
                set udg_List3[3] = udg_List1[Z]
                set udg_List4[1] = 2*(udg_List2[Z]-2*udg_List2[Z+1]+udg_List2[Z+2])
                set udg_List4[2] = -3*udg_List2[Z]+4*udg_List2[Z+1]-udg_List2[Z+2]
                set udg_List4[3] = udg_List2[Z]
                call GraphN(degree, duration)
            else
                set udg_List3[1] = udg_List1[Z]-2*udg_List1[Z+1]+udg_List1[Z+2]
                set udg_List3[2] = -2*udg_List1[Z]-2*udg_List1[Z+2]
                set udg_List3[3] = udg_List1[Z]
                set udg_List4[1] = udg_List2[Z]-2*udg_List2[Z+1]+udg_List2[Z+2]
                set udg_List4[2] = -2*udg_List2[Z]-2*udg_List2[Z+2]
                set udg_List4[3] = udg_List2[Z]
                call GraphB(degree, duration)
            endif
        endif
        exitwhen Z == udg_DimList - degree
        call TriggerSleepAction(delay)
    endloop
endfunction

function Setup takes nothing returns nothing
    local integer i = 0
    set udg_List1[1] = 1
    set udg_List2[1] = 3
    set udg_List1[2] = 1/3
    set udg_List2[2] = 7/3
    set udg_List1[3] = 3/2
    set udg_List2[3] = 2
    set udg_List1[4] = 7/3
    set udg_List2[4] = 5/2
    set udg_List1[5] = 11/5
    set udg_List2[5] = 13/5
    set udg_List1[6] = 7/4
    set udg_List2[6] = 5/2
    set udg_List1[7] = 3/2
    set udg_List2[7] = 2
    set udg_List1[8] = 3/2
    set udg_List2[8] = 5/4
    set udg_List1[9] = 6/5
    set udg_List2[9] = 2/5
    set udg_List1[10] = 1/3
    set udg_List2[10] = 0
    set udg_List1[11] = 2/3
    set udg_List2[11] = 3/4
    set udg_List1[12] = 6/5
    set udg_List2[12] = 2/4
    set udg_List1[13] = 9/5
    set udg_List2[13] = 1/5
    set udg_List1[14] = 11/4
    set udg_List2[14] = 0
    set udg_DimList = 14
    loop
        set i = i + 1
        set udg_List1<i> = udg_List1<i> * 1000
        exitwhen i == udg_DimList
    endloop
    call Calculate(2, 10.00, 1, 0.30)
    call TriggerSleepAction(10.00 + (udg_DimList-2)*3*0.3)
    call Calculate(2, 10.00, 2, 0.30)
endfunction</i></i></i></i></i></i></i></i>


as there are massive leaks in the trigger, I could notice the function was still running however nothing (no unit, no lightning in the function Calculate and GraphN/B) have shown up in the map (with coordinates -3000, -3000, 3000, 3000).

note : the udg_List1 and udg_List2 contains the checkpoints for the letter "L".

it's supposed to do something like that (done with a calculator)
 

saw792

Is known to say things. That is all.
Reaction score
280
You are doing a lot of integer division there. I think you probably wanted a real answer, so try changing 11/5 to 11./5. etc.

That has caused troubles for me in the past.
 

Chocobo

White-Flower
Reaction score
409
hmm it didn't solve the problem.

I noticed the Calculate function is used only once -> i decide to use ExecuteFunc.

JASS:
globals
    real array udg_List1
    real array udg_List2
    real array udg_List3
    real array udg_List4
    integer udg_DimList
    integer udg_degree
    real udg_duration
endglobals

function GraphB takes nothing returns nothing
    local integer T = 0
    local integer Tpitch = 38-4*udg_degree
    local integer Tmax = 1
    local integer i = 0
    local lightning array Lightning
    loop
        exitwhen T &gt;= 1
        set i = i + 1
        set T = T + Tpitch
        set Tmax = T + Tpitch
        if T+Tmax &lt; 1 then
            set Tmax = 1
        endif
        if udg_degree == 2 then
            set Lightning<i> = AddLightning(&quot;CLPB&quot;, true, udg_List1[1]*T*T-2*udg_List1[2]*T+udg_List1[3], udg_List2[1]*T*T-2*udg_List2[2]*T+udg_List2[3], udg_List3[1]*Tmax*Tmax-2*udg_List3[2]*Tmax+udg_List3[3], udg_List4[1]*Tmax*Tmax-2*udg_List4[2]*Tmax+udg_List4[3])
        endif
    endloop
    call TriggerSleepAction(udg_duration)
    loop
        exitwhen i == 0
        call DestroyLightning(Lightning<i>)
        set Lightning<i> = null
        set i = i - 1
    endloop
endfunction

function GraphN takes nothing returns nothing
    local integer T = 0
    local integer Tpitch = 38-4*udg_degree
    local integer Tmax = 1
    local integer i = 0
    local lightning array Lightning
    loop
        exitwhen T &gt;= 1
        set i = i + 1
        set T = T + Tpitch
        set Tmax = T + Tpitch
        if T+Tmax &lt; 1 then
            set Tmax = 1
        endif
        if udg_degree == 2 then
            set Lightning<i> = AddLightning(&quot;CLPB&quot;, true, udg_List3[1]*T*T+udg_List3[2]*T+udg_List3[3], udg_List4[1]*T*T+udg_List4[2]*T+udg_List4[3], udg_List3[1]*Tmax*Tmax+udg_List3[2]*Tmax+udg_List3[3], udg_List4[1]*Tmax*Tmax+udg_List4[2]*Tmax+udg_List4[3])
        endif
    endloop
    call TriggerSleepAction(udg_duration)
    loop
        exitwhen i == 0
        call DestroyLightning(Lightning<i>)
        set Lightning<i> = null
        set i = i - 1
    endloop
endfunction

function Calculate takes integer degree, real duration, integer which, real delay returns nothing
    local integer Z = 0
    set udg_degree = degree
    set udg_duration = duration
    loop
        set Z = Z + 1
        call UnitApplyTimedLife(CreateUnit(Player(0), 'hfoo', udg_List1[Z], udg_List2[Z], 0.0), 'BTLF', duration)
        call BJDebugMsg(&quot;x=&quot;+R2S(udg_List1[Z]))
        call BJDebugMsg(&quot;y=&quot;+R2S(udg_List2[Z]))
        if degree == 2 then
            if which == 1 then
                set udg_List3[1] = 2*(udg_List1[Z]-2*udg_List1[Z+1]+udg_List1[Z+2])
                set udg_List3[2] = -3*udg_List1[Z]+4*udg_List1[Z+1]-udg_List1[Z+2]
                set udg_List3[3] = udg_List1[Z]
                set udg_List4[1] = 2*(udg_List2[Z]-2*udg_List2[Z+1]+udg_List2[Z+2])
                set udg_List4[2] = -3*udg_List2[Z]+4*udg_List2[Z+1]-udg_List2[Z+2]
                set udg_List4[3] = udg_List2[Z]
                call ExecuteFunc(&quot;GraphN&quot;)
            else
                set udg_List3[1] = udg_List1[Z]-2*udg_List1[Z+1]+udg_List1[Z+2]
                set udg_List3[2] = -2*udg_List1[Z]-2*udg_List1[Z+2]
                set udg_List3[3] = udg_List1[Z]
                set udg_List4[1] = udg_List2[Z]-2*udg_List2[Z+1]+udg_List2[Z+2]
                set udg_List4[2] = -2*udg_List2[Z]-2*udg_List2[Z+2]
                set udg_List4[3] = udg_List2[Z]
                call ExecuteFunc(&quot;GraphB&quot;)
            endif
        endif
        exitwhen Z == udg_DimList - degree
        call TriggerSleepAction(delay)
    endloop
endfunction

function Setup takes nothing returns nothing
    local integer i = 0
    set udg_List1[1] = 1.
    set udg_List2[1] = 3.
    set udg_List1[2] = 1./3.
    set udg_List2[2] = 7./3.
    set udg_List1[3] = 3./2.
    set udg_List2[3] = 2.
    set udg_List1[4] = 7./3.
    set udg_List2[4] = 5./2.
    set udg_List1[5] = 11./5.
    set udg_List2[5] = 13./5.
    set udg_List1[6] = 7./4.
    set udg_List2[6] = 5./2.
    set udg_List1[7] = 3./2.
    set udg_List2[7] = 2.
    set udg_List1[8] = 3./2.
    set udg_List2[8] = 5./4.
    set udg_List1[9] = 6./5.
    set udg_List2[9] = 2./5.
    set udg_List1[10] = 1./3.
    set udg_List2[10] = 0
    set udg_List1[11] = 2./3.
    set udg_List2[11] = 3./4.
    set udg_List1[12] = 6./5.
    set udg_List2[12] = 2./4.
    set udg_List1[13] = 9./5.
    set udg_List2[13] = 1./5.
    set udg_List1[14] = 11./4.
    set udg_List2[14] = 0
    set udg_DimList = 14
    loop
        set i = i + 1
        set udg_List1<i> = udg_List1<i> * 1000.
        exitwhen i == udg_DimList
    endloop
    call Calculate(2, 10.00, 1, 0.30)
    call TriggerSleepAction(10.00 + (udg_DimList-2)*3*0.3)
    call Calculate(2, 10.00, 2, 0.30)
endfunction</i></i></i></i></i></i></i></i>


but this seems to be ugly and laggy and crashes at end. I think i'll give up on it for a while.
 
General chit-chat
Help Users
  • No one is chatting at the moment.
  • The Helper The Helper:
    Happy Monday!
  • Ghan Ghan:
    Monday? Speak for yourself. :p
    +2
  • The Helper The Helper:
    Happy Taco Tuesday!
    +1
  • The Helper The Helper:
    Tacos! :)
  • The Helper The Helper:
    Check out the discord for taco pictures :) You cannot put pictures in this chat
    +1
  • The Helper The Helper:
    Damn here come the bots again - 193 online but they are totally invisible to any stats - bunch of bots!'
  • C cubanismo:
    Re: Taco Tuesday, if there were some way to share edible tacos over the internet, technology would be complete.
    +2
  • The Helper The Helper:
    One can only wish!
  • tom_mai78101 tom_mai78101:
    I'm back from Taiwan
    +1
  • The Helper The Helper:
    I am reorganizing the site I know nobody will notice but I am not done quite yet but the main forums order has been changed and there is a new news category in Other News which is all the remaining headline news stuff not categorized - Headline News is just the stuff that shows on the main page now and the news archive is off the main forums page
  • The Helper The Helper:
    and the real archive lives off of headline news
  • The Helper The Helper:
    Happy Monday!
  • V-SNES V-SNES:
    Happy Saturday!
  • The Helper The Helper:
    Happy Saturday Night!
    +1

    The Helper Discord

    Members online

    Affiliates

    Hive Workshop NUON Dome World Editor Tutorials

    Network Sponsors

    Apex Steel Pipe - Buys and sells Steel Pipe.
    Top