from turtle import * hideturtle() pf, h = 15, 4 cx, cy = 30, 43 # proportions ecran Numworks sol = (-7, 0, 0), (5, 0, 0), (5, 15, 0), (-7, 15, 0) fond = (-7, 15, 0), (-7, 15, 5), (5, 15, 5), (5, 15, 0) gauche = (-7, 0, 0), (-7, 15, 0), (-7, 15, 5), (-7, 0, 5) droite = (5, 0, 0), (5, 15, 0), (5, 15, 5), (5, 0, 5) chevet_cotes = (-7, 6, 0), (-5, 6, 0), (-5, 8, 0), (-5, 8, 1), (-5, 6, 1), (-7, 6, 1) chevet_haut = (-7, 6, 1), (-7, 8, 1), (-5, 8, 1), (-5, 6, 1) lit_cotes = (-7, 9, 0), (-1, 9, 0), (-1, 13, 0), (-1, 13, 1), (-1, 9, 1), (-7, 9, 1) lit_haut = (-7, 9, 1), (-1, 9, 1), (-1, 13, 1), (-7, 13, 1) armoire_cotes = (3, 10, 0), (5, 10, 0), (5, 10, 5), (3, 10, 5) armoire_face = (3, 10, 0), (3, 15, 0), (3, 15, 5), (3, 10, 5) cadre = (5, 6, 2), (5, 8, 2), (5, 8, 4), (5, 6, 4) def drte(*pts): (xa, ya), (xb, yb) = pts return (yb - ya, xa - xb, xa * yb - xb * ya) def persp(xyz): x, y, z = xyz pt1 = [x + y, 0] pt2 = [x - y, 0] if z != h: pt1[1] += z pt2[1] += z sol = solve22(drte(pt1, (-pf, h)), drte(pt2, (pf, h))) if z == h: return sol[0], h else: return sol def solve22(*eq): (a, b, e), (c, d, f) = eq det = a * d - b * c if det != 0: x = (e * d - b * f) / det y = (a * f - e * c) / det return [x, y] def polygon(p, coul): color(coul) penup() for (x, y) in p + [p[0]]: goto(cx * x, cy * y - 110) pendown() goto(cx * x, cy * y - 110) def poly(p, coul = 'black'): res = [] for (x, y, z) in p: res.append(persp((x, y, z))) polygon(res,coul) poly(sol, 'green') poly(fond, 'grey') poly(gauche, 'grey') poly(droite, 'grey') poly(chevet_cotes, 'red') poly(chevet_haut, 'red') poly(lit_cotes, 'blue') poly(lit_haut, 'blue') poly(armoire_cotes, 'brown') poly(armoire_face, 'brown') poly(cadre, 'pink')