Дерево Пифагора — различия между версиями
Материал из Department of Theoretical and Applied Mechanics
(не показаны 32 промежуточные версии 2 участников) | |||
Строка 1: | Строка 1: | ||
==Описание== | ==Описание== | ||
− | {{#widget:Iframe |url=http://tm.spbstu.ru/htmlets/LapshinAA/Pyth.html |width=1000|height= | + | Алгоритм построения дерева Пифагора с выбором углов и глубиной прорисовки. |
+ | |||
+ | Иполнители: | ||
+ | |||
+ | [[Лапшин_Андрей|Лапшин Андрей]] | ||
+ | |||
+ | [[Эссам Нганг Жоан Флориан Кенни]] | ||
+ | |||
+ | Группа 13632/1 Кафедра Теоретической механики | ||
+ | |||
+ | Файл:[[http://tm.spbstu.ru/htmlets/LapshinAA/Kursovaya_rabota_Lapshin_Essam.docx]] | ||
+ | ==Особенности== | ||
+ | В классическом дереве Пифагора угол равен 45 градусам, можно построить обобщённое дерево Пифагора при использовании других углов. | ||
+ | ==Визуализация== | ||
+ | {{#widget:Iframe |url=http://tm.spbstu.ru/htmlets/LapshinAA/Pyth.html |width=1000|height=800 |border=0 }} | ||
+ | ==Код программы== | ||
+ | <div class="mw-collapsible mw-collapsed"> | ||
+ | '''Код программы на языке JavaScript:''' <div class="mw-collapsible-content"> | ||
+ | <syntaxhighlight lang="javascript" line start="1" enclose="div"> | ||
+ | } | ||
+ | window.addEventListener("load", program_code, false); | ||
+ | function program_code() { | ||
+ | |||
+ | var ctx = canvas_example.getContext('2d'); | ||
+ | var w = canvas_example.width; | ||
+ | var h = canvas_example.height; | ||
+ | function draw_square(x, y, r,R){ | ||
+ | ctx.fillStyle= 'rgb('+Math.floor(255-R)+', 165, 150)'; | ||
+ | ctx.fillRect(x,y,r,r); | ||
+ | } | ||
+ | function Pyth_fract(a,n){ | ||
+ | var n_max= input1.value; | ||
+ | var alpha= Math.PI*(input2.value)/180; | ||
+ | if (n_max < 1) console.log("n must be >= 1") | ||
+ | if (n > n_max) return; | ||
+ | var b = Math.round( a*Math.cos(alpha) ); | ||
+ | var c = Math.round( a*Math.sin(alpha) ); | ||
+ | ctx.translate ( -Math.round((b/2+c/2)*Math.sin(alpha)),Math.round (-a/2 - (b/2+c/2)*Math.cos(alpha) )); | ||
+ | ctx.rotate( -alpha); | ||
+ | draw_square(-b/2, -b/2, b, c); | ||
+ | Pyth_fract(b,n+1 ) ; | ||
+ | ctx.rotate(alpha); | ||
+ | ctx.translate ( Math.round((b/2 + c/2)*Math.sin(alpha)),-Math.round (-a/2 - (b/2+c/2)*Math.cos(alpha) )); | ||
+ | ctx.translate ( +Math.round((c/2 + b/2)*Math.cos(alpha)), Math.round (-a/2 -(c/2+b/2)*Math.sin(alpha) )); | ||
+ | ctx.rotate(Math.PI/2-alpha) ; | ||
+ | draw_square(-c/2, -c/2, c, c); | ||
+ | Pyth_fract(c, n+1 ) ; | ||
+ | ctx.rotate(-Math.PI/2+alpha); | ||
+ | ctx.translate ( -Math.round((c/2 + b/2)*Math.cos(alpha)), -Math.round (-a/2 -(c/2+b/2)*Math.sin(alpha) )); | ||
+ | } | ||
+ | function DrawP(){ | ||
+ | draw_square(w/2, h/2, 50, 50); | ||
+ | ctx.translate(w/2 + 25, h/2 +25); | ||
+ | Pyth_fract(50, 1); | ||
+ | } | ||
+ | draw.onclick=function(){ | ||
+ | ctx.clearRect(0,0,w,h); | ||
+ | DrawP() | ||
+ | ctx.translate(-w/2 - 25, -h/2-25 ); | ||
+ | } | ||
+ | } | ||
+ | |||
+ | </syntaxhighlight> | ||
+ | |||
+ | </div> |
Текущая версия на 23:10, 14 июня 2019
Содержание
Описание[править]
Алгоритм построения дерева Пифагора с выбором углов и глубиной прорисовки.
Иполнители:
Эссам Нганг Жоан Флориан Кенни
Группа 13632/1 Кафедра Теоретической механики
Файл:[[1]]
Особенности[править]
В классическом дереве Пифагора угол равен 45 градусам, можно построить обобщённое дерево Пифагора при использовании других углов.
Визуализация[править]
Код программы[править]
Код программы на языке JavaScript:
1 }
2 window.addEventListener("load", program_code, false);
3 function program_code() {
4
5 var ctx = canvas_example.getContext('2d');
6 var w = canvas_example.width;
7 var h = canvas_example.height;
8 function draw_square(x, y, r,R){
9 ctx.fillStyle= 'rgb('+Math.floor(255-R)+', 165, 150)';
10 ctx.fillRect(x,y,r,r);
11 }
12 function Pyth_fract(a,n){
13 var n_max= input1.value;
14 var alpha= Math.PI*(input2.value)/180;
15 if (n_max < 1) console.log("n must be >= 1")
16 if (n > n_max) return;
17 var b = Math.round( a*Math.cos(alpha) );
18 var c = Math.round( a*Math.sin(alpha) );
19 ctx.translate ( -Math.round((b/2+c/2)*Math.sin(alpha)),Math.round (-a/2 - (b/2+c/2)*Math.cos(alpha) ));
20 ctx.rotate( -alpha);
21 draw_square(-b/2, -b/2, b, c);
22 Pyth_fract(b,n+1 ) ;
23 ctx.rotate(alpha);
24 ctx.translate ( Math.round((b/2 + c/2)*Math.sin(alpha)),-Math.round (-a/2 - (b/2+c/2)*Math.cos(alpha) ));
25 ctx.translate ( +Math.round((c/2 + b/2)*Math.cos(alpha)), Math.round (-a/2 -(c/2+b/2)*Math.sin(alpha) ));
26 ctx.rotate(Math.PI/2-alpha) ;
27 draw_square(-c/2, -c/2, c, c);
28 Pyth_fract(c, n+1 ) ;
29 ctx.rotate(-Math.PI/2+alpha);
30 ctx.translate ( -Math.round((c/2 + b/2)*Math.cos(alpha)), -Math.round (-a/2 -(c/2+b/2)*Math.sin(alpha) ));
31 }
32 function DrawP(){
33 draw_square(w/2, h/2, 50, 50);
34 ctx.translate(w/2 + 25, h/2 +25);
35 Pyth_fract(50, 1);
36 }
37 draw.onclick=function(){
38 ctx.clearRect(0,0,w,h);
39 DrawP()
40 ctx.translate(-w/2 - 25, -h/2-25 );
41 }
42 }