рдПрдЪрдЯреАрдПрдордПрд▓ 5 рдХреИрдирд╡рд╕ рдЯреНрд░реА рдЬрдирд░реЗрд╢рди

рд╣реЗрд▓реЛ рд╣рдмреНрд░!
рдЖрдЬ рдореИрдВ рдЬрд╛рд╡рд╛рд╕реНрдХреНрд░рд┐рдкреНрдЯ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдХреЗ рдПрдЪрдЯреАрдПрдордПрд▓ 5 рдХреИрдирд╡рд╕ рдкрд░ рдкреЗрдбрд╝ рдкреИрджрд╛ рдХрд░рдиреЗ рдХреЗ рдмрд╛рд░реЗ рдореЗрдВ рдмрд╛рдд рдХрд░рдирд╛ рдЪрд╛рд╣рддрд╛ рд╣реВрдВред рдореИрдВ рддреБрд░рдВрдд рд╕рдордЭрд╛рддрд╛ рд╣реВрдВ рдХрд┐ рдпрд╣ рд╕рдВрджрд░реНрдн рдкреЗрдбрд╝реЛрдВ рдпрд╛ рдмреА-рдкреЗрдбрд╝реЛрдВ рдХреЗ рдмрд╛рд░реЗ рдореЗрдВ рдирд╣реАрдВ рд╣реИ, рдмрд▓реНрдХрд┐ рдЙрди рдкреЗрдбрд╝реЛрдВ рдХреЗ рдмрд╛рд░реЗ рдореЗрдВ рд╣реИ рдЬреЛ рд╣рдо рд╣рд░ рджрд┐рди рдЦрд┐рдбрд╝рдХреА рд╕реЗ рдмрд╛рд╣рд░ рджреЗрдЦрддреЗ рд╣реИрдВ, рдЬреЛ рд╣рдорд╛рд░реЗ рд╡рд╛рдпреБ рдХреНрд▓реАрдирд░ рдФрд░ рдСрдХреНрд╕реАрдЬрди рдХреЗ рд╕рд╛рде рд╕рдореГрджреНрдз рд╣реЛрддреЗ рд╣реИрдВ, рдЬреЛ рд╢рд░рдж рдЛрддреБ рдореЗрдВ рдкреАрд▓реЗ рд╣реЛ рдЬрд╛рддреЗ рд╣реИрдВ рдФрд░ рд╕рд░реНрджрд┐рдпреЛрдВ рдореЗрдВ рдкрддреНрддрд┐рдпреЛрдВ рдХреЛ рдЦреЛ рджреЗрддреЗ рд╣реИрдВред , рдЙрди рдмрд╣реБрдд рд╣реА рдЬреАрд╡рд┐рдд, рд╡рди, рдЕрд╕рд▓реА рдкреЗрдбрд╝реЛрдВ рдХреЗ рдмрд╛рд░реЗ рдореЗрдВ рд╕рд╛рдорд╛рдиреНрдп рддреМрд░ рдкрд░, рдХреЗрд╡рд▓ рдХреИрдирд╡рд╕ рдкрд░ рдЪрд┐рддреНрд░рд┐рдд рдФрд░ рд╣рдо рдмрд╛рдд рдХрд░реЗрдВрдЧреЗред


рдРрд╕реЗ рдкреЗрдбрд╝ рдирд┐рдХрд▓рддреЗ рд╣реИрдВ

рдореБрдЭреЗ рдЕрдкрдиреЗ рдЦреЗрд▓ рдХреЗ рд▓рд┐рдП рдЯреНрд░реА рдЬрдирд░реЗрд╢рди рдХреА рдЬрд░реВрд░рдд рдереАред рд▓реЗрдХрд┐рди рдореБрдЭреЗ рдХреБрдЫ рдкрд░реНрдпрд╛рдкреНрдд рдПрд▓реНрдЧреЛрд░рд┐рджрдо рдирд╣реАрдВ рдорд┐рд▓реЗред рдЗрд╕рд▓рд┐рдП рдореИрдВрдиреЗ рдЕрдкрдирд╛ рдЬрдирд░реЗрдЯрд░ рд▓рд┐рдЦрд╛ ...


рдореИрдВ рдХреБрдЫ рднреА рдкрдврд╝рдирд╛ рдирд╣реАрдВ рдЪрд╛рд╣рддрд╛, рдореИрдВ рддреБрд░рдВрдд рдкрд░рд┐рдгрд╛рдо рдЪрд╛рд╣рддрд╛ рд╣реВрдВ!

рдФрд░ рдЗрд╕рд▓рд┐рдП рдХрд╛рд▓рд┐рдЦ рдХреЗ рдиреАрдЪреЗ рдХреНрдпрд╛ рд╣реИ?


рд╕рдм рдХреБрдЫ рдХреБрдЦреНрдпрд╛рдд рдмреЗрдЬрд┐рдпрд░ рдШрдЯрддрд╛ рдХрд╛рдо рдХрд░рддрд╛ рд╣реИ, рдЙрдирдХреЗ рд▓рд┐рдП рдзрдиреНрдпрд╡рд╛рдж, рдЯреНрд░рдВрдХ рдФрд░ рд╢рд╛рдЦрд╛рдПрдВ рдЧреЛрд▓ рд╣реЛрддреА рд╣реИрдВ рдФрд░ рдЬреАрд╡рд┐рдд рд▓рдЧрддреА рд╣реИрдВред рдореИрдВрдиреЗ рдХрдИ рддрд░реАрдХреЛрдВ рдХреА рдХреЛрд╢рд┐рд╢ рдХреА, рд╕рдмрд╕реЗ рдЕрдзрд┐рдХ рдЙрддреНрдкрд╛рджрдХ рдФрд░ рд╕рдмрд╕реЗ рдЖрд╕рд╛рди рдерд╛ рдШрдЯрддрд╛ рдХрд╛ рдЙрдкрдпреЛрдЧред рд╡реЗ рдирд┐рд░реНрдорд╛рдг рдХрд░рдирд╛ рдЖрд╕рд╛рди рд╣реИ, рдЙрдирд╕реЗ рд╕рд╣реА рджрд┐рд╢рд╛ рдкреНрд░рд╛рдкреНрдд рдХрд░рдирд╛ рдЖрд╕рд╛рди рд╣реИ, рдФрд░ рдЖрдк рдЙрдирдХреЗ рдкреНрд░рдХреНрд╖реЗрдкрд╡рдХреНрд░ рдкреНрд░реЛрдЧреНрд░рд╛рдо рдХреА рдЧрдгрдирд╛ рднреА рдХрд░ рд╕рдХрддреЗ рд╣реИрдВред

рдЬрдирд░реЗрдЯрд░ рдХреА рд╕рдВрд░рдЪрдирд╛ рдЗрд╕ рдкреНрд░рдХрд╛рд░ рд╣реИ:



TreeGenerator рд╡рд░реНрдЧ (рдЬреЗрдирд░реЗрдЯрд░ рдЖрд░реЗрдЦ рдореЗрдВ) рд╢рд╛рдЦрд╛рдУрдВ рдФрд░ рдЯреНрд░рдВрдХ рдХреЛ рдЙрддреНрдкрдиреНрди рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рд╢рд╛рдЦрд╛ рдСрдмреНрдЬреЗрдХреНрдЯ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рддрд╛ рд╣реИ, рдФрд░ рдкрддреНрддрд┐рдпреЛрдВ рдХреЛ рдЙрддреНрдкрдиреНрди рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП, TreeGenerator рджрд░рд╛рдЬ рд╕реЗ рд╡рд┐рдзрд┐ рдХреЛ рдХреЙрд▓ рдХрд░рддрд╛ рд╣реИред рд╢рд╛рдЦрд╛ рдПрдХ рдЕрдореВрд░реНрддрддрд╛ рд╣реИ рдЬреЛ рдкреНрд░рддреНрдпреЗрдХ рд╢рд╛рдЦрд╛ рдХреЛ рдПрдХ рд╡рд╕реНрддреБ рдХреЗ рд░реВрдк рдореЗрдВ рдЙрдЬрд╛рдЧрд░ рдХрд░рддреА рд╣реИред рдпрд╣ рднреА рдкреНрд░рддрд┐рдкрд╛рджрди рдХреЗ рд▓рд┐рдП рджрд░рд╛рдЬ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рддрд╛ рд╣реИред

рдЪрд░рдг 1. рдПрдХ рд╢рд╛рдЦрд╛ рдЙрддреНрдкрдиреНрди рдХрд░реЗрдВ


рдбреНрд░реЙрдЕрд░ рдХреНрд▓рд╛рд╕ рдХреИрдирд╡рд╛рд╕ рдПрдкреАрдЖрдИ рдФрд░ рдмреНрд░рд╛рдВрдЪ рдХреЗ рдмреАрдЪ рдХреА рдкрд░рдд рд╣реИред рдпрд╣ рд╡рд░реНрдЧ рдирд┐рд░реНрджрд┐рд╖реНрдЯ рдорд╛рдкрджрдВрдбреЛрдВ рдХреЗ рдЕрдиреБрд╕рд╛рд░ рдкрддреНрддрд┐рдпреЛрдВ рдФрд░ рд╢рд╛рдЦрд╛рдУрдВ рдХреЛ рдЦреАрдВрдЪрддрд╛ рд╣реИред
рдФрд░ рдпрд╣рд╛рдБ рджрд░рд╛рдЬ рд╕реЗ рд╢рд╛рдЦрд╛рдУрдВ рдХреЛ рдЦреАрдВрдЪрдиреЗ рдХрд╛ рдХрд╛рд░реНрдп рд╣реИ:
//x  y -   , leng -  , w - , deform -  , rotate -  DrawStick = function(x, y, leng, w, deform, rotate) { // canvas   . this.c.save(); this.c.translate(x, y); this.c.rotate(rotate.degree()); // degree     // x  y  . x = 0; y = w / -2; //       this.c.beginPath(); //  x  y this.c.moveTo(x, y); //        xy    (  w/BRANCH_CONSTRICTION) this.c.bezierCurveTo(x, y, x + leng / 2, y + deform, x + leng, y + (w - (w / BRANCH_CONSTRICTION)) / 2); //     this.c.lineTo(x + leng, y + w / BRANCH_CONSTRICTION + (w - (w / BRANCH_CONSTRICTION)) / 2); //     this.c.bezierCurveTo(x + leng, y + w / BRANCH_CONSTRICTION + (w - (w / BRANCH_CONSTRICTION)) / 2, x + leng / 2, y + w + deform, x, y + w); //   this.c.lineTo(x, y); this.c.closePath(); // ,     this.c.arc(x + leng, y + w / BRANCH_CONSTRICTION / 2 + (w - (w / BRANCH_CONSTRICTION)) / 2, w / BRANCH_CONSTRICTION / 2, 0 * Math.PI, 2 * Math.PI, false); //  this.c.fillStyle = BRANCH_COLOR; this.c.fill(); // canvas this.c.restore(); } 

рдХреЛрдб рд╕реЗ, рдЖрдк рд╢рд╛рдпрдж рдпрд╣ рдирд╣реАрдВ рд╕рдордЭ рдкрд╛рдП рдХрд┐ рд╢рд╛рдЦрд╛ рдХреЗ рд╢реАрд░реНрд╖ рдмрд┐рдВрджреБ рдХреИрд╕реЗ рд╕реЗрдЯ рдХрд┐рдП рдЬрд╛рддреЗ рд╣реИрдВред рдЬреИрд╕рд╛ рдХрд┐ рдЖрдк рдЬрд╛рдирддреЗ рд╣реИрдВ, рд╢реБрд░реБрдЖрдд рдореЗрдВ рдкреЗрдбрд╝ рдХреА рд╢рд╛рдЦрд╛ рд╢реБрд░реБрдЖрдд рд╕реЗ рдереЛрдбрд╝реА рд╕рдВрдХреАрд░реНрдг рд╣реЛрддреА рд╣реИред рдЬрд╣рд╛рдБ рддрдХ, рдпрд╣ BRANCH_CONSTRICTION рд╕реНрдерд┐рд░рд╛рдВрдХ рджреНрд╡рд╛рд░рд╛ рдирд┐рд░реНрдзрд╛рд░рд┐рдд рд╣реИред рдбрд┐рдлрд╝реЙрд▓реНрдЯ рд░реВрдк рд╕реЗ, рдпрд╣ 1.5 рд╣реИред BRANCH_COLOR - рд░рдВрдЧ рд╕реЗрдЯ рдХрд░рддрд╛ рд╣реИред рдорд╛рди рдХреЛ рд░рдВрдЧреЛрдВ рдХреА рдПрдХ рд╕рд░рдгреА рд╕реЗ рдпрд╛рджреГрдЪреНрдЫрд┐рдХ рд░реВрдк рд╕реЗ рдЪреБрдирд╛ рдЬрд╛рддрд╛ рд╣реИред

рдЗрд╕ рдлрд╝рдВрдХреНрд╢рди рдХрд╛ рдкрд░рд┐рдгрд╛рдо рдХреБрдЫ рдЗрд╕ рд╢рд╛рдЦрд╛ рдХреА рддрд░рд╣ рд╣реЛрдЧрд╛:



рд╕рдЪ рдХрд╣реВрдВ, рддреЛ рдЬрдм рддрдХ рдпрд╣ рдмрд╣реБрдд рдХреБрдЫ рд╡реИрд╕рд╛ рд╣реА рд╣реИ рдЬреИрд╕рд╛ рд╣рдореЗрдВ рдЪрд╛рд╣рд┐рдПред рдЗрд╕рд▓рд┐рдП, рдЖрдЧреЗ рдмрдврд╝рддреЗ рд╣реИрдВ!

рдЪрд░рдг 2. рд╢рд╛рдЦрд╛рдУрдВ рд╕реЗ рдПрдХ рдкреЗрдбрд╝ рдкреИрджрд╛ рдХрд░рдирд╛



рдпрджрд┐ рдЖрдкрдиреЗ рдХрднреА рдЫреЛрдЯреЗ, рдХреЗрд╡рд▓ рдмреАрдЬ-рдЕрдВрдХреБрд░рд┐рдд рдкреЗрдбрд╝реЛрдВ рдХреЛ рдХрд░реАрдм рд╕реЗ рджреЗрдЦрд╛, рддреЛ рдЖрдк рджреЗрдЦ рд╕рдХрддреЗ рд╣реИрдВ рдХрд┐ рд╡реЗ рдкрддреНрддрд┐рдпреЛрдВ рдХреЗ рд╕рд╛рде рдПрдХ рдПрдХрд▓ рд╢рд╛рдЦрд╛ рд╣реИрдВ, рдлрд┐рд░ рдЕрдиреНрдп рдЗрд╕ рд╢рд╛рдЦрд╛ рд╕реЗ рдЕрдВрдХреБрд░рд┐рдд рд╣реЛрддреЗ рд╣реИрдВ, рдФрд░ рдпрд╣ рднреА рдмрдврд╝рддрд╛ рд╣реИ рдФрд░ рдлреИрд▓рддрд╛ рд╣реИред рдореИрдВ рдХреНрдпреЛрдВ рд╣реВрдБ? рдФрд░ рддрдереНрдп рдпрд╣ рд╣реИ рдХрд┐ рдЯреНрд░рдВрдХ рдЕрдирд┐рд╡рд╛рд░реНрдп рд░реВрдк рд╕реЗ рдПрдХ рдмрдбрд╝реА рд╢рд╛рдЦрд╛ рд╣реИ рдЬрд┐рд╕рдореЗрдВ рд╕реЗ рдЕрдиреНрдп рд╢рд╛рдЦрд╛рдПрдВ рдмрдврд╝рддреА рд╣реИрдВ, рдФрд░ рдЗрди рд╢рд╛рдЦрд╛рдУрдВ рд╕реЗ рдЕрднреА рднреА рдкрд▓рдХреЗрдВ рд╣реИрдВ, рдФрд░ рдЗрд╕рд▓рд┐рдП ...

рдЗрд╕рдХреЗ рдЖрдзрд╛рд░ рдкрд░, рд╣рдорд╛рд░реЗ рд▓рд┐рдП рдкреНрд░рддреНрдпреЗрдХ рд╢рд╛рдЦрд╛ рдХреЛ рдПрдХ рд╡рд╕реНрддреБ рдХреЗ рд░реВрдк рдореЗрдВ рдкреНрд░рд╕реНрддреБрдд рдХрд░рдирд╛ рдЕрдзрд┐рдХ рд╕реБрд╡рд┐рдзрд╛рдЬрдирдХ рд╣реЛрдЧрд╛ рдЬреЛ рдорд╛рдкрджрдВрдбреЛрдВ рдФрд░ рд╡рд┐рдзрд┐рдпреЛрдВ рдФрд░ рдкреНрд░рдХреНрд░рд┐рдпрд╛рдУрдВ рдФрд░ рд╢рд╛рдЦрд╛рдУрдВ рдХреЗ рдмрд╛рд░реЗ рдореЗрдВ рдЬрд╛рдирдХрд╛рд░реА рд╕рдВрдЧреНрд░рд╣реАрдд рдХрд░реЗрдЧрд╛ред рдЗрд╕рдХреЗ рд▓рд┐рдП, рдЬреИрд╕рд╛ рдХрд┐ рдореИрдВрдиреЗ рдХрд╣рд╛, рд╢рд╛рдЦрд╛ рд╡рд░реНрдЧ:

 var Branch = function(x, y, leng, width, deformation, rotate) { this.params = { x: x, y: y, leng: leng, width: width, deformation: deformation, rotate: rotate, }; this.parent = null; // ,  ,     this.children = []; // ,   . //   canvas   this.render = function() { drawer.DrawStick(this.params.x, this.params.y, this.params.leng, this.params.width, this.params.deformation, this.params.rotate); } //       this.getEndPoints = function() { var ex = this.params.x + this.params.leng * Math.cos(this.params.rotate.degree()), ey = this.params.y + this.params.leng * Math.sin(this.params.rotate.degree()); return [ex, ey]; } // ,     this.createChild = function(leng, width, deform, rotate) { var exy = this.getEndPoints(); //  //          children this.children.push(new Branch(exy[0], exy[1], leng, width, deform, rotate)); //     this.children[this.children.length - 1].parent = this; return this.children[this.children.length - 1]; } this.render(); //    } 


рдЖрдЗрдП рдПрдХ рдирдИ рдХрдХреНрд╖рд╛ рдХрд╛ рдкреНрд░рдпрд╛рд╕ рдХрд░реЗрдВред рд╣рдо рдХрд╣рддреЗ рд╣реИрдВ:
 new Branch(100,300,200,20,-60,-50).createChild(100,20/1.5,30,-60); 

рдкрд░рд┐рдгрд╛рдо рдЗрд╕ рдкреНрд░рдХрд╛рд░ рд╣реЛрдЧрд╛:


рдареАрдХ рд╣реИ, рджреВрд░ рд╕реЗ рдПрдХ рд╢рд╛рдЦрд╛ рдЬреИрд╕рд╛ рджрд┐рдЦрддрд╛ рд╣реИ, рд╣реИ рдирд╛? рд╣рд╛рд▓рд╛рдВрдХрд┐, рдкреЗрдбрд╝реЛрдВ рдХреА рд╢рд╛рдЦрд╛ рдФрд░ рд╣рд░ рд╕рдордп рд╕реВрд░реНрдп рдХреА рдУрд░ рдЦрд┐рдВрдЪрд╛рд╡ред рдмрдирд╛рдиреЗ рдХреЗ рд▓рд┐рдП, рд╣рдореЗрдВ рдПрдХ рддрд░рд╣ рдХреЗ рдРрдб-рдЗрди рдмрдирд╛рдиреЗ рдХреА рдЬрд░реВрд░рдд рд╣реИ, рдХреНрд░рд┐рдПрдЯ рдбрд┐рдбрд┐рд╡реЗрдВрд╢рди рдлрдВрдХреНрд╢рдиред рдкреНрд░рдХреГрддрд┐ рдореЗрдВ, рдЬреНрдпрд╛рджрд╛рддрд░ рдЕрдХреНрд╕рд░ 2 рдкреНрд░рдХреНрд░рд┐рдпрд╛рдУрдВ рдореЗрдВ рд╢рд╛рдЦрд╛ рд╡рд┐рднрд╛рдЬрди рд╣реЛрддреЗ рд╣реИрдВ, рдЬрд┐рдирдореЗрдВ рд╕реЗ рдПрдХ рдореБрдЦреНрдп рд╣реИ, рдЗрд╕рд▓рд┐рдП рдпрд╣ рдореЛрдЯрд╛ рд╣реИ, рдФрд░ рджреВрд╕рд░рд╛ рдкрддрд▓рд╛ рд╣реИред рдХреБрдЫ рдкрд░реАрдХреНрд╖рдгреЛрдВ рдФрд░ рдЪрдпрдиреЛрдВ рдХреЗ рдкрд░рд┐рдгрд╛рдорд╕реНрд╡рд░реВрдк, рдореБрдЭреЗ рдПрд╣рд╕рд╛рд╕ рд╣реБрдЖ рдХрд┐ рд╕рдмрд╕реЗ рдЕрдЪреНрдЫрд╛ рдЕрдиреБрдкрд╛рдд 1.9: 1.4 рд╣реИред рдЖрдк рдЕрдкрдиреЗ рдкреЗрдбрд╝реЛрдВ рдХреЗ рд▓рд┐рдП рдПрдХ рдЕрд▓рдЧ рджреГрд╖реНрдЯрд┐рдХреЛрдг рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░ рд╕рдХрддреЗ рд╣реИрдВред
рдФрд░ рдпрд╣рд╛рдБ createDivarication рдлрд╝рдВрдХреНрд╢рди рдХреЛрдб рд╣реИ:
 // branches -  c   [{leng:,deform:,rotate:},{}] main -    createDivarication = function(branches, main) { //   var wi = this.params.width / BRANCH_CONSTRICTION / 2; for (var i = 0; i < 2; i++) { bi = branches[i]; //     branches         this.createChild(bi.leng, (i == main) ? (1.9 * wi) : wi * 1.4, bi.deform, this.params.rotate - bi.rotate //     ); } return this.children; } 


рдпрд╣рд╛рдБ рд╣рдореЗрдВ рдХреНрдпрд╛ рдорд┐рд▓рд╛ рд╣реИ:



рдареАрдХ рд╣реИ, рд╣рд╛рде рд╕реЗ рдЦреАрдВрдЪрдирд╛ рд╕рдВрднрд╡ рд╣реИ, рд▓реЗрдХрд┐рди рд╣рдореЗрдВ рдпрд╛рджреГрдЪреНрдЫрд┐рдХ рдкреЗрдбрд╝реЛрдВ рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рд╣реИред рдпрд╣ рдмрд┐рд▓реНрдХреБрд▓ рд╡реИрд╕рд╛ рд╣реА рд╣реИ рдЬреИрд╕рд╛ рдЯреНрд░реАрдЬреЗрдирд░реЗрдЯрд░ рдХреНрд▓рд╛рд╕ рдХреЗ рд▓рд┐рдП рд╣реИред рддреЛ рд╡рд╣ рдЦреБрдж:

 var TreeGenerator = function(){ //    - branch this.genF=function(branch) { if (branch.params.width > 1) { //      var divarications = [], //    dfm = BRANCH_DEFORMATION * branch.params.width / branch.params.leng; //      //    for (var di = 0; di <= 2; di++) { divarications.push({ leng: rand(40, branch.params.leng), //       deform: rand(-dfm, dfm), //      rotate: (di == 0) ? (rand(-20, -10)) : (rand(10, 20)) //     }); } //    var chld = branch.createDivarication(divarications, Math.floor(rand(0, 2))); //     for (var ci = 0; ci < 2; ci++) { this.genF(chld[ci]); } } else { //   ,        } } //  ,    this.genT=function(x,y){ //         var mainTreeBranch = new Branch(x, y, rand(70, BRANCH_MAXLENGTH), rand(10, BRANCH_MAXWIDTH), rand(-40, 40), rand(-120, -70)); //    this.genF(mainTreeBranch); // ()   drawer.DrawHill(x,y+20); return mainTreeBranch; } } 


рдХреЛрдб рдкрдврд╝рддреЗ рд╕рдордп, рдЖрдкрдиреЗ рд╕рдВрднрд╡рддрдГ рдирдП BRANCH_DEFORMATION рд╕реНрдерд┐рд░рд╛рдВрдХ - рд╢рд╛рдЦрд╛рдУрдВ рдХреА рд╡рд┐рдХреГрддрд┐ (рд╡рдХреНрд░рддрд╛) (рдЯреНрд░рдВрдХ рдирд╣реАрдВ) рдХреЛ рджреЗрдЦрд╛, BRANCH_MAXLENGTH - рдЯреНрд░рдВрдХ рдХреА рдЕрдзрд┐рдХрддрдо рд▓рдВрдмрд╛рдИ рдФрд░ BRCHCH_MAXWIDTH - рдЯреНрд░рдВрдХ рдХреА рдЪреМрдбрд╝рд╛рдИред рд╢рд╛рдЦрд╛рдУрдВ рдХреА рд╡рд┐рдХреГрддрд┐ рдореЗрдВ, рдЪреМрдбрд╝рд╛рдИ рдХреЗ рд╕рд╛рдкреЗрдХреНрд╖ рдЙрдирдХреА рдореЛрдЯрд╛рдИ рднреА рдПрдХ рднреВрдорд┐рдХрд╛ рдирд┐рднрд╛рддреА рд╣реИ, рд╢рд╛рдЦрд╛ рдХреЛ рдкрддрд▓рд╛ рдХрд░рддрд╛ рд╣реИ, рдкрд░рд┐рдгрд╛рдорд╕реНрд╡рд░реВрдк рд╡рд┐рдЪрд▓рди рдХрдо рд╣реЛрддрд╛ рд╣реИ, рдХреНрдпреЛрдВрдХрд┐ рдпрд╣ рд╢реБрд░реВ рдореЗрдВ рдкрд┐рдХреНрд╕рд▓ рдореЗрдВ рд╕реЗрдЯ рд╣реЛрддрд╛ рд╣реИред рд▓рдВрдмрд╛рдИ рдХреЗ рд▓рд┐рдП, рд╢рд╛рдЦрд╛ рдЙрд╕ рд╕реЗ рдЕрдзрд┐рдХ рд▓рдВрдмреА рдирд╣реАрдВ рд╣реЛ рд╕рдХрддреА рд╣реИ рдЬрд╣рд╛рдВ рд╕реЗ рд╡рд╣ рдмрдбрд╝рд╛ рд╣реБрдЖ рд╣реИред рдореИрдВрдиреЗ рдбреНрд░рд╛рд╣рд┐рд▓ рдлрд╝рдВрдХреНрд╢рди рдХрд╛ рдХреЛрдб рдирд╣реАрдВ рджрд┐рдЦрд╛рдпрд╛ рдХреНрдпреЛрдВрдХрд┐ рдЗрд╕рдореЗрдВ рдХреЗрд╡рд▓ рдЫрд╣ рд▓рд╛рдЗрдиреЗрдВ рд╣реИрдВ, рдФрд░ рдмрд┐рдВрджреБ x рдФрд░ y рдкрд░ рдЕрд░реНрдзрд╡реГрддреНрдд рдЦреАрдВрдЪрддреА рд╣реИред

рдареАрдХ рд╣реИ, рддреЛ рдпрд╣ рдЬрдирд░реЗрдЯрд░ рдХрд╛ рдкреНрд░рдпрд╛рд╕ рдХрд░рдиреЗ рдХрд╛ рд╕рдордп рд╣реИред рдЖрд╡рд╢реНрдпрдХ рдорд╛рдкрджрдВрдбреЛрдВ рдХреЗ рд╕рд╛рде рдЬреАрди рдлрд╝рдВрдХреНрд╢рди рдХреЛ рдХреЙрд▓ рдХрд░рдХреЗ, рд╣рдореЗрдВ рдХреБрдЫ рдЗрд╕ рддрд░рд╣ рдорд┐рд▓рддрд╛ рд╣реИ:



рд╕рд╣рдордд рд╣реВрдБ, рдкреЗрдбрд╝ рдмрдврд╝ рд░рд╣рд╛ рд╣реИ! рдХреЛрдИ рднреА рдЗрд╕реЗ рд╕рдорд╛рдкреНрдд рдХрд░ рд╕рдХрддрд╛ рд╣реИ рдФрд░ рдкреЗрдбрд╝реЛрдВ рдХреЗ рдЕрдВрдзреЗрд░реЗ рд╕рд┐рд▓реНрд╣реВрдЯ рдХрд╛ рдЖрдирдВрдж рд▓реЗ рд╕рдХрддрд╛ рд╣реИ, рд╕рднреА рдЕрдзрд┐рдХ рдЕрдЧрд░ рд╣рдо рдорд╛рдирддреЗ рд╣реИрдВ рдХрд┐ рдЕрдм рд╕рд░реНрджреА рдФрд░ рдЦрд┐рдбрд╝рдХреА рдХреЗ рдмрд╛рд╣рд░, рдкреЗрдбрд╝ рдмреЗрд╣рддрд░ рдирд╣реАрдВ рд╣реИрдВ, рдФрд░ рдХрднреА-рдХрднреА рдмрд╣реБрдд рдмреБрд░рд╛ рд╣реЛрддрд╛ рд╣реИ, рд╣рд╛рд▓рд╛рдВрдХрд┐, рдореИрдВ рдирд╣реАрдВ рд░реБрдХреВрдВрдЧрд╛ рдФрд░ рдкреЗрдбрд╝реЛрдВ рдХреЛ рдФрд░ рдЕрдзрд┐рдХ рдмрдирд╛рдиреЗ рдХреЗ рд▓рд┐рдП рдЬрдирд░реЗрдЯрд░ рдореЗрдВ рд╕реБрдзрд╛рд░ рдЬрд╛рд░реА рд░рдЦрд╛ред рдЕрдзрд┐рдХ рдЬреАрд╡рдВрдд рдФрд░ рджрд┐рд▓рдЪрд╕реНрдкред рдпрджрд┐ рдЖрдк рдореЗрд░реЗ рд╕рд╛рде рд╣реИрдВ, рддреЛ рд╣рдореЗрдВ рдЕрдЧрд▓реЗ рдмрд┐рдВрджреБ рдкрд░ рдЬрд╛рдирд╛ рдЪрд╛рд╣рд┐рдПред

рдЪрд░рдг 3. рд╢рд╛рдЦрд╛рдУрдВ рд╕реЗ рд╢реВрдЯрд┐рдВрдЧ рдХреА рдкреАрдврд╝реА



рдЬрдм рдкреЗрдбрд╝ рдкрддреНрддреЗ рдХреЗ рдмрд┐рдирд╛ рдЦрдбрд╝реЗ рд╣реЛрддреЗ рд╣реИрдВ, рддреЛ рдЖрдк рджреЗрдЦ рд╕рдХрддреЗ рд╣реИрдВ рдХрд┐ рд╡реЗ рди рдХреЗрд╡рд▓ рд▓реИрдХреЛрдирд┐рдХ, рдореЛрдЯреА рд╢рд╛рдЦрд╛рдУрдВ рд╕реЗ рдорд┐рд▓рдХрд░, рдмрд▓реНрдХрд┐ рдЙрди рд╢рд╛рдЦрд╛рдУрдВ рдХреЗ рд╢реАрд░реНрд╖ рд╕реЗ рднреА рдмрдврд╝ рд░рд╣реЗ рд╣реИрдВ, рд▓реЗрдХрд┐рди рдЙрди рдЫреЛрдЯреА рдФрд░ рдмрд╣реБрдд рд╢рд╛рдЦрд╛рдУрдВ рд╕реЗ рдирд╣реАрдВ рдЬреЛ рдордирдорд╛рдиреА рд╕реНрдерд╛рдиреЛрдВ рдореЗрдВ рдореБрдЦреНрдп рд╢рд╛рдЦрд╛рдУрдВ рд╕реЗ рдмрдврд╝рддреА рд╣реИрдВред рд╡реЗ рдРрд╕рд╛ рдЗрд╕рд▓рд┐рдП рдХрд░рддреЗ рд╣реИрдВ рддрд╛рдХрд┐ рдкреЗрдбрд╝ рдореЗрдВ рдЕрдзрд┐рдХ рдкрддреНрддреЗ рд╣реЛрдВ, рдХреНрдпреЛрдВрдХрд┐ рдкрддреНрддреЗ рд╣рдорд╛рд░реЗ рдЧреНрд░рд╣ рдХреЗ рд▓рд┐рдП рдмрд╣реБрдд рдорд╣рддреНрд╡рдкреВрд░реНрдг рдХрд╛рдо рдХрд░рддреЗ рд╣реИрдВ - рдпрд╣ рдирдореА рдХреЛ рд╡рд╛рд╖реНрдкрд┐рдд рдХрд░рддрд╛ рд╣реИ рдФрд░ рдХрд╛рд░реНрдмрди рдбрд╛рдЗрдСрдХреНрд╕рд╛рдЗрдб рдХреЛ рдСрдХреНрд╕реАрдЬрди рдореЗрдВ рдкрд░рд┐рд╡рд░реНрддрд┐рдд рдХрд░рддрд╛ рд╣реИред рдЗрд╕ рдкреЛрд╕реНрдЯ рдореЗрдВ рдЗрди рд╢рд╛рдЦрд╛рдУрдВ рдХреЛ рд╕реНрдкреНрд░рд╛рдЙрдЯреНрд╕ рдХрд╣рд╛ рдЬрд╛рдПрдЧрд╛ред рд╡рд╛рд╕реНрддрд╡ рдореЗрдВ, рд╡реЗ рднреА рд╢рд╛рдЦрд╛рдПрдВ рд╣реИрдВ, рдЬреИрд╕рд╛ рдХрд┐ рдореИрдВрдиреЗ рдХрд╣рд╛, рдордирдорд╛рдиреЗ рд╕реНрдерд╛рдиреЛрдВ рд╕реЗ рдмрдврд╝рддрд╛ рд╣реИ, рди рдХрд┐ рдХреЗрд╡рд▓ рдКрдкрд░ рд╕реЗред рдФрд░ рд╣рдорд╛рд░реЗ рдмреЗрдЬрд┐рдпрд░ рдШрдЯрддрд╛ рдкрд░ рд╢рд╛рдЦрд╛рдПрдВ! рдХреИрд╕реЗ рдЧрдгрдирд╛ рдХрд░реЗрдВ рдХрд┐ рд╢реВрдЯ рдХрд╣рд╛рдБ рд╕реНрдерд┐рдд рд╣реЛрдЧрд╛? рдмреЗрдЬрд╝рд┐рдпрд░ рд╡рдХреНрд░ рд╕реВрддреНрд░ рд╕реНрд╡рдпрдВ рд╣рдорд╛рд░реА рд╕рд╣рд╛рдпрддрд╛ рдХрд░реЗрдЧрд╛:
рдЫрд╡рд┐

Js рдкрд░, рдпрд╣ рдЗрд╕ рддрд░рд╣ рд╣реЛрдЧрд╛:
 //    Branch. pointPos       getPointOnCurve = function(pointPos) { //       var ex = this.params.x + this.params.leng / 2 * Math.cos((this.params.rotate + this.params.deformation).degree()), ey = this.params.y + this.params.leng / 2 * Math.sin((this.params.rotate + this.params.deformation).degree()); //t -  t   [0,1] t = pointPos / 100; //    ep = this.getEndPoints(); //    x,y x = [this.params.x, ep[0]]; y = [this.params.y, ep[1]];   x,y p1 = [ex, ey]; //  par1 = Math.pow((1 - t), 2) * x[0] + (1 - t) * 2 * t * p1[0] + Math.pow(t, 2) * x[1]; // x par2 = Math.pow((1 - t), 2) * y[0] + (1 - t) * 2 * t * p1[1] + Math.pow(t, 2) * y[1]; // y return [par1, par2]; } 


рд╡рдХреНрд░ рд╢рд╛рдЦрд╛ рдХреЗ рдХреЗрдВрджреНрд░ рдореЗрдВ рдЪрд▓реЗрдЧрд╛ред рдиреЗрддреНрд░рд╣реАрди, рдпрд╣ рдЗрд╕ рддрд░рд╣ рд╣реЛрдЧрд╛:



рдФрд░ рдЕрдм рд╢реВрдЯрд┐рдВрдЧ рдХреЛ рдЙрддреНрдкрдиреНрди рдХрд░рдиреЗ рдХрд╛ рд╕рдордп рд╣реИ: рд╢рд╛рдЦрд╛ рдореЗрдВ рдПрдХ рдирдпрд╛ рдлрд╝рдВрдХреНрд╢рди рдмрдирд╛рдПрдВ

 //branches -      this.createOutgrowth = function(leng, width, pos, deform, rotate) { var startXY = this.getPointOnCurve(pos); //  outgrowths( )      this.outgrowths.push(new Branch(startXY[0], startXY[1], leng, width, deform, this.params.rotate + rotate)); return this.outgrowths.reverse()[0]; } 


рд╣рдо рдЬрдирд░реЗрдЯрд░ рдХрд╛ рд╡рд┐рд╕реНрддрд╛рд░ рднреА рдХрд░рддреЗ рд╣реИрдВ:

 this.genO = function(branch) { if (branch.params.width > 1) { //   1 var outgrowthsCount = rand(0, BRANCH_OUTGROWTH); //  BRANCH_OUTGROWTH - .   for (var io = 0; io < outgrowthsCount; io++) { //        this.genF(branch.createOutgrowth(rand(10, branch.params.leng), rand(1, branch.params.width), rand(1, 100), rand(-10, 10), rand(-40, 40))); } } } 


рдФрд░ рдЗрд╕рдХреЗ рд╕реНрдерд╛рди рдкрд░ рдЬреАрди рдлрдВрдХреНрд╢рди рдХрд╛ рд╡рд┐рд╕реНрддрд╛рд░ рдХрд░реЗрдВ:
 //     for (var ci = 0; ci < 2; ci++) { this.genF(chld[ci]); } 

рдЗрд╕ рдкрд░:
 //        for (var ci = 0; ci < 2; ci++) { if (OUTGROWTH_ISSHOWN) { //OUTGROWTH_ISSHOWN   ,   true if (chld[ci].params.width < OUTGROWTH_BRANCH_WIDTH) { //OUTGROWTH_BRANCH_WIDTH -       this.genO(chld[ci]); //   } } this.genF(chld[ci]); } 


рдЪрд▓реЛ рдЗрд╕реЗ рдЖрдЬрд╝рдорд╛рдПрдВ? рдпрд╣рд╛рдБ рдПрдХ рдкреЗрдбрд╝ рд╣реИ:



рдпрд╣ рдмрд╣реБрдд рд╕реБрдВрджрд░ рдирд╣реАрдВ рджрд┐рдЦрддрд╛ рд╣реИ, рдкрд░реНрдпрд╛рдкреНрдд рдкрддреНрддреЗ рдирд╣реАрдВ рд╣реИрдВред рдЕрдЧрд▓рд╛ рдХрджрдо рдЙрдирдХреЗ рдмрд╛рд░реЗ рдореЗрдВ рд╣реИред

рд╕реНрдЯреЗрдк 4. рд▓реАрдл рдЬрдирд░реЗрд╢рди



рдкрддреНрддрд┐рдпрд╛рдВ рдХрд┐рд╕реА рднреА рдкреЗрдбрд╝ рдХрд╛ рдПрдХ рдЕрднрд┐рдиреНрди рд╣рд┐рд╕реНрд╕рд╛ рд╣реЛрддреА рд╣реИрдВ (рд╕реБрдЗрдпреЛрдВ рдХреЛ рдардВрдб рд╕реЗ рдмрдЪрд╛рдиреЗ рдХреЗ рд▓рд┐рдП рдХреЗрд╡рд▓ рдкрддреНрддрд┐рдпреЛрдВ рдХреЛ рдХрд╛рдЯ рджрд┐рдпрд╛ рдЬрд╛рддрд╛ рд╣реИ) рдФрд░ рд╡реЗ рдЙрдиреНрд╣реЗрдВ рдкреНрд░реЛрдЧреНрд░рд╛рдореЗрдЯрд┐рдХ рд░реВрдк рд╕реЗ рдЙрддреНрдкрдиреНрди рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рдмрд╣реБрдд рдЕрд▓рдЧ рд╣реИрдВ, рдЗрд╕рд▓рд┐рдП рд╣рдо рдореИрдиреНрдпреБрдЕрд▓ рд░реВрдк рд╕реЗ рдмрдирд╛рдИ рдЧрдИ рдкрд╛рдВрдЪ рдкреНрд░рдХрд╛рд░ рдХреА рдкрддреНрддрд┐рдпреЛрдВ рдореЗрдВ рд╕реЗ рдПрдХ рд▓реЗрдВрдЧреЗред рдкрддреНрддрд┐рдпрд╛рдВ рднреА рдмреЗрдЬрд╝рд┐рдпрд░ рд╡рдХреНрд░реЛрдВ рдкрд░ рд╕рдмрд╕реЗ рдЕрдЪреНрдЫреА рддрд░рд╣ рд╕реЗ рдЦреАрдВрдЪреА рдЬрд╛рддреА рд╣реИрдВ рдФрд░ рдЕрдВрдд рдмрд┐рдВрджреБрдУрдВ рдФрд░ рдПрдХ рд╡рдХреНрд░ рд╡рд┐рд░реВрдкрдг рдмрд┐рдВрджреБ рдХреЗ рд╕рд╛рде рд╕рд░рдгрд┐рдпреЛрдВ рдореЗрдВ рд╕рдВрдЧреНрд░рд╣реАрдд рд╣реЛрддреА рд╣реИрдВред рд╢реАрдЯ рдПрдХ рд╕рд╛рдд рдЧреБрдирд╛ рд╕рд╛рд░ рд╣реИ рдФрд░ рд╣рдореЗрдВ рдХреЗрд╡рд▓ рдмрд╛рдИрдВ рдУрд░ рдЖрдХрд░реНрд╖рд┐рдд рдХрд░рдиреЗ рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рд╣реИ, рдФрд░ рдЕрдзрд┐рдХрд╛рд░ рд╕реНрд╡рдЪрд╛рд▓рд┐рдд рд░реВрдк рд╕реЗ рдкреВрд░рдХ рд╣реЛрдВрдЧреЗред
рдЙрджрд╛рд╣рд░рдг рдХреЗ рд▓рд┐рдП, рдПрдХ рд╕рд╛рдзрд╛рд░рдг рд╢реАрдЯ рдХреЗ рд▓рд┐рдП рдХреЛрдб рд▓реЗрдВ:
 [[ [100, 0], // (  -  ) [70, 40] //   ]], 


рдбреНрд░рд╛рдЕрд░ рд╕реЗ рдбреНрд░рд╛ рдлрдВрдХреНрд╢рди рдкрд░ рднреА рд╡рд┐рдЪрд╛рд░ рдХрд░реЗрдВ:
 this.DrawLeaf = function(x, y, leafPoints, colors, scale, rotate) { //  x  y lx = x; ly = y; //    for (var io = 0; io < 2; io++) { this.c.save(); //  this.c.translate(x, y); // this.c.rotate((rotate).degree()); //  this.c.scale(scale, scale); //    if (io == 1) { //    this.c.setTransform(-1, 0, 0, 1, x, y); this.c.scale(scale, scale); this.c.rotate((-180 - (rotate)).degree()); } x = 100 / -2; y = 0; this.c.beginPath(); this.c.moveTo(x, y); var lastPair = [0, 0]; //  -    for (var bi in leafPoints) { var bp = leafPoints[bi]; //   this.c.bezierCurveTo(x + lastPair[0], y + lastPair[1], x + bp[1][0], y + bp[1][1], x + bp[0][0], y + bp[0][1]); //      lastPair = [bp[0][0], bp[0][1]]; } //    this.c.lineTo(x + LEAF_LENG, y); // LEAF_LENG -  .   100 this.c.closePath(); this.c.fillStyle = colors[1]; //  this.c.fill(); this.c.strokeStyle = colors[0]; //   this.c.stroke(); this.c.restore(); x = lx; y = ly; } } 


рдФрд░ рдЕрдм рдЗрд╕реЗ рдЬрдирд░реЗрдЯрд░ рд╕реЗ рд╕рдВрд▓рдЧреНрди рдХрд░рдиреЗ рдХрд╛ рд╕рдордп рд╣реИред рдЪрд▓реЛ рдПрдХ рдЬреАрдирд▓ рдлрд╝рдВрдХреНрд╢рди рд▓рд┐рдЦрддреЗ рд╣реИрдВ

 this.genL = function(branch) { leafCount = branch.params.leng / (LEAF_LENG * LEAF_SCALE) * LEAF_DENSITY; //   : LEAF_SCALE - , LEAF_DENSITY -   for (var li = 1; li < leafCount; li++) { // var lxy=branch.getPointOnCurve(branch.params.leng/leafCount*li); //    //  drawer.DrawLeaf(lxy[0], lxy[1], LeafMaps[LEAF_TYPE], ['#353', 'green'], LEAF_SCALE, branch.params.rotate - 180 ); } } 


рд╣рдо рдЗрд╕ рдлрд╝рдВрдХреНрд╢рди рдХреЛ рдЬреЗрдирдПрдлрдПрд▓ рдкрд░ рдлрд╛рд╕реНрдЯ рдХрд░рддреЗ рд╣реИрдВ, рдЯрд┐рдкреНрдкрдгреА рдХреА рдЬрдЧрд╣ "рдЕрддрд┐рд░рд┐рдХреНрдд рдХреЛрдб рд╣реЛрдЧрд╛, рдЬрд┐рд╕реЗ рдЕрдЧрд▓реЗ рдЪрд░рдгреЛрдВ рдореЗрдВ рдЪрд░реНрдЪрд╛ рдХреА рдЬрд╛рдПрдЧреА" рдЬреАрдирдПрд▓ рдХреЗ рд▓рд┐рдП рдХреЙрд▓ рдХреЗ рд╕рд╛рде - рдЗрд╕ рддрд░рд╣:

 if(LEAF_ISSHOWN){ //LEAF_ISSHOWN - ,   .   true this.genL(branch); } 


рдЦреИрд░, рд╡рд╣ рдкреЗрдбрд╝ рдмрдбрд╝рд╛ рд╣реЛ рдЧрдпрд╛ рд╣реИ!



рдФрд░ рдЖрдкрдХреЗ рдзреНрдпрд╛рди рдХреЗ рд▓рд┐рдП рдзрдиреНрдпрд╡рд╛рдж, рд╕рднреА рдХреЛрдб GitHub рдкрд░ рд╣реИ ,
рдореЗрд░реЗ рдордЬрджреВрд░реЛрдВ рдХрд╛ рдкрд░рд┐рдгрд╛рдо, рдЖрдк рдЗрд╕реЗ рдпрд╣рд╛рдВ рдорд╣рд╕реВрд╕ рдХрд░ рд╕рдХрддреЗ рд╣реИрдВ

Source: https://habr.com/ru/post/In210614/


All Articles