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()
[hide for= »all » exclude= « administrator »]

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]

 

 

 

Vous aimerez aussi...

Laisser un commentaire

Votre adresse e-mail ne sera pas publiée. Les champs obligatoires sont indiqués avec *