Created
April 7, 2016 14:22
-
-
Save bhugueney/31d28ded6b46b0fd94e26f4f1f961c4e to your computer and use it in GitHub Desktop.
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
import math | |
import turtle | |
def rotate(a, v): | |
(x, y)= v | |
return (math.cos(a)*x - math.sin(a)*y, math.sin(a)*x + math.cos(a)*y) | |
def demo0(n): | |
angle_step= 2*math.pi/n | |
p= (0,100) | |
turtle.up() | |
for i in range(n+1): | |
turtle.goto(p) | |
p= rotate(angle_step, p) | |
turtle.down() | |
#TODO spirals ! | |
#demo0(5) | |
#demo0(int(turtle.numinput("rotations", "combien de côtés ?"))) | |
def add(v0, v1): | |
(x0, y0)=v0 | |
(x1, y1)=v1 | |
return (x0+x1, y0+y1) | |
def mult_scalar(k, v): | |
(x, y)= v | |
return (k*x, k*y) | |
def sub(v0, v1): | |
return add(v0, mult_scalar(-1, v1)) | |
def rotate_around(c, a, v): | |
return add(c, rotate(a, sub(v, c))) | |
def demo1_helper(c, p, n): | |
turtle.up() | |
for i in range(n+1): | |
turtle.goto(p) | |
p= rotate_around(c, 2*math.pi/n, p) | |
turtle.down() | |
def demo1(n): | |
demo1_helper((50, 25), (0,100), n) | |
#demo1(int(turtle.numinput("rotations", "combien de côtés ?"))) | |
def demo2(n0, n1): | |
p= (0, 100) | |
c= (0, 50) | |
for i in range(n0): | |
demo1_helper(c, p, n1) | |
c= rotate(2*math.pi/n0, c) | |
#demo2(int(turtle.numinput("rotations", "combien de polygones ?")), int(turtle.numinput("rotations", "combien de côtés ?"))) | |
def demo3(r0, r1): | |
p0= (0, r0) | |
p1= (0, r0+r1) | |
n= 512 | |
a_step= 2*math.pi/n | |
i_range=range(n) | |
turtle.up() | |
for i0 in i_range: | |
p1= rotate_around(p0, a_step*-3, p1) | |
turtle.goto(p1) | |
turtle.down() | |
p0= rotate(a_step, p0) | |
#demo3(50, -45) | |
def three_arms(rv0, rv1, rv2): | |
(r0, v0)= rv0 | |
(r1, v1)= rv1 | |
(r2, v2)= rv2 | |
p0= (0, r0) | |
p1= (0, r0+r1) | |
p2= (0, r0+r1+r2) | |
n= 512 | |
a_step= 2*math.pi/n | |
a=0 | |
turtle.up() | |
for i0 in range(n): | |
turtle.goto(rotate(a*v0, rotate_around(p0, a*v1, rotate_around(p1, a*v2, p2)))) | |
turtle.down() | |
a+= a_step | |
def demo4(size): | |
#size = L + M + S | |
# S= L/6 | |
# M= L/2 | |
l= size/(1+1/2+1/6) | |
three_arms((l,1), (l/2,4), (l/6,16)) | |
def demo5(size, n): | |
c= size*15/200 # n =10 | |
# c= size*4/200 # n= 8 | |
# c= size*10/200 # n= 9 | |
# c= size*25/200 # n= 20 | |
# size= L + M + S | |
# L= M+S+C | |
# 2*size= 2*L + C | |
l=(size+c)/2 | |
m_size= 1 + math.sqrt(2)/2 | |
s_size= (2-math.sqrt(2))/4 | |
m_s_ratio= m_size/s_size | |
# size- L = M (1+S/M) | |
m= (size - l)/(1+s_size/m_size) | |
s= (m/ m_size) * s_size | |
three_arms((l,1),(m,-n),(s, 4*n)) | |
def demo6(size): | |
# size= L + M + S = 3*M + 2*S=(3+1/3)M | |
# L= 2*M + S | |
# S=M/6 | |
m= size/(3+1/3) | |
s= m/6 | |
three_arms((2*m+s,1), (m,-12), (s, 12*6)) | |
#demo5(200, 10) | |
#demo4(300) | |
demo6(200) | |
# 11/12 * 2 * math.pi | |
turtle.exitonclick() | |
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment