рдХреБрдЫ рд╕рдордп рдкрд╣рд▓реЗ, рдореБрдЭреЗ рдЧреНрд░рд╛рдлрд╝ рдХреА рдХрд▓реНрдкрдирд╛ рдХрд░рдиреЗ рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рдереА рдФрд░ рдПрдХ рддреИрдпрд╛рд░ рд╕рдорд╛рдзрд╛рди рдЦреЛрдЬрдирд╛ рдЪрд╛рд╣рддрд╛ рдерд╛ рдЬреЛ рджреВрд╕рд░реА рдмрд╛рдЗрдХ рдХрд╛ рдЖрд╡рд┐рд╖реНрдХрд╛рд░ рдирд╣реАрдВ рдХрд░реЗрдЧрд╛ред рдореИрдВ рдЖрд░реНрдмрд░ рд▓рд╛рдЗрдмреНрд░реЗрд░реА рдореЗрдВ рдЖрдпрд╛ рдерд╛, рдЬреЛ jQuery рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдХреЗ рдмреНрд░рд╛рдЙрдЬрд╝рд░ рдореЗрдВ рдХрд╛рдлреА рд╕реНрд╡реАрдХрд╛рд░реНрдп рдЧреНрд░рд╛рдл рдЦреАрдВрдЪрдиреЗ рдХреА рдХреНрд╖рдорддрд╛ рдкреНрд░рджрд╛рди рдХрд░реЗрдЧрд╛ред

рдкреБрд╕реНрддрдХрд╛рд▓рдп, рд╕рд╛рде рд╣реА рд╕рд╛рде рдкреНрд░рд▓реЗрдЦрди рдФрд░ рдЙрджрд╛рд╣рд░рдг (рд╕рднреА рдЕрдВрдЧреНрд░реЗрдЬреА рдореЗрдВ)
рдЖрдзрд┐рдХрд╛рд░рд┐рдХ рд╡реЗрдмрд╕рд╛рдЗрдЯ рдкрд░ рдбрд╛рдЙрдирд▓реЛрдб рдХрд┐рдП рдЬрд╛ рд╕рдХрддреЗ рд╣реИрдВ
рдФрд░ рдЗрд╕рд▓рд┐рдП рдХреНрд░рдо рдореЗрдВред
рдПрдХ рдХреИрдирд╡рд╛рд╕ рдХреЗ рд░реВрдк рдореЗрдВ, html5 рдХреИрдирд╡рд╛рд╕ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд┐рдпрд╛ рдЬрд╛рддрд╛ рд╣реИ, рдЬрд┐рд╕рдХрд╛ рдЕрд░реНрде рд╣реИ рдХрд┐ рдХреБрдЫ рднреА рдЙрди рдмреНрд░рд╛рдЙрдЬрд╝рд░реЛрдВ рдореЗрдВ рдХрд╛рдо рдирд╣реАрдВ рдХрд░реЗрдЧрд╛ рдЬреЛ рдЗрд╕рдХрд╛ рд╕рдорд░реНрдерди рдирд╣реАрдВ рдХрд░рддреЗ рд╣реИрдВред
рдЖрдЗрдП рдПрдХ рд╕рд░рд▓ рдкреГрд╖реНрда рдмрдирд╛рддреЗ рд╣реИрдВ рдЬреЛ AJAX рдХреЗ рдЙрдкрдпреЛрдЧ рд╕реЗ рдХреЛрдиреЗ рдФрд░ рдХрд┐рдирд╛рд░реЛрдВ рдХреЗ рдмрд╛рд░реЗ рдореЗрдВ JSON рдбреЗрдЯрд╛ рд▓реЛрдб рдХрд░рддрд╛ рд╣реИред рдЖрдзрд╛рд░ рдХреЗ рд░реВрдк рдореЗрдВ, рд╣рдо рдЙрд╕ рдЙрджрд╛рд╣рд░рдг рдХреЛ рд▓реЗрддреЗ рд╣реИрдВ рдЬреЛ рдХрд┐рдЯ рдХреЗ рд╕рд╛рде рдЖрддрд╛ рд╣реИ рдФрд░ рдЗрд╕реЗ рдЕрдкрдЧреНрд░реЗрдб рдХрд░рддрд╛ рд╣реИ (рдбреЗрдЯрд╛ рд▓реЛрдбрд┐рдВрдЧ, рдбрд┐рд╕реНрдкреНрд▓реЗ)ред
рдПрдХ рдбреЗрдЯрд╛ рдлрд╝рд╛рдЗрд▓ рдмрдирд╛рдПрдБ, рдЬрд╣рд╛рдБ рд╣рдо рд╕рднреА рдХреЛрдиреЗ рдФрд░ рдХрд┐рдирд╛рд░реЛрдВ рдХреЛ рд╕реВрдЪреАрдмрджреНрдз рдХрд░рддреЗ рд╣реИрдВ
data.json:
{
"nodes": [
{"name": "node_1"},
{"name": "node_2"},
{"name": "node_3"},
{"name": "node_4"},
{"name": "node_5"},
{"name": "node_6"},
{"name": "node_7"},
{"name": "node_8"},
{"name": "node_9"},
{"name": "node_10"}
],
"edges": [
{"src": "node_3", "dest": "node_2"},
{"src": "node_5", "dest": "node_3"},
{"src": "node_8", "dest": "node_7"},
{"src": "node_1", "dest": "node_4"},
{"src": "node_7", "dest": "node_5"},
{"src": "node_3", "dest": "node_9"},
{"src": "node_2", "dest": "node_4"},
{"src": "node_6", "dest": "node_5"},
{"src": "node_9", "dest": "node_1"},
{"src": "node_10", "dest": "node_2"},
{"src": "node_1", "dest": "node_10"}
]
}
рдореБрдЦреНрдп рдлрд╝рд╛рдЗрд▓ рдореЗрдВ, рдЖрд╡рд╢реНрдпрдХ рдкреБрд╕реНрддрдХрд╛рд▓рдпреЛрдВ рдХреЛ рдХрдиреЗрдХреНрдЯ рдХрд░реЗрдВ, рд╕рд╛рде рд╣реА рд╕рднреА рдЬреЗрдПрд╕ рд╕реНрдХреНрд░рд┐рдкреНрдЯ рдХреЛ рдмрд╛рд╣рд░реА рдлрд╝рд╛рдЗрд▓ рдореЗрдВ рд╕реНрдерд╛рдирд╛рдВрддрд░рд┐рдд рдХрд░реЗрдВ
<script src="js/jquery.min.js"></script> <script src="js/arbor.js"></script> <script src="main.js"></script>
рджрд╕реНрддрд╛рд╡реЗрдЬрд╝ рдХреЗ рд╢рд░реАрд░ рдореЗрдВ, рдПрдХ рдХреИрдирд╡рд╛рд╕ рдмрдирд╛рдПрдВ рдЬрд┐рд╕рдореЗрдВ рд╣рдо рдЖрдХрд░реНрд╖рд┐рдд рдХрд░реЗрдВрдЧреЗ
<canvas id="viewport" width="800" height="600"></canvas>
рдЕрдм, рдХреНрд░рдо рдореЗрдВ, рдпрд╣ рд╕рдм рдХреИрд╕реЗ рдХрд╛рдо рдХрд░реЗрдЧрд╛ред
рдЬрдм рдкреВрд░реА рддрд░рд╣ рд╕реЗ рд▓реЛрдб рдХрд┐рдпрд╛ рдЬрд╛рддрд╛ рд╣реИ, рддреЛ рдПрдХ рдСрдмреНрдЬреЗрдХреНрдЯ рдХреЛ рдЖрд░реНрдмрд░ рдХреЗ рд▓рд┐рдП рд╕реЗрдЯрд┐рдВрдЧреНрд╕ рдХреЗ рд╕рд╛рде рдмрдирд╛рдпрд╛ рдЬрд╛рддрд╛ рд╣реИ, рдЬрд┐рд╕рдореЗрдВ рдРрд╕реЗ рдлрд╝рдВрдХреНрд╢рди рднреА рд╣реЛрддреЗ рд╣реИрдВ рдЬрд┐рдиреНрд╣реЗрдВ рд╡рд┐рднрд┐рдиреНрди рдШрдЯрдирд╛рдУрдВ рдХреА рдШрдЯрдирд╛ рдкрд░ рдирд┐рд╖реНрдкрд╛рджрд┐рдд рдХрд┐рдпрд╛ рдЬрд╛рдПрдЧрд╛, рдкреНрд░рддреНрдпреЗрдХ рд╢реАрд░реНрд╖ рдФрд░ рдЪреЗрд╣рд░реЗ рдХреЛ рд░реЗрдВрдбрд░ рдХрд░рдиреЗ рдХрд╛ рдХрд╛рд░реНрдп (рдпрд╣ рд╡рд╣реА рд╣реИ рдЬреЛ рдореБрдЭреЗ рд▓рд╛рдЗрдмреНрд░реЗрд░реА рдкрд╕рдВрдж рдЖрдпрд╛, рдЬреЛ рдореБрдЭреЗ рд▓рдЧрднрдЧ рд╕рдм рдХреБрдЫ рдХреЙрдиреНрдлрд╝рд┐рдЧрд░ рдХрд░рдиреЗ рдХреА рдЕрдиреБрдорддрд┐ рджреЗрддрд╛ рд╣реИ)ред
рдЕрдЧрд▓рд╛, рд╣рдо рдЗрд╕ рдСрдмреНрдЬреЗрдХреНрдЯ рдХреЛ рдЖрд░реНрдмрд░ рдХрдВрд╕реНрдЯреНрд░рдХреНрдЯрд░ рдХреЗ рдкрд╛рд╕ рджреЗрддреЗ рд╣реИрдВ, рдЬреЛ рдЗрд╕ рд╕рднреА рд╣рд┐рдВрдбреЛрд▓рд╛ рдХреЛ рд▓реЙрдиреНрдЪ рдХрд░реЗрдЧрд╛ред
рдкреЗрдЬ рдХреЗ рдкреВрд░реА рддрд░рд╣ рд▓реЛрдб рд╣реЛрдиреЗ рдХреЗ рддреБрд░рдВрдд рдмрд╛рдж рдбреЗрдЯрд╛ рд▓реЛрдбрд┐рдВрдЧ рднреА рдХреА рдЬрд╛рддреА рд╣реИред
рд╕рд╛рдорд╛рдиреНрдп рддреМрд░ рдкрд░, рд╢рдмреНрджреЛрдВ рдХреА рддреБрд▓рдирд╛ рдореЗрдВ рдЕрдзрд┐рдХ рдХреЛрдб рд╣реЛрддрд╛ рд╣реИ, рдЗрд╕рд▓рд┐рдП рдореБрдЭреЗ рд▓рдЧрддрд╛ рд╣реИ рдХрд┐ рдпрд╣ рд╡рд┐рд╕реНрддреГрдд рдЯрд┐рдкреНрдкрдгрд┐рдпреЛрдВ рдХреЗ рд╕рд╛рде рд╕реАрдзреЗ рдЬрд╛рдиреЗ рдХреЗ рд▓рд┐рдП рд╕реНрдкрд╖реНрдЯ рдФрд░ рдЕрдзрд┐рдХ рд╕рдордЭ рдореЗрдВ рдЖрдПрдЧрд╛ред
main.js:
(function($){ var Renderer = function(canvas) { var canvas = $(canvas).get(0); var ctx = canvas.getContext("2d"); var particleSystem; var that = { init:function(system){
рдореБрдЭреЗ рдкреБрд╕реНрддрдХрд╛рд▓рдп рд╕реНрд╡рдпрдВ рдкрд╕рдВрдж рдЖрдпрд╛ рдХреНрдпреЛрдВрдХрд┐ рдпрд╣ рдЖрдкрдХреЛ рд╢реАрд░реНрд╖ рд░реЗрдЦрд╛рдУрдВ рдХреЛ рдЦреАрдВрдЪрдиреЗ рдФрд░ рд╕реНрд╡рдпрдВ рдХрд╛ рд╕рд╛рдордирд╛ рдХрд░рдиреЗ рдХреА рдЕрдиреБрдорддрд┐ рджреЗрддрд╛ рд╣реИ, рд╕рд╛рде рд╣реА рдХрд┐рд╕реА рднреА рдШрдЯрдирд╛ рдХреЗ рд▓рд┐рдП рдХреНрд░рд┐рдпрд╛рдУрдВ рдХреЛ рдХреЙрдиреНрдлрд╝рд┐рдЧрд░ рдХрд░рддрд╛ рд╣реИред
рдкрд░рд┐рдгрд╛рдо рдХрд╛ рд╕реНрд░реЛрдд рдХреЛрдб
рдпрд╣рд╛рдВ рдбрд╛рдЙрдирд▓реЛрдб рдХрд┐рдпрд╛ рдЬрд╛ рд╕рдХрддрд╛
рд╣реИ