import numpy as np
import matplotlib.pyplot as plt
from mpl_toolkits.mplot3d import Axes3D
# Definimos las funciones de las restricciones
def lijado(x, y):
return (960 - 10*x - 12*y) / 15
def pintura(x, y):
return (660 - 6*x - 8*y) / 12
def barnizado(x, y):
return (1080 - 12*x - 12*y) / 18
# Definimos los rangos para x y y
x = np.linspace(0, 50, 100)
y = np.linspace(0, 50, 100)
# Creamos una malla de puntos (x, y)
X, Y = np.meshgrid(x, y)
# Calculamos los valores z para cada restricción
Z_lijado = lijado(X, Y)
Z_pintura = pintura(X, Y)
Z_barnizado = barnizado(X, Y)
# Graficamos las restricciones
fig = plt.figure()
ax = fig.add_subplot(111, projection='3d')
# Restricción de tiempo de lijado
ax.plot_surface(X, Y, Z_lijado, alpha=0.5, cmap='viridis', edgecolor='none')
# Restricción de tiempo de pintura
ax.plot_surface(X, Y, Z_pintura, alpha=0.5, cmap='plasma', edgecolor='none')
# Restricción de tiempo de barnizado
ax.plot_surface(X, Y, Z_barnizado, alpha=0.5, cmap='inferno', edgecolor='none')
# Definimos los límites de los ejes
ax.set_xlim(0, 50)
ax.set_ylim(0, 50)
ax.set_zlim(0, 50)
# Etiquetas de los ejes
ax.set_xlabel('Sillas (x)')
ax.set_ylabel('Mesas para café (y)')
ax.set_zlabel('Mesas para comedor (z)')
plt.title('Restricciones de tiempo de fabricación')
plt.show()
aW1wb3J0IG51bXB5IGFzIG5wCmltcG9ydCBtYXRwbG90bGliLnB5cGxvdCBhcyBwbHQKZnJvbSBtcGxfdG9vbGtpdHMubXBsb3QzZCBpbXBvcnQgQXhlczNECgojIERlZmluaW1vcyBsYXMgZnVuY2lvbmVzIGRlIGxhcyByZXN0cmljY2lvbmVzCmRlZiBsaWphZG8oeCwgeSk6CiAgICByZXR1cm4gKDk2MCAtIDEwKnggLSAxMip5KSAvIDE1CgpkZWYgcGludHVyYSh4LCB5KToKICAgIHJldHVybiAoNjYwIC0gNip4IC0gOCp5KSAvIDEyCgpkZWYgYmFybml6YWRvKHgsIHkpOgogICAgcmV0dXJuICgxMDgwIC0gMTIqeCAtIDEyKnkpIC8gMTgKCiMgRGVmaW5pbW9zIGxvcyByYW5nb3MgcGFyYSB4IHkgeQp4ID0gbnAubGluc3BhY2UoMCwgNTAsIDEwMCkKeSA9IG5wLmxpbnNwYWNlKDAsIDUwLCAxMDApCgojIENyZWFtb3MgdW5hIG1hbGxhIGRlIHB1bnRvcyAoeCwgeSkKWCwgWSA9IG5wLm1lc2hncmlkKHgsIHkpCgojIENhbGN1bGFtb3MgbG9zIHZhbG9yZXMgeiBwYXJhIGNhZGEgcmVzdHJpY2Npw7NuClpfbGlqYWRvID0gbGlqYWRvKFgsIFkpClpfcGludHVyYSA9IHBpbnR1cmEoWCwgWSkKWl9iYXJuaXphZG8gPSBiYXJuaXphZG8oWCwgWSkKCiMgR3JhZmljYW1vcyBsYXMgcmVzdHJpY2Npb25lcwpmaWcgPSBwbHQuZmlndXJlKCkKYXggPSBmaWcuYWRkX3N1YnBsb3QoMTExLCBwcm9qZWN0aW9uPSczZCcpCgojIFJlc3RyaWNjacOzbiBkZSB0aWVtcG8gZGUgbGlqYWRvCmF4LnBsb3Rfc3VyZmFjZShYLCBZLCBaX2xpamFkbywgYWxwaGE9MC41LCBjbWFwPSd2aXJpZGlzJywgZWRnZWNvbG9yPSdub25lJykKIyBSZXN0cmljY2nDs24gZGUgdGllbXBvIGRlIHBpbnR1cmEKYXgucGxvdF9zdXJmYWNlKFgsIFksIFpfcGludHVyYSwgYWxwaGE9MC41LCBjbWFwPSdwbGFzbWEnLCBlZGdlY29sb3I9J25vbmUnKQojIFJlc3RyaWNjacOzbiBkZSB0aWVtcG8gZGUgYmFybml6YWRvCmF4LnBsb3Rfc3VyZmFjZShYLCBZLCBaX2Jhcm5pemFkbywgYWxwaGE9MC41LCBjbWFwPSdpbmZlcm5vJywgZWRnZWNvbG9yPSdub25lJykKCiMgRGVmaW5pbW9zIGxvcyBsw61taXRlcyBkZSBsb3MgZWplcwpheC5zZXRfeGxpbSgwLCA1MCkKYXguc2V0X3lsaW0oMCwgNTApCmF4LnNldF96bGltKDAsIDUwKQoKIyBFdGlxdWV0YXMgZGUgbG9zIGVqZXMKYXguc2V0X3hsYWJlbCgnU2lsbGFzICh4KScpCmF4LnNldF95bGFiZWwoJ01lc2FzIHBhcmEgY2Fmw6kgKHkpJykKYXguc2V0X3psYWJlbCgnTWVzYXMgcGFyYSBjb21lZG9yICh6KScpCgpwbHQudGl0bGUoJ1Jlc3RyaWNjaW9uZXMgZGUgdGllbXBvIGRlIGZhYnJpY2FjacOzbicpCnBsdC5zaG93KCkK