¿Cómo producir ilustraciones 2D simples para acompañar las respuestas de geometría?

14

En mi respuesta sobre Transformaciones afines , hice algunas pequeñas ilustraciones para ayudar a la explicación.

¿Cómo se hace un PNG que se puede cargar rápidamente y que expresa una idea geométrica o matemática?

Esta pregunta se ideó para respaldar mi respuesta PostScript, pero tiene la intención de solicitar otras soluciones que puedan beneficiar a la red SE en general. Pero para tener credibilidad, una respuesta debe estar vinculada a una publicación en la que se haya utilizado esta técnica, así como a una porción de "cómo hacerlo" suficiente si involucra algo más que algo obvio como "Seleccionar exportación del menú".

Hay dos meta preguntas aquí y aquí con respecto a cómo abarcar esta pregunta a la luz de las precedentes que puede establecer para nuestro sitio.

luser droog
fuente
2
Personalmente, veo esta pregunta más en PostScript que en gráficos de computadora.
cifz
1
@cifz bien, esto encajaría mejor con GD.SE. Pero esa no es una razón por la que no puede estar aquí.
joojaa
@ Citz Creo que entiendo lo que quieres decir. ¿Qué pasa si lo saco de la pregunta y lo abro para tikz y asíntota y otras cosas?
luser droog
Estoy respondiendo aquí para mostrar que esto es un poco dudoso como una pregunta, y las respuestas definitivamente lo serán. Tal vez todo este hilo debe vivir en nuestra meta, como esto hace en GD.SE . Cualquier pensamiento, @cifz
joojaa

Respuestas:

13

Utilizo una variedad de herramientas dependiendo de las necesidades particulares del momento. Tengo un sesgo hacia las herramientas gratuitas, ya que no tengo acceso a cosas como Illustrator o Mathematica.

Para fines generales de arte vectorial, uso el Inkscape gratuito . Funciona en archivos .svg y también puede representarlos como .pngs de alta calidad u otros formatos de mapa de bits. Por ejemplo, aquí hay un diagrama que hice en Inkscape para explicar el mapeo UV :

Para los gráficos de funciones 2D, a menudo utilizo la calculadora gráfica en línea Desmos , que tiene la práctica capacidad de permitirle compartir gráficos en línea para que otros puedan verlos y modificarlos. También puede crear controles deslizantes que se pueden variar para jugar con parámetros de curva en tiempo real. Por ejemplo, aquí hay una función de enfoque configurable .

Para tareas gráficas más complejas que involucran un poco de programación, utilizo Maxima , un sistema de álgebra computacional gratuito que también tiene características gráficas. Utilicé Maxima para crear los gráficos en esta respuesta sobre desenfoques gaussianos :

Esto fue un poco demasiado complejo para Desmos, ya que implicaba crear programáticamente una aproximación por partes de un gaussiano.

Para tareas gráficas realmente extrañas que no son manejadas bien por nada más, he usado Python con el paquete svgwrite para generar diagramas mediante programación en archivos .svg. Estos se pueden retocar en Inkscape si se desea y renderizar en mapas de bits usando Inkscape o ImageMagick. Utilicé ese flujo de trabajo para crear las imágenes en esta publicación de blog sobre precisión de profundidad , como esta:

En este caso, no solo quería graficar una función, sino también colocar marcas de verificación de manera programática y no uniforme a lo largo de los ejes y el gráfico, para ilustrar valores discretos de búfer de profundidad.

Y finalmente, si nada más es suficiente, usaré Python con numpy y almohada para renderizar imágenes píxel por píxel. Así es como creé las imágenes de ruido Perlin en esta respuesta (con la ayuda del paquete de ruido también, en este caso).

Nathan Reed
fuente
Nathan, ¿eres el que escribió eso sobre la precisión de profundidad? Wow genial ... ¡leí esa cosa y me ayudó mucho! pequeño mundo: P
Alan Wolfe
12

Personalmente, mi elección de veneno es Adobe Illustrator. Otras aplicaciones como inkscape, Corel Draw, Xara Designer también funcionarán. En un apuro incluso PowerPoint funcionará. Aunque personalmente no recomiendo PowerPoint debido a problemas graves con su modelo de datos, incluso es difícil la aplicación de dibujo más implementada en el mundo.

También puede ser una buena idea tener una aplicación gráfica a mano. Personalmente uso Mathematica para esto, aunque muchas otras aplicaciones también funcionarían. O si lo desea, puede usar Wolfram alpha, que es una versión gratuita en línea de Mathica.

Descargo de responsabilidad: porque los ejemplos son míos y el desvergonzado autorretrato se toma con una pizca de sal.

Ilustrador

Lo primero que debe hacer en cualquier aplicación de dibujo vectorial es habilitar la cuadrícula de ajuste . Esto reduce el tedio de colocar líneas con precisión. Una de las principales razones por las que no me gusta usar Inkscape es la forma inferior en que implementa este ajuste. PowerPoint en realidad viene con el ajuste de cuadrícula de forma predeterminada.

Illustrator no me satisface realmente, ya que no satisface todas mis necesidades. Pero hasta ahora ningún software lo hace (Maya solía llenar este nicho pero luego ocurrió el autodesk).

La segunda razón por la que elijo Illustrator es porque entiende la posdata de forma nativa. Entonces, si necesito programar algo, puedo hacerlo rápidamente y los documentos existentes se actualizan a medida que mi código madura. La imagen 3 se realiza de esta manera.

  • Recurso que muestra acceso instantáneo, post script y script java al ilustrador y enlaces hacia adelante.

Estos son algunos ejemplos de dibujos que he realizado en la red con Illustrator, principalmente por el poder de la cuadrícula:

Marcha en círculo

Imagen 1 : Una de las muchas imágenes que dibujé en Illustrator en este sitio. Nota: Soy un ilustrador bastante experimentado (a veces comercial) y esto es extremadamente simple para mis estándares.

La imagen de la marcha del círculo es bastante simple de hacer. Simplemente dibuja una forma aleatoria haciendo clic alrededor. Después de esto, desactive el complemento y deje que las guías inteligentes hagan su trabajo por usted. Dibuje líneas al punto más cercano en la línea, haga círculos a la línea y (eliminé las líneas de guía después de haber terminado). Enjuague y repita. Me tomó unos 3-5 minutos dibujar la imagen una vez que comencé mi espacio de trabajo.

Ola de continuación

Imagen 2 : GD.SE ola continuación .

Si bien esta imagen parece bastante más elaborada, no es mucho más trabajo que la primera imagen. Es más técnico, por lo que, además de la referencia a la cuadrícula I, ahora usa la tecla Mayús para restringir las líneas a ángulos de 45 grados. Los rellenos de sombreado se asignan fácilmente a regiones con la herramienta de creación de formas de Illustrator. (ejemplo de generador de formas en uso , captura de pantalla)

imagen tetra

Imagen 3 : A veces es más fácil comenzar desde cero en PostScript. Imagen añadida poder escribir en el ENG.SE .

Finalmente, una imagen que realmente es más fácil de hacer escribiendo los valores en postscript. Es relativamente fácil de hacer en postscript. Todavía he hecho la tipografía en ilustrador. Si bien dibujar esto a mano no es un gran problema, prefiero no hacerlo, pero lo haré si debo hacer un juicio a simple vista.

Mathematica

Mathematica es maravilloso si quieres explorar las cosas un poco más. El único inconveniente de Mathematica es que NO es barato. Pero puede hacer casi cualquier cosa rápidamente. He usado Mathematica para algunas de mis fotos en base a nurbs .

Una de las competencias básicas de Mathematicas es que es fácil de desarrollar incluso imágenes bastante complejas sin mucha molestia. También puede animar fácilmente su imagen simple dentro de su editor .

Graphics[{
    orig = {
        Table[
            GeometricTransformation[
                Line[{{0, 0}, {50, 0}}],
            RotationTransform[ang]],
            {ang, 0, 3 Pi/2, Pi/2}
        ],
        Line[{{20, 0}, {30, 20}, {40, 0}}]
    },
    Red,
    GeometricTransformation[
        orig,
        RotationTransform[Pi/6]
    ]
}]

Resultados en la misma imagen que otros tienen. Envolviéndolo dentro de una tabla según los resultados:

ingrese la descripción de la imagen aquí

Imagen 4 : La animación es simple de hacer dentro del editor de código usando Mathematica.

joojaa
fuente
4

PostScript + ps2eps + mogrify

Para la respuesta de Transformaciones afines , escribí un programa postscript muy pequeño y luego guardé varias copias con diferentes nombres y edité cada una para hacer cada tarea diferente: escalar, traducir, rotar. Por ejemplo, aquí está el básico, ident.psque no hace nada para cambiar las coordenadas entre el dibujo rojo y el dibujo negro. Hice las líneas rojas un poco más grandes y siempre las dibujé primero, por lo que las dos aparecen muy bien superpuestas y visibles (IMO). Preestimé con ghostscript con el comando vi (ex) :!gs %. ( todos los archivos fuente )

%!
/axis {
    currentpoint 4 { 
        2 copy moveto
            50 0 lineto
            90 rotate
    } repeat pop pop 
} def 
/shape {
    20 0 moveto
    30 20 lineto
    40 0 lineto
    closepath
} def 

100 100 translate

gsave
% do transform here
currentlinewidth 1.5 mul setlinewidth
1 0 0 setrgbcolor
0 0 moveto axis shape stroke
grestore

0 0 moveto axis shape stroke

showpage

Luego usé el ps2epscomando de psutilspara calcular automáticamente los cuadros delimitadores

$ ps2eps -f *.ps
Input files: ident.ps rotate.ps scale.ps skewx.ps skewy.ps translate.ps
Processing: ident.ps
Calculating Bounding Box...ready. %%BoundingBox: 50 50 150 150
Creating output file ident.eps ... ** Warning **: Weird heading line -- %! -- ready.
Processing: rotate.ps
Calculating Bounding Box...ready. %%BoundingBox: 50 50 150 150
Creating output file rotate.eps ... ** Warning **: Weird heading line -- %! -- ready.
Processing: scale.ps
Calculating Bounding Box...ready. %%BoundingBox: 25 25 175 175
Creating output file scale.eps ... ** Warning **: Weird heading line -- %! -- ready.
Processing: skewx.ps
Calculating Bounding Box...ready. %%BoundingBox: 50 49 150 151
Creating output file skewx.eps ... ** Warning **: Weird heading line -- %! -- ready.
Processing: skewy.ps
Calculating Bounding Box...ready. %%BoundingBox: 49 50 151 150
Creating output file skewy.eps ... ** Warning **: Weird heading line -- %! -- ready.
Processing: translate.ps
Calculating Bounding Box...ready. %%BoundingBox: 50 50 165 165
Creating output file translate.eps ... ** Warning **: Weird heading line -- %! -- ready.

Y finalmente usé el convertcomando de imagemagick para producir imágenes png recortadas. (No pensé en una forma rápida de automatizar esta parte. Editar: como se comentó, esto se puede hacer con mogrify -format png *.eps. ¡Gracias, joojaa!)

$ convert ident.eps ident.png

josh@cadabra ~/affine
$ convert scale.eps scale.png

josh@cadabra ~/affine
$ convert rotate.eps rotate.png

josh@cadabra ~/affine
$ convert skewx.eps skewx.png

josh@cadabra ~/affine
$ convert translate.eps translate.png

josh@cadabra ~/affine
$ convert skewy.eps skewy.png

Que produce PNG, listo para cargar.

$ ls -l *.png
-rw-r--r-- 1 josh None  587 Sep  1 21:16 ident.png
-rw-r--r-- 1 josh None 1431 Sep  1 21:21 rotate.png
-rw-r--r-- 1 josh None  798 Sep  1 21:19 scale.png
-rw-r--r-- 1 josh None 1133 Sep  1 21:22 skewx.png
-rw-r--r-- 1 josh None 1197 Sep  1 21:23 skewy.png
-rw-r--r-- 1 josh None  756 Sep  1 21:23 translate.png

luser droog
fuente
Realmente no veo el punto de generar la encapsulación con ps2eps, ¿no puede simplemente escribir el encabezado eps en su plantilla? Hace que la instrucción sea más limpia (y el usuario necesita menos dependencias). En lugar de convertir cada archivo por separado, hazlomogrify -format png *.eps
joojaa
Frio. No sabía acerca mogrify. Para la ps2epsparte, calcula automáticamente (y agrega) la información del cuadro delimitador. Omitiendo esa parte, convertproducirá imágenes de tamaño de página completa
luser droog
4

Solo uso Powerpoint para hacer tales diagramas y funciona muy bien tan pronto como te sientas cómodo con sus primitivas básicas. Admite todas las operaciones simples como rotación, traslación, etc. y las revisiones recientes también tienen cizallas y transformaciones 3D. Ejemplos:

ingrese la descripción de la imagen aquí

ingrese la descripción de la imagen aquí

Aquí hay un ejemplo de un diagrama de Powerpoint que hice para una respuesta.

Para diagramas más complicados, especialmente en 3D, a veces uso Blender con materiales sin sombra. Puedo elaborar y mostrar ejemplos si es relevante para su pregunta.

Parece que jsfiddle también es popular por aquí.

ap_
fuente
Estoy de acuerdo --- mi respuesta probablemente ya no sea válida porque no he usado diagramas en ninguna respuesta hasta ahora. Pero espero que eso suceda pronto. Entonces, si está bien que esta respuesta permanezca por unos días, estoy seguro de que podré encontrar una respuesta.
ap_
¡Hecho! Mi respuesta debería ser válida ahora.
ap_
Excelente. Eliminar mis comentarios anteriores
luser droog
4

No es la caja de herramientas definitiva que podría estar buscando, sino solo una herramienta adicional que uso yo mismo: para gráficos 3D, Blender podría ser útil. Especialmente si usa el complemento Export_SVG (disponible en http://dl.dropbox.com/u/16486113/Blender/archivos/temp/SVG/export_svg.py y http://blenderartists.org/forum/showthread.php? 282824-SVG-salida-script )

Esto le permite obtener objetos 3D de Blenders como gráficos vectoriales en Illustrator o Inkscape. Creo que me da un buen comienzo rápido para crear simples ilustraciones en 3D.

Permítame pegar un ejemplo. (En este ejemplo, uso muchos colores, pero por supuesto, en su lugar, todo se puede hacer negro y rojo sobre blanco)

ingrese la descripción de la imagen aquí

Ideograma
fuente
seguramente te refieres a ilustrador e inkscape (en lugar de ilustrador e ilustrador)
joojaa
¡Claro que si! Tnx!
Ideograma
1

Utilizo Powerpoint y varios paquetes CAD (caros). Escribí macros de Powerpoint (código VBA) para hacer algunas cosas especiales como dibujar los polígonos de control de las curvas de Bezier. Luego uso la herramienta de recorte de Windows estándar para tomar capturas de pantalla. Aquí hay unos ejemplos:

ingrese la descripción de la imagen aquí

ingrese la descripción de la imagen aquí

ingrese la descripción de la imagen aquí

ingrese la descripción de la imagen aquí

Y algunos ejemplos más de Math.SE

Uno
dos
tres
cuatro
cinco

bubba
fuente
Powerpoint es realmente bastante caro teniendo en cuenta las cosas. Está bien, después de que toda la habilidad de dibujo proviene de ti. Pero al menos tikz, inkscape, blrnder y postscript son mucho más baratos que powerpoint.
Joojaa
Soy viejo, así que el tiempo es más importante para mí que el dinero. Inkscape es bueno, pero no hay forma de que pase tiempo escribiendo tikz o código Postscript para producir imágenes.
bubba