# Graphs

#### Chocobo

##### White-Flower
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 &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_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.
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
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:
Happy Monday!
• Ghan:
Monday? Speak for yourself.
+2
• The Helper:
Happy Taco Tuesday!
+1
• The Helper:
Tacos!
• The Helper:
Check out the discord for taco pictures You cannot put pictures in this chat
+1
• 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:
One can only wish!
• tom_mai78101:
I'm back from Taiwan
+1
• 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:
and the real archive lives off of headline news
• The Helper:
Happy Monday!
• V-SNES:
Happy Saturday!
• The Helper:
Happy Saturday Night!
+1

### Members online

No members online now.