mirror of
https://github.com/UpsilonNumworks/Upsilon.git
synced 2026-01-19 00:37:25 +01:00
127 lines
3.1 KiB
C++
127 lines
3.1 KiB
C++
#include "script_template.h"
|
|
|
|
namespace Code {
|
|
|
|
constexpr ScriptTemplate emptyScriptTemplate(".py", "\x01" R"(from math import *
|
|
)");
|
|
|
|
constexpr ScriptTemplate factorialScriptTemplate("factorial.py", "\x01" R"(def factorial(n):
|
|
if n == 0:
|
|
return 1
|
|
else:
|
|
return n * factorial(n-1))");
|
|
|
|
constexpr ScriptTemplate fibonacciScriptTemplate("fibonacci.py", "\x01" R"(def fibo(n):
|
|
a=0
|
|
b=1
|
|
for i in range(1,n+1):
|
|
c=a+b
|
|
a=b
|
|
b=c
|
|
return a
|
|
|
|
def fibo2(n):
|
|
if n==0:
|
|
return 0
|
|
elif n==1 or n==2:
|
|
return 1
|
|
return fibo2(n-1)+fibo2(n-2))");
|
|
|
|
constexpr ScriptTemplate mandelbrotScriptTemplate("mandelbrot.py", "\x01" R"(# This script draws a Mandelbrot fractal set
|
|
# N_iteration: degree of precision
|
|
import kandinsky
|
|
def mandelbrot(N_iteration):
|
|
for x in range(320):
|
|
for y in range(222):
|
|
# Compute the mandelbrot sequence for the point c = (c_r, c_i) with start value z = (z_r, z_i)
|
|
z = complex(0,0)
|
|
# Rescale to fit the drawing screen 320x222
|
|
c = complex(3.5*x/319-2.5, -2.5*y/221+1.25)
|
|
i = 0
|
|
while (i < N_iteration) and abs(z) < 2:
|
|
i = i + 1
|
|
z = z*z+c
|
|
# Choose the color of the dot from the Mandelbrot sequence
|
|
rgb = int(255*i/N_iteration)
|
|
col = kandinsky.color(int(rgb),int(rgb*0.75),int(rgb*0.25))
|
|
# Draw a pixel colored in 'col' at position (x,y)
|
|
kandinsky.set_pixel(x,y,col))");
|
|
|
|
constexpr ScriptTemplate polynomialScriptTemplate("polynomial.py", "\x01" R"(from math import *
|
|
# roots(a,b,c) computes the solutions of the equation a*x**2+b*x+c=0
|
|
def roots(a,b,c):
|
|
delta = b*b-4*a*c
|
|
if delta == 0:
|
|
return -b/(2*a)
|
|
elif delta > 0:
|
|
x_1 = (-b-sqrt(delta))/(2*a)
|
|
x_2 = (-b+sqrt(delta))/(2*a)
|
|
return x_1, x_2
|
|
else:
|
|
return None)");
|
|
|
|
constexpr ScriptTemplate spiralScriptTemplate("spiral.py", "\x01" R"(from turtle import *
|
|
def spiral(N_iteration):
|
|
N_iteration *= 25
|
|
for i in range(N_iteration):
|
|
# Change pen color
|
|
gray=255-(i*255/N_iteration)
|
|
pencolor(int(gray),int(gray*0.75),int(gray*0.25))
|
|
# Draw a segment of the spiral
|
|
forward(i*0.1)
|
|
left(10))");
|
|
|
|
constexpr ScriptTemplate kochScriptTemplate("koch.py", "\x01" R"(from turtle import *
|
|
def koch(N_iteration):
|
|
# Save pencil size and set it to 1
|
|
prevSize = pensize()
|
|
pensize(1)
|
|
# Define inner function for recursion
|
|
def _koch(n, l):
|
|
if n == 1:
|
|
forward(l)
|
|
else:
|
|
_koch(n-1,l/3)
|
|
left(60)
|
|
_koch(n-1,l/3)
|
|
right(120)
|
|
_koch(n-1,l/3)
|
|
left(60)
|
|
_koch(n-1,l/3)
|
|
# Call inner function
|
|
_koch(N_iteration,140)
|
|
# Restore pencil size
|
|
pensize(prevSize))");
|
|
|
|
const ScriptTemplate * ScriptTemplate::Empty() {
|
|
return &emptyScriptTemplate;
|
|
}
|
|
|
|
const ScriptTemplate * ScriptTemplate::Factorial() {
|
|
return &factorialScriptTemplate;
|
|
}
|
|
|
|
const ScriptTemplate * ScriptTemplate::Fibonacci() {
|
|
return &fibonacciScriptTemplate;
|
|
}
|
|
|
|
const ScriptTemplate * ScriptTemplate::Mandelbrot() {
|
|
return &mandelbrotScriptTemplate;
|
|
}
|
|
|
|
const ScriptTemplate * ScriptTemplate::Polynomial() {
|
|
return &polynomialScriptTemplate;
|
|
}
|
|
|
|
const ScriptTemplate * ScriptTemplate::Spiral() {
|
|
return &spiralScriptTemplate;
|
|
}
|
|
|
|
const ScriptTemplate * ScriptTemplate::Koch() {
|
|
return &kochScriptTemplate;
|
|
}
|
|
|
|
}
|
|
|
|
|