1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 102 103 104 105 106 107 108 109 110 111 112 113 114 115 116 117 118 119 120 121
| import argparse
from PPMMgr import *
from FctMgr import *
from config import *
parser = argparse.ArgumentParser(description='argparse')
parser.add_argument('-o', '--output', help='fichier de sortie', type='str', default='out.ppm')
parser.add_argument('-s', '--step', action='store',help='pas', type=float, default='0.1')
parser.add_argument('--xrange', metavar='range_x', action='store',help='intervalle horizontal', type=int, default='10')
parser.add_argument('--yrange', metavar='range_y', action='store', help='intervalle vertical', type=int, default='10')
parser.add_argument('--xcenter', metavar='center_x', action='store', help='centre horizontal', type=float, default='0')
parser.add_argument('--ycenter', metavar='center_y', action='store', help='centre vertical', type=int, default='0')
parser.add_argument('function', metavar='function', type=str, nargs='+', help='liste de fonctions')
args = parser.parse_args()
##association des variables définies à leur argument####################
range_x = args.xrange
range_y = args.yrange
step = args.step
filename=args.output
center_x = args.xcenter
center_y = args.ycenter
func = args.function
## sauvegarde du resultat dans le fichier 'filename'########################
matrixToFile(M, filename) )
jusque au cas où
from math import *
from config import *
def plot(range_x, range_y, step, function, center_x, center_y):
range_x = float(range_x)/2
range_y = float(range_y)/2
step = float(step)
center_x = center_x*TICK_SIZE
center_y = center_y*TICK_SIZE
## créer la matrice avec les dimensions HEIGHT et WIDTH
M = [ [BG for y_i in range(HEIGHT)] for x_i in range(WIDTH)]
## dessiner les axes
drawAxes(M, range_x, range_y, AXIS_COLOR)
m=0
while n<m:
color[n] = function[m]
drawFunction(M, range_x, range_y, function[m], step, color[n])
m+=1
## dessiner la fonction passée en paramètre
drawFunction(M, range_x, range_y, function, step, color)
print "Plotting ", function, "..."
return M
def xTox_i(x, WIDTH, range_x):
return int(WIDTH/2 * (x/range_x +1.0))
def drawAxes(M, range_x, range_y, color):
# Axes
drawLine(M, 0, HEIGHT/2, WIDTH-1, HEIGHT/2, color)
drawLine(M, WIDTH/2, 0, WIDTH/2, HEIGHT-1, color)
# Tics
for x in range (-1*int(range_x), int(range_x)):
x_i = xTox_i(x, WIDTH, range_x)
drawLine(M, x_i, HEIGHT/2 - TIC_SIZE, x_i, HEIGHT/2 + TIC_SIZE, color)
for y in range (-1*int(range_y), int(range_y)):
y_i = xTox_i(y, HEIGHT, range_y)
drawLine(M, WIDTH/2 - TIC_SIZE, y_i, WIDTH/2 + TIC_SIZE, y_i, color)
def drawFunction(M, range_x, range_y, function, step, color):
x = -range_x
x_old = y_old = None
while x <= range_x*1.01 :
y = eval(function)
# déterminer les points x_i et y_i
x_i = xTox_i(x, WIDTH, range_x)
y_i = xTox_i(-y, HEIGHT, range_y)
# dessiner une ligne entre (x_old,y_old) et (x_i,y_i)
if x_old != None :
drawLine(M, x_old, y_old, x_i, y_i, color)
x_old = x_i
y_old = y_i
x += step
def drawLine(M, x_0, y_0, x_1, y_1, color):
if abs(y_1 - y_0) > abs(x_1 - x_0):
# la pente est forte
m = float(x_1-x_0)/(y_1-y_0)
if y_0 > y_1 :
y_0, y_1 = y_1, y_0
x_0, x_1 = x_1, x_0
x_i = x_0
for y_i in range(y_0, y_1):
if 0<=x_i<WIDTH and 0<=y_i<HEIGHT :
M[int(x_i)][y_i] = color
x_i += m
else:
m = float(y_1-y_0)/(x_1-x_0)
y_i = y_0
for x_i in range(x_0, x_1):
if 0<=x_i<WIDTH and 0<=y_i<HEIGHT :
M[x_i][int(y_i)] = color
y_i += m |
Partager