# Geometría constructiva de sólidos

Con su nombre derivado del inglés CSG (Constructive Solid Geometry), la geometría constructiva de sólidos o GCS es una técnica usada para modelado sólido, que consiste en crear cuerpos complejos a partir de geometrías elementales (cubos, esferas, conos) combinándolos con operaciones booleanas como la unión y la intersección. La generación de geometrías elementales y su combinación con operaciones booleanas se suele expresar como código en un lenguaje de programación. Existen lenguajes ad hoc para esta técnica, y también numerosas bibliotecas para usar GCS con lenguajes populares.

## Primitivas

Se denominan primitivas las geometrías elementales disponibles para este tipo de modelado, que usualmente incluyenː
* cubos y paralelepípedos
* cilindros circulares y poligonales
* esferas y elipsoides
* conos de base poligonal, opcionalmente truncados
Las primitivas son los sólidos iniciales, objetos predefinidos en la aplicación de GCS y paramétricos (se les configuran dimensiones iniciales al momento de crearlas). El usuario modela partiendo de las primitivas disponibles y combinándolas para crear modelos complejos.
En la concepción de la geometría constructiva las primitivas forman un conjunto cerrado y el usuario no puede crear nuevas primitivas, sino solamente modelar combinando las primitivas disponibles. En la práctica las aplicaciones GCS suelen proporcionar al usuario medios para expresar otras geometrías iniciales. El caso más común es la extrusión de una figura 2Dː el usuario genera una polígono 2D arbitrario con segmentos, y a usa como plantilla para generar un sólido, dándole espesor es una tercera dimensión.

### Parámetros

El usuario incorpora una primitiva a su modelo creando una instancia de ésta, con una serie de parámetros, algunos generales y otros específicos de la primitiva, por ejemploː
* Escala
** tamaño de la primitiva
** comienza siendo de tamaño unitario, el tamaño final se expresa como un escalamiento compuesto en cada una de las tres dimensiones
** usualmente representado como la escala en los ejes cartesianos x, y, z
* Traslación (posición 3D del cuerpo)
** cada primitiva tiene un punto ancla usado para definir su posición
** este punto suele ser un vértice, en otros casos es el baricentro de la primitiva
* Rotación (orientación 3D)
** usualmente representada como una sucesión de 3 rotaciones alrededor de los ejes cartesianos x, y, z
** las primitivas se crean en las coordenadas canónicas, y requieren ser trasladadas y rotadas para lograr la pose correcta en el modelo
* Parámetros específicos de la primitiva
** por ejemplo, un cono y un cilindro requieren determinar la cantidad de lados del polígono regular que servirá de base

## Operaciones de construcción

El modelado se realiza mediante la combinación de primitivas. Algunas operaciones sobre cuerposː
* Unarias, sobre un cuerpo
** Traslación
** Rotación
** Escala
* Binarias, sobre dos cuerpos
** Unión
** Intersección
** Diferencia

## Aplicaciones

Esta técnica de modelado encuentra su nicho en el modelado mecánico, específicamente en el diseño paramétrico, donde se diseñan piezas con dimensiones y especificaciones técnicas precisas. Este tipo de diseño contrasta con el diseño artístico, más intuitivo y espontáneo. Por este motivo esta técnica de modelado casi no se utiliza fuera de la ingeniería.