personnage.py

Created by ph-moutou

Created on June 19, 2018

2.32 KB

Ce programme dessine une animation d’un personnage marchant. Taper marche(n), sur la calculatrice uniquement, pour obtenir n fois le passage du personnage. Le mouvement des membres est un peu rudimentaire: quelqu’un pourra t-il proposer un meilleur scénario?


from kandinsky import *
from math import *

def cercle(x0,y0,r,c):
  for i in range(4):
    xd=x0-int((r-i*0.5)/sqrt(2))
    xf=x0+int((r-i*0.5)/sqrt(2))
    for x in range(xd,xf+1):
      x1=x
      y1=y0+int(sqrt((r-i*0.5)**2-(x-x0)**2))
      set_pixel(x,y1,c)
      for j in range(3):
        x2=x0+y1-y0
        y2=y0+x0-x1
        set_pixel(x2,y2,c)
        x1,y1=x2,y2
        
def seg(xa,ya,xb,yb,c):
  if abs(yb-ya)<abs(xb-xa):
    if xb<xa:xa,xb,ya,yb=xb,xa,yb,ya
    m=(yb-ya)/(xb-xa)
    for i in range(xb-xa):
      set_pixel(xa+i,int(m*i+ya),c)
  else:
    if yb<ya:ya,yb,xa,xb=yb,ya,xb,xa
    m=(xb-xa)/(yb-ya)
    for i in range(yb-ya):
      set_pixel(int(m*i+xa),ya+i,c)

def personnage(p,c):
  gus=[[1,2],[2,3],[3,4],[2,5],
  [5,6],[2,7],[7,8],[8,9],[9,10],
  [7,11],[11,12],[12,13]]
  cercle(p[0][0],p[0][1],20,c)
  cercle(p[7][0],p[7][1],4,c)
  for i in range(len(gus)):
    seg(p[gus[i][0]][0],p[gus[i][0]][1],
    p[gus[i][1]][0],p[gus[i][1]][1],c)

def marche(n):
  for k in range(n):
    P=[[-20,37],[-18,57],[-17,63],#tete
    [-30,90],[-25,125],#bras gauche
    [-15,90],[-10,125],#bras droit
    [-15,130],#bassin
    [-35,171],[-40,199],[-35,208],#j.gau.
    [0,171],[-10,199],[-5,208]]#j.dr.
    R1,R2,R3,R4=30.0,62.514,45.62,73.39
    th1,th2,th3,th4=-0.45,0.32,0.1,-0.1
    c=999
    for t in range(80):
      personnage(P,color(255,255,255))
      for i in [0,1,2,7]:P[i][0]+=5
      co=cos((pi*t)/8)
      P[3][0]=P[2][0]+int(R1*sin(th1*co))
      P[3][1]=P[2][1]+int(R1*cos(th1*co))
      P[4][0]=P[2][0]+int(R2*sin(th2+th1*co))
      P[4][1]=P[2][1]+int(R2*cos(th2+th1*co))
      P[5][0]=P[2][0]+int(R1*sin(-th1*co))
      P[5][1]=P[2][1]+int(R1*cos(-th1*co))
      P[6][0]=P[2][0]+int(R2*sin(th2-th1*co))
      P[6][1]=P[2][1]+int(R2*cos(th2-th1*co))
      P[8][0]=P[7][0]+int(R3*sin(th3+th1*co))
      P[8][1]=P[7][1]+int(R3*cos(th3+th1*co))
      P[9][0]=P[7][0]+int(R4*sin(th4+th1*co))
      P[9][1]=P[7][1]+int(R4*cos(th4+th1*co))
      P[11][0]=P[7][0]+int(R3*sin(th3-th1*co))
      P[11][1]=P[7][1]+int(R3*cos(th3-th1*co))
      P[12][0]=P[7][0]+int(R4*sin(th4-th1*co))
      P[12][1]=P[7][1]+int(R4*cos(th4-th1*co))
      P[10][0]=P[9][0]+10
      P[10][1]=P[9][1]
      P[13][0]=P[12][0]+10
      P[13][1]=P[12][1]
      personnage(P,color(0,0,0))
      for i in range(999):c=(c**2)%123