added everything else
|
@ -0,0 +1,16 @@
|
||||||
|
<!DOCTYPE html>
|
||||||
|
<html>
|
||||||
|
|
||||||
|
<head>
|
||||||
|
<title>Parcel Sandbox</title>
|
||||||
|
<meta charset="UTF-8" />
|
||||||
|
</head>
|
||||||
|
|
||||||
|
<body>
|
||||||
|
<div id="app"></div>
|
||||||
|
<canvas id="canvas" width="500" height="500">
|
||||||
|
<script src="src/index.js">
|
||||||
|
</script>
|
||||||
|
</body>
|
||||||
|
|
||||||
|
</html>
|
|
@ -0,0 +1,116 @@
|
||||||
|
const canvas = document.getElementById("canvas");
|
||||||
|
const ctx = canvas.getContext("2d");
|
||||||
|
|
||||||
|
const points = [
|
||||||
|
[50, 250],
|
||||||
|
[450, 250],
|
||||||
|
];
|
||||||
|
let step = 0;
|
||||||
|
let speed = 8;
|
||||||
|
let opening = true;
|
||||||
|
let counter = 0;
|
||||||
|
|
||||||
|
let cooldown = 0;
|
||||||
|
function draw() {
|
||||||
|
ctx.strokeStyle = "orange";
|
||||||
|
ctx.fillStyle = "black";
|
||||||
|
ctx.clearRect(0, 0, canvas.width, canvas.height);
|
||||||
|
ctx.fillRect(0, 0, 500, 500);
|
||||||
|
|
||||||
|
// let newPath = new Path2D();
|
||||||
|
// newPath.arc(150, 75, 75, 0, 2 * Math.PI);
|
||||||
|
|
||||||
|
ctx.beginPath();
|
||||||
|
ctx.rect(100, 100, 300, 300);
|
||||||
|
ctx.stroke();
|
||||||
|
|
||||||
|
drawEyelid(step);
|
||||||
|
|
||||||
|
ctx.save();
|
||||||
|
// squareCut();
|
||||||
|
eyelidCut(step);
|
||||||
|
|
||||||
|
if (counter % 100 == 0) {
|
||||||
|
counter = 0;
|
||||||
|
}
|
||||||
|
drawGrowEye(100 + counter);
|
||||||
|
|
||||||
|
drawCircle(100);
|
||||||
|
|
||||||
|
ctx.restore();
|
||||||
|
|
||||||
|
stepFunc();
|
||||||
|
counter++;
|
||||||
|
window.requestAnimationFrame(draw);
|
||||||
|
}
|
||||||
|
|
||||||
|
function stepFunc() {
|
||||||
|
if (cooldown != 0) {
|
||||||
|
cooldown--;
|
||||||
|
} else {
|
||||||
|
if (opening == true) {
|
||||||
|
if (step >= 200) {
|
||||||
|
cooldown = 200;
|
||||||
|
opening = false;
|
||||||
|
step -= speed;
|
||||||
|
} else {
|
||||||
|
step += speed;
|
||||||
|
}
|
||||||
|
} else {
|
||||||
|
if (step <= 0) {
|
||||||
|
opening = true;
|
||||||
|
step += speed;
|
||||||
|
} else {
|
||||||
|
step -= speed;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
function squareCut() {
|
||||||
|
let squarePath = new Path2D();
|
||||||
|
squarePath.rect(100, 100, 300, 300);
|
||||||
|
|
||||||
|
ctx.clip(squarePath);
|
||||||
|
}
|
||||||
|
|
||||||
|
function drawGrowEye(step) {
|
||||||
|
ctx.strokeStyle = "aqua";
|
||||||
|
ctx.beginPath();
|
||||||
|
ctx.lineWidth = 5;
|
||||||
|
ctx.arc(250, 250, step, 0, 2 * Math.PI);
|
||||||
|
ctx.stroke();
|
||||||
|
ctx.strokeStyle = "orange";
|
||||||
|
}
|
||||||
|
|
||||||
|
function eyelidCut(step) {
|
||||||
|
// ctx.lineWidth = 1;
|
||||||
|
let squarePath = new Path2D();
|
||||||
|
squarePath.moveTo(points[0][0], points[0][1]);
|
||||||
|
squarePath.quadraticCurveTo(250, 250 - step, points[1][0], points[0][1]);
|
||||||
|
|
||||||
|
squarePath.moveTo(points[0][0], points[0][1]);
|
||||||
|
squarePath.quadraticCurveTo(250, 250 + step, points[1][0], points[0][1]);
|
||||||
|
|
||||||
|
ctx.clip(squarePath);
|
||||||
|
}
|
||||||
|
|
||||||
|
function drawCircle(step) {
|
||||||
|
ctx.beginPath();
|
||||||
|
ctx.lineWidth = 5;
|
||||||
|
ctx.arc(250, 250, step, 0, 2 * Math.PI);
|
||||||
|
ctx.stroke();
|
||||||
|
}
|
||||||
|
|
||||||
|
function drawEyelid(step) {
|
||||||
|
ctx.lineWidth = 1;
|
||||||
|
ctx.beginPath();
|
||||||
|
ctx.moveTo(points[0][0], points[0][1]);
|
||||||
|
ctx.quadraticCurveTo(250, 250 - step, points[1][0], points[0][1]);
|
||||||
|
|
||||||
|
ctx.moveTo(points[0][0], points[0][1]);
|
||||||
|
ctx.quadraticCurveTo(250, 250 + step, points[1][0], points[0][1]);
|
||||||
|
ctx.stroke();
|
||||||
|
}
|
||||||
|
|
||||||
|
window.requestAnimationFrame(draw);
|
|
@ -0,0 +1,3 @@
|
||||||
|
body {
|
||||||
|
font-family: sans-serif;
|
||||||
|
}
|
|
@ -0,0 +1,89 @@
|
||||||
|
import numpy as np
|
||||||
|
import matplotlib.pyplot as plt
|
||||||
|
import matplotlib.animation as animation
|
||||||
|
|
||||||
|
import time
|
||||||
|
#from matplotlib import cm
|
||||||
|
#from matplotlib.colors import ListedColormap, LinearSegmentedColormap
|
||||||
|
|
||||||
|
#ncmap = cm.get_cmap('magma', 400)
|
||||||
|
|
||||||
|
|
||||||
|
def julia_quadratic(zx, zy, cx, cy, threshold):
|
||||||
|
"""Calculates whether the number z[0] = zx + i*zy with a constant c = x + i*y
|
||||||
|
belongs to the Julia set. In order to belong, the sequence
|
||||||
|
z[i + 1] = z[i]**2 + c, must not diverge after 'threshold' number of steps.
|
||||||
|
The sequence diverges if the absolute value of z[i+1] is greater than 4.
|
||||||
|
|
||||||
|
:param float zx: the x component of z[0]
|
||||||
|
:param float zy: the y component of z[0]
|
||||||
|
:param float cx: the x component of the constant c
|
||||||
|
:param float cy: the y component of the constant c
|
||||||
|
:param int threshold: the number of iterations to considered it converged
|
||||||
|
"""
|
||||||
|
# initial conditions
|
||||||
|
z = complex(zx, zy)
|
||||||
|
c = complex(cx, cy)
|
||||||
|
|
||||||
|
for i in range(threshold):
|
||||||
|
z = z**2 + c
|
||||||
|
if abs(z) > 4.: # it diverged
|
||||||
|
return i
|
||||||
|
|
||||||
|
return threshold - 1 # it didn't diverge
|
||||||
|
|
||||||
|
|
||||||
|
x_start, y_start = -2, -2 # an interesting region starts here
|
||||||
|
width, height = 4, 4 # for 4 units up and right
|
||||||
|
density_per_unit = 200 # how many pixles per unit
|
||||||
|
|
||||||
|
# real and imaginary axis
|
||||||
|
re = np.linspace(x_start, x_start + width, width * density_per_unit )
|
||||||
|
im = np.linspace(y_start, y_start + height, height * density_per_unit)
|
||||||
|
|
||||||
|
|
||||||
|
threshold = 100 # max allowed iterations
|
||||||
|
frames = 15 # number of frames in the animation
|
||||||
|
|
||||||
|
# we represent c as c = r*cos(a) + i*r*sin(a) = r*e^{i*a}
|
||||||
|
r = 0.7885
|
||||||
|
a = np.linspace(0, 2*np.pi, frames)
|
||||||
|
|
||||||
|
fig = plt.figure(figsize=(10, 10)) # instantiate a figure to draw
|
||||||
|
ax = plt.axes() # create an axes object
|
||||||
|
|
||||||
|
def animate(i):
|
||||||
|
start = time.time()
|
||||||
|
n = i
|
||||||
|
ax.clear() # clear axes object
|
||||||
|
ax.set_xticks([]) # clear x-axis ticks
|
||||||
|
ax.set_yticks([]) # clear y-axis ticks
|
||||||
|
|
||||||
|
X = np.empty((len(re), len(im))) # the initial array-like image
|
||||||
|
cx, cy = r * np.cos(a[i]), r * np.sin(a[i]) # the initial c number
|
||||||
|
|
||||||
|
# iterations for the given threshold
|
||||||
|
for i in range(len(re)):
|
||||||
|
for j in range(len(im)):
|
||||||
|
X[i, j] = julia_quadratic(re[i], im[j], cx, cy, threshold)
|
||||||
|
|
||||||
|
img = ax.imshow(X.T, interpolation="bicubic", cmap="magma")
|
||||||
|
|
||||||
|
end = time.time()
|
||||||
|
diff = end - start
|
||||||
|
global total_time
|
||||||
|
total_time += diff
|
||||||
|
ave = total_time/(n+1)
|
||||||
|
print(f"time[{n}]: {diff:.3f} ETA: {((frames - n+1)* ave)/60:.2f}")
|
||||||
|
return [img]
|
||||||
|
|
||||||
|
start = time.time()
|
||||||
|
|
||||||
|
total_time = 0
|
||||||
|
print("start")
|
||||||
|
|
||||||
|
anim = animation.FuncAnimation(fig, animate, frames=frames, interval=1, blit=True)
|
||||||
|
#writervideo = animation.FFMpegWriter(fps=60)
|
||||||
|
#anim.save('julia_set_vid.mp4', writer=writervideo)
|
||||||
|
anim.save('julia_set_ahhhh.mp4', writer='imagemagick')
|
||||||
|
print("done")
|
After Width: | Height: | Size: 2.6 MiB |
After Width: | Height: | Size: 493 KiB |
After Width: | Height: | Size: 322 KiB |
After Width: | Height: | Size: 5.3 MiB |
After Width: | Height: | Size: 2.0 MiB |
After Width: | Height: | Size: 3.8 MiB |
After Width: | Height: | Size: 2.2 MiB |
After Width: | Height: | Size: 2.5 MiB |
After Width: | Height: | Size: 829 KiB |
After Width: | Height: | Size: 916 KiB |
|
@ -0,0 +1,58 @@
|
||||||
|
import numpy as np
|
||||||
|
import matplotlib.pyplot as plt
|
||||||
|
import matplotlib.animation as animation
|
||||||
|
|
||||||
|
def mandelbrot(x, y, threshold):
|
||||||
|
"""Calculates whether the number c = x + i*y belongs to the
|
||||||
|
Mandelbrot set. In order to belong, the sequence z[i + 1] = z[i]**2 + c
|
||||||
|
must not diverge after 'threshold' number of steps. The sequence diverges
|
||||||
|
if the absolute value of z[i+1] is greater than 4.
|
||||||
|
|
||||||
|
:param float x: the x component of the initial complex number
|
||||||
|
:param float y: the y component of the initial complex number
|
||||||
|
:param int threshold: the number of iterations to considered it converged
|
||||||
|
"""
|
||||||
|
# initial conditions
|
||||||
|
c = complex(x, y)
|
||||||
|
z = complex(0, 0)
|
||||||
|
|
||||||
|
for i in range(threshold):
|
||||||
|
z = z**2 + c
|
||||||
|
if abs(z) > 4.: # it diverged
|
||||||
|
return i
|
||||||
|
|
||||||
|
return threshold - 1 # it didn't diverge
|
||||||
|
|
||||||
|
|
||||||
|
x_start, y_start = -2, -1.5 # an interesting region starts here
|
||||||
|
width, height = 3, 3 # for 3 units up and right
|
||||||
|
density_per_unit = 250 # how many pixles per unit
|
||||||
|
|
||||||
|
# real and imaginary axis
|
||||||
|
re = np.linspace(x_start, x_start + width, width * density_per_unit )
|
||||||
|
im = np.linspace(y_start, y_start + height, height * density_per_unit)
|
||||||
|
|
||||||
|
fig = plt.figure(figsize=(10, 10)) # instantiate a figure to draw
|
||||||
|
ax = plt.axes() # create an axes object
|
||||||
|
|
||||||
|
def animate(i):
|
||||||
|
print(i)
|
||||||
|
ax.clear() # clear axes object
|
||||||
|
ax.set_xticks([]) # clear x-axis ticks
|
||||||
|
ax.set_yticks([]) # clear y-axis ticks
|
||||||
|
|
||||||
|
X = np.empty((len(re), len(im))) # re-initialize the array-like image
|
||||||
|
threshold = round(1.25**(i + 1)) # calculate the current threshold
|
||||||
|
|
||||||
|
# iterations for the current threshold
|
||||||
|
for i in range(len(re)):
|
||||||
|
for j in range(len(im)):
|
||||||
|
X[i, j] = mandelbrot(re[i], im[j], threshold)
|
||||||
|
|
||||||
|
# associate colors to the iterations with an iterpolation
|
||||||
|
img = ax.imshow(X.T, interpolation="bicubic", cmap='Reds')
|
||||||
|
return [img]
|
||||||
|
|
||||||
|
anim = animation.FuncAnimation(fig, animate, frames=45, interval=16, blit=True)
|
||||||
|
anim.save('mandelbrot.gif',writer='imagemagick')
|
||||||
|
print("Done")
|
|
@ -0,0 +1,74 @@
|
||||||
|
<!DOCTYPE html>
|
||||||
|
<html>
|
||||||
|
<body>
|
||||||
|
|
||||||
|
<canvas id="myCanvas" width="600" height="600" style="border:1px solid #d3d3d3;">
|
||||||
|
Your browser does not support the HTML5 canvas tag.</canvas>
|
||||||
|
|
||||||
|
<script>
|
||||||
|
function rad(degrees)
|
||||||
|
{
|
||||||
|
var pi = Math.PI;
|
||||||
|
return degrees * (pi/180);
|
||||||
|
}
|
||||||
|
|
||||||
|
var c = document.getElementById("myCanvas");
|
||||||
|
var ctx = c.getContext("2d");
|
||||||
|
|
||||||
|
|
||||||
|
var r = 100;
|
||||||
|
var width = Math.cos(30*Math.PI/180)*r*2;
|
||||||
|
|
||||||
|
startx = 300;
|
||||||
|
starty = 300;//-(Math.tan(30*Math.PI/180)*width/2);
|
||||||
|
|
||||||
|
var stt =0.5;
|
||||||
|
|
||||||
|
var stt1 = (stt-2/3)*Math.PI;
|
||||||
|
var end1 = (stt)*Math.PI ;
|
||||||
|
|
||||||
|
var stt2 = end1;
|
||||||
|
var end2 = stt2+(2/3)*Math.PI;
|
||||||
|
|
||||||
|
var stt3 = end2;
|
||||||
|
var end3 = stt3+(2/3)*Math.PI;
|
||||||
|
|
||||||
|
ctx.beginPath();
|
||||||
|
ctx.arc(startx+ Math.cos(rad(90+120*1))*r, starty+ Math.sin(rad(90+120*1))*r, r, stt1, end1 ,0);
|
||||||
|
ctx.stroke();
|
||||||
|
|
||||||
|
ctx.beginPath();
|
||||||
|
ctx.arc(startx+ Math.cos(rad(90+120*2))*r, starty+ Math.sin(rad(90+120*2))*r, r, stt2, end2 ,0);
|
||||||
|
ctx.stroke();
|
||||||
|
|
||||||
|
ctx.beginPath();
|
||||||
|
ctx.arc(startx + Math.cos(rad(90+120*3))*r, starty+ Math.sin(rad(90+120*3))*r, r, stt3, end3 ,0);
|
||||||
|
ctx.stroke();
|
||||||
|
|
||||||
|
/*
|
||||||
|
ctx.beginPath();
|
||||||
|
ctx.moveTo(300-50, 300);
|
||||||
|
ctx.lineTo(300+50, 300);
|
||||||
|
ctx.strokeStyle = "red";
|
||||||
|
ctx.stroke();
|
||||||
|
ctx.beginPath();
|
||||||
|
ctx.moveTo(300, 300-50);
|
||||||
|
ctx.lineTo(300, 300+50);
|
||||||
|
ctx.strokeStyle = "red";
|
||||||
|
ctx.stroke();
|
||||||
|
*/
|
||||||
|
|
||||||
|
ctx.beginPath();
|
||||||
|
ctx.moveTo(startx+ Math.cos(rad(90+120*1))*r, starty+ Math.sin(rad(90+120*1))*r);
|
||||||
|
ctx.lineTo(startx+ Math.cos(rad(90+120*2))*r, starty+ Math.sin(rad(90+120*2))*r);
|
||||||
|
ctx.lineTo(startx+ Math.cos(rad(90+120*3))*r, starty+ Math.sin(rad(90+120*3))*r);
|
||||||
|
ctx.lineTo(startx+ Math.cos(rad(90+120*1))*r, starty+ Math.sin(rad(90+120*1))*r);
|
||||||
|
ctx.strokeStyle = "red";
|
||||||
|
ctx.stroke();
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
</script>
|
||||||
|
|
||||||
|
</body>
|
||||||
|
</html>
|
|
@ -0,0 +1,108 @@
|
||||||
|
<!DOCTYPE html>
|
||||||
|
<html>
|
||||||
|
|
||||||
|
<body>
|
||||||
|
|
||||||
|
<canvas id="myCanvas" width="2000" height="2000" style="border:1px solid #d3d3d3;">
|
||||||
|
Your browser does not support the HTML5 canvas tag.</canvas>
|
||||||
|
|
||||||
|
<script>
|
||||||
|
function rad(degrees) {
|
||||||
|
var pi = Math.PI;
|
||||||
|
return degrees * (pi / 180);
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
var c = document.getElementById("myCanvas");
|
||||||
|
var ctx = c.getContext("2d");
|
||||||
|
|
||||||
|
var sides = 3;
|
||||||
|
var r = 500;
|
||||||
|
var rot = Math.round((sides - 2) * 180 / sides * 2)
|
||||||
|
var piv = 360 / sides;
|
||||||
|
var angle = 120;
|
||||||
|
|
||||||
|
startx = 1000//1875/2;
|
||||||
|
starty = 1000//950/2;//-(Math.tan(30*Math.PI/180)*width/2);
|
||||||
|
|
||||||
|
var stt = 0.5 * Math.PI - rad(rot) + rad(angle);
|
||||||
|
var end = 0;
|
||||||
|
|
||||||
|
for (let j = 0; j < 29; j++) {
|
||||||
|
setTimeout(() => {
|
||||||
|
|
||||||
|
for (let i = 1; i < sides + 1; i++) {
|
||||||
|
end = stt + rad(rot);
|
||||||
|
ctx.beginPath();
|
||||||
|
ctx.arc(startx + Math.cos(rad(90 + piv * i + angle)) * r, starty + Math.sin(rad(90 + piv * i + angle)) * r, r, stt, end, 0);
|
||||||
|
//ctx.arc(startx+ 200*i, starty, r, stt, end ,0);
|
||||||
|
ctx.strokeStyle = "black";
|
||||||
|
ctx.stroke();
|
||||||
|
stt = end + -(rad(rot - piv));
|
||||||
|
}
|
||||||
|
angle += j;
|
||||||
|
|
||||||
|
}, 100 * j);
|
||||||
|
|
||||||
|
ctx.clearRect(0, 0, ctx.canvas.width, ctx.canvas.height);
|
||||||
|
|
||||||
|
|
||||||
|
}
|
||||||
|
/*
|
||||||
|
sides = 6;
|
||||||
|
r = 700;
|
||||||
|
rot = Math.round((sides - 2)*180/sides*2)
|
||||||
|
piv = 360/sides;
|
||||||
|
|
||||||
|
width = Math.cos(30*Math.PI/180)*r*2;
|
||||||
|
|
||||||
|
startx = 1500//1875/2;
|
||||||
|
starty = 1500//950/2;//-(Math.tan(30*Math.PI/180)*width/2);
|
||||||
|
|
||||||
|
stt =0.5*Math.PI - rad(rot);
|
||||||
|
end = 0;
|
||||||
|
|
||||||
|
for (let i = 1; i < sides +1 ; i++) {
|
||||||
|
end = stt + rad(rot)
|
||||||
|
ctx.beginPath();
|
||||||
|
ctx.arc(startx+ Math.cos(rad(90+piv*i))*r, starty+ Math.sin(rad(90+piv*i))*r, r, stt, end ,0);
|
||||||
|
//ctx.arc(startx+ 200*i, starty, r, stt, end ,0);
|
||||||
|
ctx.stroke();
|
||||||
|
stt = end+ -(rad(rot-piv));
|
||||||
|
}
|
||||||
|
*/
|
||||||
|
|
||||||
|
/*
|
||||||
|
ctx.beginPath();
|
||||||
|
ctx.moveTo(300-50, 300);
|
||||||
|
ctx.lineTo(300+50, 300);
|
||||||
|
ctx.strokeStyle = "red";
|
||||||
|
ctx.stroke();
|
||||||
|
ctx.beginPath();
|
||||||
|
ctx.moveTo(300, 300-50);
|
||||||
|
ctx.lineTo(300, 300+50);
|
||||||
|
ctx.strokeStyle = "red";
|
||||||
|
ctx.stroke();
|
||||||
|
*/
|
||||||
|
|
||||||
|
ctx.beginPath();
|
||||||
|
ctx.moveTo(startx + Math.cos(rad(90 + 120 * 1)) * r, starty + Math.sin(rad(90 + 120 * 1)) * r);
|
||||||
|
ctx.lineTo(startx + Math.cos(rad(90 + 120 * 2)) * r, starty + Math.sin(rad(90 + 120 * 2)) * r);
|
||||||
|
ctx.lineTo(startx + Math.cos(rad(90 + 120 * 3)) * r, starty + Math.sin(rad(90 + 120 * 3)) * r);
|
||||||
|
ctx.lineTo(startx + Math.cos(rad(90 + 120 * 1)) * r, starty + Math.sin(rad(90 + 120 * 1)) * r);
|
||||||
|
ctx.strokeStyle = "red";
|
||||||
|
ctx.stroke();
|
||||||
|
|
||||||
|
ctx.beginPath();
|
||||||
|
ctx.moveTo(startx + Math.cos(rad(90 + 120 * 1 + 60)) * r, starty + Math.sin(rad(90 + 120 * 1 + 60)) * r);
|
||||||
|
ctx.lineTo(startx + Math.cos(rad(90 + 120 * 2 + 60)) * r, starty + Math.sin(rad(90 + 120 * 2 + 60)) * r);
|
||||||
|
ctx.lineTo(startx + Math.cos(rad(90 + 120 * 3 + 60)) * r, starty + Math.sin(rad(90 + 120 * 3 + 60)) * r);
|
||||||
|
ctx.lineTo(startx + Math.cos(rad(90 + 120 * 1 + 60)) * r, starty + Math.sin(rad(90 + 120 * 1 + 60)) * r);
|
||||||
|
ctx.strokeStyle = "red";
|
||||||
|
ctx.stroke();
|
||||||
|
|
||||||
|
</script>
|
||||||
|
|
||||||
|
</body>
|
||||||
|
|
||||||
|
</html>
|
|
@ -0,0 +1,73 @@
|
||||||
|
import turtle
|
||||||
|
import math
|
||||||
|
|
||||||
|
|
||||||
|
turtle.colormode(255)
|
||||||
|
|
||||||
|
fac = .01
|
||||||
|
a=0
|
||||||
|
b=1
|
||||||
|
|
||||||
|
sqr = math.sqrt(5)
|
||||||
|
|
||||||
|
c= 1/sqr
|
||||||
|
d= (1+sqr)/2
|
||||||
|
e = (1-sqr)/2
|
||||||
|
j = 10
|
||||||
|
|
||||||
|
j_max = 30
|
||||||
|
|
||||||
|
turtle.bgcolor("black")
|
||||||
|
|
||||||
|
|
||||||
|
def fibb(t, col):
|
||||||
|
global b
|
||||||
|
global j
|
||||||
|
global j_max
|
||||||
|
global c
|
||||||
|
global d
|
||||||
|
global e
|
||||||
|
|
||||||
|
|
||||||
|
coll = math.radians(col)
|
||||||
|
print(col)
|
||||||
|
print(255*coll)
|
||||||
|
print(round(255*coll))
|
||||||
|
|
||||||
|
if coll >1:
|
||||||
|
coll = 1
|
||||||
|
if coll <0:
|
||||||
|
coll = 0
|
||||||
|
t.pencolor((round(255* coll),0,192))
|
||||||
|
|
||||||
|
for j in range(10, j_max):
|
||||||
|
f=math.pi * b * fac /2
|
||||||
|
f /= 90
|
||||||
|
for i in range(90):
|
||||||
|
turt.forward(f)
|
||||||
|
turt.left(1)
|
||||||
|
|
||||||
|
b = c * ((d**j)- (e**j))
|
||||||
|
|
||||||
|
t.penup()
|
||||||
|
turt = turtle.Turtle()
|
||||||
|
turt.speed(0)
|
||||||
|
|
||||||
|
for ang in range(360):
|
||||||
|
turt.setx(0)
|
||||||
|
turt.sety(0)
|
||||||
|
turt.left(1)
|
||||||
|
turt.pendown()
|
||||||
|
a=0
|
||||||
|
b=1
|
||||||
|
print(ang)
|
||||||
|
if ang>179:
|
||||||
|
ang = ang - 179
|
||||||
|
fibb(turt, ang)
|
||||||
|
|
||||||
|
cv = turt.getcanvas()
|
||||||
|
cv.postscript(file="file_name.ps", colormode='color')
|
||||||
|
|
||||||
|
turtle.done()
|
||||||
|
|
||||||
|
|
|
@ -0,0 +1,27 @@
|
||||||
|
import turtle
|
||||||
|
MINIMUM_BRANCH_LENGTH = 5
|
||||||
|
def build_tree(t, branch_length, shorten_by, angle, c):
|
||||||
|
if branch_length > MINIMUM_BRANCH_LENGTH:
|
||||||
|
t.pendown()
|
||||||
|
t.color(c)
|
||||||
|
t.forward(branch_length)
|
||||||
|
|
||||||
|
new_length = branch_length - shorten_by
|
||||||
|
t.left(angle)
|
||||||
|
build_tree(t, new_length, shorten_by, angle, "#8a1cff")
|
||||||
|
t.right(angle * 2)
|
||||||
|
|
||||||
|
build_tree(t, new_length, shorten_by, angle, "#ff7e1c")
|
||||||
|
t.left(angle)
|
||||||
|
|
||||||
|
t.penup()
|
||||||
|
t.backward(branch_length)
|
||||||
|
|
||||||
|
tree = turtle.Turtle()
|
||||||
|
tree.hideturtle()
|
||||||
|
tree.speed(0)
|
||||||
|
tree.setheading(90)
|
||||||
|
tree.color('green')
|
||||||
|
turtle.bgcolor("black")
|
||||||
|
build_tree(tree, 40, 3, 15, "red")
|
||||||
|
turtle.mainloop()
|