Attention ! Cet interpréteur n’est pas totalement compatible avec Python3.
import tkinter
from math import sqrt, acos, asin
# Constantes:
w, h = 400, 400
x_min, x_max = -1, 1
y_min, y_max = -1, 1
finesse = 20
i = 1j # 1j est la notation pour i en Python
# Vérification divisibilité et divers calculs:
assert(not (w % finesse) and not (h % finesse))
w_cell, h_cell = w//finesse, h//finesse
x_step, y_step = (x_max - x_min)/finesse, (y_max - y_min)/finesse
x_nb_cells, y_nb_cells = w//w_cell, h//h_cell
# Conversion cellule -> nombre complexe:
def cell_to_complex(x_cell, y_cell):
a = x_min + x_cell * x_step
b = y_min + y_cell * y_step
return a + b * 1j
# Conversion triplet d’entiers -> code couleur hexa:
def RVB_to_hexa(r, v, b):
return '#%02x%02x%02x' % (r, v, b)
# Mise en place de la fenêtre graphique:
root = tkinter.Tk()
root.title('Tester ses complexes')
canvas = tkinter.Canvas(root, width=w, height=h)
canvas.pack()
def draw_cell(x_cell, y_cell, color):
x = x_cell * w_cell
y = h - y_cell * h_cell # in canvas, y=0 is at the top
canvas.create_rectangle((x, y, x + w_cell, y + h_cell), width=0, fill=color)
def nice_exit(event=None):
root.destroy()
exit()
root.bind('q', nice_exit)
# Quelques raccourcis mathématiques:
def pr(z): return z.real
def pi(z): return z.imag
def m(z): return 0 # À modifier !
# Quelques tests:
def test1(z):
if pr(z) == pi(z):
return True
else:
return False
def test2(z):
if pr(z) == -pi(z):
return True
# Par défaut, Python retourne None, considéré comme faux.
def test3(z):
if -pi(z) - 0.01 < pr(z) < -pi(z) + 0.01:
return True
def test4(z):
a = 0.5 - 0.5*i
if pr(z-a)**2 + pi(z-a)**2 < 1:
return True
def test5(z):
if sqrt(pr(z)**2 + pi(z)**2) >= 0.5 and pr(z)**2 + pi(z)**2 <= 1:
return True
# Parcours des cellules:
for y_cell in range(0, y_nb_cells):
print("Traitement ligne", y_cell + 1, "...")
for x_cell in range(0, x_nb_cells):
z = cell_to_complex(x_cell, y_cell)
if test1(z):
color = "white"
else:
color = "black"
draw_cell(x_cell, y_cell, color)
root.mainloop()