from numpy import * from numpy.linalg import inv import pygame l = 1.0 div = 100 load = 1.0 rigid = 2.0 mouse = 0 col = 255 divLen = l/div dof = (div+1)*2 m = zeros((dof,dof)) z = zeros((dof,1)) u = zeros((dof,1)) def fillMatrix(r,dL): global u for i in range (2,dof-2,1): if i%2==0: m[i,i-2] = -12*r/dL**3 m[i,i-1] = -6*r/dL**2 m[i,i] = 24*r/dL**3 m[i,i+1] = 0 m[i,i+2] = -12*r/dL**3 m[i,i+3] = 6*r/dL**2 else: m[i,i-3] = 6*r/dL**2 m[i,i-2] = 2*r/dL m[i,i-1] = 0 m[i,i] = 8*r/dL m[i,i+1] = -6*r/dL**2 m[i,i+2] = 2*r/dL m[dof-2,dof-4] = -12*r/dL**3 m[dof-2,dof-3] = -6*r/dL**2 m[dof-2,dof-2] = 12*r/dL**3 m[dof-2,dof-1] = -6*r/dL**2 m[dof-1,dof-4] = 6*r/dL**2 m[dof-1,dof-3] = 2*r/dL m[dof-1,dof-2] = -6*r/dL**2 m[dof-1,dof-1] = 4*r/dL for i in range (0,dof,1): for j in range (0,2,1): m[i,j] = 0.0 m[j,i] = 0.0 m[0,0] = 1.0 m[1,1] = 1.0 npM = mat(m) npZ = mat(z) u = inv(npM)*npZ screen = pygame.display.set_mode((640, 480)) clock = pygame.time.Clock() running = 1 pygame.init() myfont = pygame.font.SysFont("monospace", 15) while running: event = pygame.event.poll() if event.type == pygame.QUIT: running = 0 screen.fill((0, 0, 0)) pygame.time.wait(5) mouseX = pygame.mouse.get_pos()[0] mouseY = pygame.mouse.get_pos()[1] if mouseX%2!=0: mouseX += 1 if mouseY%2!=0: mouseY += 1 load = (mouseY/24.0)-10.0 rigid = ((640-mouseX)/32.0) if rigid==0: rigid = 1 col = int(12.75*rigid) z[dof-2,0] = load fillMatrix(rigid,divLen) pointList = [] for i in range(0,dof-1,2): pointList.append([10+i*divLen*300,240+u[i,0]*50]) pygame.draw.lines(screen, (col, 255-col, 0), False, pointList, 7) loStr = "Load = " + str(load) rStr = "Rigidity = " + str(rigid) lMeter = myfont.render(loStr, 1, (255,255,255)) rMeter = myfont.render(rStr, 1, (255,255,255)) rLabel = myfont.render("<- Rigidity ->", 1, (255,255,255)) screen.blit(lMeter, (10, 10)) screen.blit(rMeter, (10, 24)) screen.blit(rLabel, (10, 300)) pygame.display.flip() # pygame.display.flip()