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), &#039;hfoo&#039;, udg_List1[Z], udg_List2[Z], 0.0), &#039;BTLF&#039;, 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)
letterl.jpg
 

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), &#039;hfoo&#039;, udg_List1[Z], udg_List2[Z], 0.0), &#039;BTLF&#039;, 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 Discord

      Members online

      No members online now.

      Affiliates

      Hive Workshop NUON Dome World Editor Tutorials

      Network Sponsors

      Apex Steel Pipe - Buys and sells Steel Pipe.
      Top