Дерево Пифагора — различия между версиями

Материал из Department of Theoretical and Applied Mechanics
Перейти к: навигация, поиск
 
(не показано 27 промежуточных версий 2 участников)
Строка 1: Строка 1:
 
==Описание==
 
==Описание==
 
Алгоритм построения дерева Пифагора с выбором углов и глубиной прорисовки.
 
Алгоритм построения дерева Пифагора с выбором углов и глубиной прорисовки.
Файл:
+
 
 +
Иполнители:
 +
 
 +
[[Лапшин_Андрей|Лапшин Андрей]]
 +
 
 +
[[Эссам Нганг Жоан Флориан Кенни]]
 +
 
 +
Группа 13632/1 Кафедра Теоретической механики
 +
 
 +
Файл:[[http://tm.spbstu.ru/htmlets/LapshinAA/Kursovaya_rabota_Lapshin_Essam.docx]]
 
==Особенности==
 
==Особенности==
В классическом дереве Пифагора угол равен 45 градусам, также можно построить обобщённое дерево Пифагора при использовании других углов.
+
В классическом дереве Пифагора угол равен 45 градусам, можно построить обобщённое дерево Пифагора при использовании других углов.
 
==Визуализация==
 
==Визуализация==
 
{{#widget:Iframe |url=http://tm.spbstu.ru/htmlets/LapshinAA/Pyth.html |width=1000|height=800 |border=0 }}
 
{{#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 }