Machine à commande numérique
[latexpage]
Machine à commande numérique
Les machines à commande numériques (machines outils, machines de découpe ou de gravure, traceurs, imprimantes 3D) sont équipées d’ordinateurs exécutant des séquences préprogrammées de commandes de déplacement des outils (fraises, laser, jet d’eau, buse d’impression, …).
Ces séquences sont écrites dans un langage spécifique, en GCODE par exemple :
G01 X2.4 Y1.7
signifie : « déplacement en ligne droite du point courant jusqu’au point de coordonnées (2.4, 1.7) »
La spécificité de toutes ces machines, c’est qu’elles ont un mode de déplacement discret, par pas fixes.
Elle ne peuvent donc pas décrire des courbes parfaites mais seulement des courbes interpolées, avec une résolution déterminée par la technologie employée (moteur pas à pas, codeur incrémental, …)
Activité Python
Écrire une fonction droite() , acceptant comme argument les coordonnées de deux points $A$ et $B$, et qui renvoie deux vecteurs X et Y formants les points interpolant le segment $[AB]$ (à l’entier près).
Résultat attendu :
import matplotlib.pyplot as pl X, Y = droite(1, 1, 40, 30) pl.plot([1,40], [1,30], 'r') pl.plot(X, Y, 'ro') X, Y = droite(1, 1, 20, 30) pl.plot([1,20], [1,30], 'g') pl.plot(X, Y, 'go') X, Y = droite(25, 10, 1, 25) pl.plot([25,1], [10,25], 'b') pl.plot(X, Y, 'bo') pl.show() |
Correction
import matplotlib.pyplot as pl def droite(xA, yA, xB, yB): if abs(xA-xB) > abs(yA-yB): if xB > xA: p = 1 else: p = -1 lx = list(range(xA, xB+p, p)) ly = [] dy = (yB-yA)/(len(lx)-1) for i, x in enumerate(lx): ly.append(int(round(yA+dy*i))) return lx, ly else: return reversed(droite(yA, xA, yB, xB))[/hide]