Como produzir ilustrações 2D simples para acompanhar respostas de geometria?

14

Na minha resposta sobre Transformações Afins , fiz algumas pequenas ilustrações para ajudar na explicação.

Como você cria rapidamente um PNG com capacidade de upload que expressa uma idéia geométrica ou matemática?

Esta pergunta foi elaborada para dar suporte à minha resposta pós-escrita, mas pretende solicitar outras soluções que possam beneficiar a rede SE em geral. Mas, para credibilidade, uma resposta deve estar vinculada a um post em que essa técnica tenha sido realmente usada, bem como uma parte suficiente de "instruções", se envolver mais do que algo óbvio como "Selecionar exportação no menu".

Há duas meta perguntas aqui e aqui sobre como colocar o escopo em questão, à luz das precedências que ele pode estabelecer para o nosso site.

luser droog
fonte
2
Pessoalmente, vejo essa pergunta mais no PostScript do que na computação gráfica.
Cifz 02/09/2015
1
@ Cifz certo isso se encaixaria melhor GD.SE. Mas não é por isso que não pode estar aqui.
joojaa 2/09/2015
@itz Acho que entendo o que você quer dizer. E se eu tirá-lo da pergunta e abri-lo para tikz e assíntota e outros enfeites.
Luser droog 02/09/2015
Estou respondendo aqui para mostrar que isso é um pouco opinativo como uma pergunta, e as respostas definitivamente serão. Talvez toda esta discussão deve viver em nossa Meta, como esta faz em GD.SE . Qualquer pensamento, @cifz
joojaa

Respostas:

13

Eu uso uma variedade de ferramentas, dependendo das necessidades particulares do momento. Tenho uma tendência para ferramentas gratuitas, pois não tenho acesso a coisas como Illustrator ou Mathematica.

Para fins gerais de arte vetorial, uso o Inkscape gratuito . Ele opera em arquivos .svg e também pode renderizá-los como .pngs de alta qualidade ou outros formatos de bitmap. Por exemplo, aqui está um diagrama que fiz no Inkscape para explicar o mapeamento UV :

Para gráficos de função 2D, costumo usar a calculadora gráfica Desmos , que tem a capacidade de permitir que você compartilhe gráficos on-line para que outras pessoas possam visualizá-los e modificá-los. Você também pode criar controles deslizantes que podem variar para tocar com os parâmetros da curva em tempo real. Por exemplo, aqui está uma função de nitidez configurável .

Para tarefas gráficas mais complexas que envolvem um pouco de programação, eu uso o Maxima , um sistema de álgebra computacional gratuito que também possui recursos gráficos. Usei o Maxima para criar os gráficos nesta resposta sobre os borrões gaussianos :

Isso era um pouco complexo demais para o Desmos, pois envolvia a criação programada de uma aproximação por partes de um gaussiano.

Para tarefas gráficas realmente estranhas que não são bem tratadas por qualquer outra coisa, usei o Python com o pacote svgwrite para gerar programaticamente diagramas em arquivos .svg. Eles podem ser retocados no Inkscape, se desejado, e renderizados em bitmaps usando o Inkscape ou o ImageMagick. Eu usei esse fluxo de trabalho para criar as imagens nesta postagem de blog sobre precisão de profundidade , assim:

Nesse caso, eu queria não apenas representar graficamente uma função, mas colocar marcas de escala de forma programática e não uniforme ao longo dos eixos e no gráfico, para ilustrar valores discretos do buffer de profundidade.

E, finalmente, se nada mais for suficiente, usarei Python com numpy e travesseiro para renderizar imagens pixel por pixel. Foi assim que criei as imagens de ruído Perlin nesta resposta (com a ajuda do pacote de ruído também, neste caso).

Nathan Reed
fonte
Nathan, você é quem escreveu isso sobre precisão de profundidade? Uau legal ... eu li essa coisa e ajudou muito! mundo pequeno: P
Alan Wolfe
12

Pessoalmente, minha escolha de veneno é o Adobe Illustrator. Outros aplicativos, como inkscape, Corel Draw e Xara Designer, também serão compatíveis. Em uma pitada, mesmo o PowerPoint funcionará. Embora eu não recomende pessoalmente o PowerPoint devido a problemas graves com seu modelo de dados, mesmo o mais difícil é o aplicativo de desenho mais implantado no mundo.

Também pode ser uma boa idéia ter um aplicativo gráfico disponível. Eu pessoalmente uso o Mathematica para isso, embora muitos outros aplicativos funcionem também. Ou, se você quiser, pode usar o Wolfram alpha, que é uma versão on-line gratuita do mathematica.

Isenção de responsabilidade: porque os exemplos são meus e o auto-apoio descarado leva com uma pitada de sal.

Ilustrador

A primeira coisa que você deve fazer em qualquer aplicativo de desenho vetorial é ativar a grade de encaixe . Isso reduz a tediosidade de colocar linhas com precisão. Uma das grandes razões pelas quais eu não gosto de usar o Inkscape é a maneira inferior de implementar esse encaixe. O PowerPoint, na verdade, vem com o encaixe da grade por padrão.

Não estou realmente satisfeito com o Illustrator, pois ele não preenche todas as minhas necessidades. Mas nenhum software até o momento (o Maya costumava preencher esse nicho, mas a autodesk aconteceu).

A segunda razão pela qual escolhi o Illustrator é que ele compreende postscript nativamente. Portanto, se eu precisar programar algo, posso fazê-lo rapidamente e os documentos existentes são atualizados à medida que meu código amadurece. A Imagem 3 é feita dessa maneira.

  • Recurso mostrando o acesso snap, postscript e script java ao ilustrador e links adiante.

Aqui estão alguns exemplos de desenhos que fiz na rede com o Illustrator, principalmente pelo poder do snap à grade:

Marcha do círculo

Imagem 1 : Uma das muitas imagens que desenhei no ilustrador neste site. Nota: Sou um ilustrador bastante experiente (às vezes comercial) e isso é extremamente simples para meus padrões.

A imagem da marcha do círculo é bem simples de fazer. Basta desenhar uma forma aleatória clicando em volta. Depois disso, desative o snap e deixe que as guias inteligentes façam seu trabalho por você. Desenhe linhas no ponto mais próximo da linha, faça círculos na linha e (apaguei as linhas-guia depois de terminar). Enxague e repita. Levei cerca de 3 a 5 minutos para desenhar a imagem depois de iniciar meu espaço de trabalho.

Onda de continuação

Imagem 2 : GD.SE onda continuação .

Embora essa imagem pareça muito mais elaborada, não é muito mais trabalhosa do que a primeira imagem. É mais técnico, portanto, além do snap à grade I e agora usando a tecla Shift para restringir as linhas a ângulos de 45 graus. Os preenchimentos de hachura são facilmente atribuídos apenas às regiões com a ferramenta de criação de formas do ilustrador. (exemplo de construtor de formas em uso , captura de tela)

imagem tetra

Imagem 3 : Às vezes, é mais fácil começar do zero no postscript. Imagem adicionada para postar em ENG.SE .

Finalmente, uma imagem que é realmente mais fácil de se digitar os valores no postscript. É relativamente fácil de fazer em postscript. Ainda fiz a tipografia no ilustrador. Embora desenhá-lo à mão não seja um grande problema, prefiro não fazê-lo, mas o farei se precisar fazer um julgamento por telefone.

Mathematica

O Mathematica é maravilhoso se você quiser explorar um pouco mais as coisas. A única desvantagem do Mathematica é que ele NÃO é barato. Mas pode fazer quase qualquer coisa rapidamente. Eu usei o Mathematica para algumas de minhas fotos com base em nurbs .

Uma das principais competências do Mathematicas é que é fácil desenvolver imagens mesmo bastante complexas, sem muito aborrecimento. Também pode animar facilmente sua imagem simples dentro do seu 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 na mesma imagem que os outros. Embrulhando-o dentro de uma tabela, conforme resulta em:

insira a descrição da imagem aqui

Imagem 4 : É fácil fazer animação dentro do editor de código usando o Mathematica.

joojaa
fonte
4

PostScript + ps2eps + mogrify

Para a resposta Affine Transformations , escrevi um programa postscript muito pequeno e, em seguida, salvei várias cópias com nomes diferentes e editei cada uma para realizar cada tarefa diferente: dimensionar, traduzir, girar. Por exemplo, aqui está o básico, ident.psque não altera as coordenadas entre o desenho vermelho e o preto. Aumentei um pouco as linhas vermelhas e sempre as desenhei primeiro, para que as duas apareçam bem sobrepostas e visíveis (IMO). Eu visualizei com o ghostscript com o comando vi (ex) :!gs %. ( todos os arquivos de origem )

%!
/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

Eu então usei o ps2epscomando from psutilspara calcular caixas delimitadoras automaticamente

$ 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.

E, finalmente, usou o convertcomando imagemagick para produzir imagens png cortadas. (Eu não pensei em uma maneira rápida de automatizar esta parte. Edit: como comentado, isso pode ser feito com mogrify -format png *.eps. Obrigado, 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 produz PNGs, prontos para upload.

$ 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
fonte
Eu realmente não vejo o ponto de gerar o encapsulamento com ps2eps, você pode apenas digitar o cabeçalho eps no seu modelo. Isso torna as instruções mais limpas (e o usuário precisa de menos dependências). Em vez de converter cada arquivo fazer separadamentemogrify -format png *.eps
joojaa
Legal. Eu não sabia mogrify. Para a ps2epspeça, calcula automaticamente (e adiciona) as informações da caixa delimitadora. Omitir essa parte, convertirá produzir imagens de tamanho de página
luser Droog
4

Eu apenas uso o Powerpoint para fazer esses diagramas e funciona muito bem assim que você se sentir confortável com as primitivas básicas. Ele suporta todas as operações simples, como rotação, translação, etc. e as revisões recentes também têm transformações de cisalhamento e 3D. Exemplos:

insira a descrição da imagem aqui

insira a descrição da imagem aqui

Aqui está um exemplo de um diagrama do Powerpoint que fiz para obter uma resposta.

Para diagramas mais complicados, especialmente em 3D, às vezes uso o Blender com materiais sombreados. Posso elaborar e mostrar exemplos se for relevante para sua pergunta.

Parece que o jsfiddle também é popular por aqui.

ap_
fonte
Concordo - é provável que minha resposta não seja mais válida porque não usei diagramas em nenhuma resposta até agora. Mas espero que isso aconteça em breve. Portanto, se estiver tudo bem com essa resposta por alguns dias, tenho certeza de que poderei encontrar uma resposta.
ap_
Feito! Minha resposta deve ser válida agora.
ap_ 13/09/2015
Excelente. Excluindo meus comentários anteriores.
Luser droog 13/09/2015
4

Não é a caixa de ferramentas definitiva que você pode estar procurando, mas apenas uma ferramenta extra que eu me uso: para gráficos 3D, o Blender pode ser útil. Especialmente se você usar o plug-in Export_SVG (disponível em http://dl.dropbox.com/u/16486113/Blender/archivos/temp/SVG/export_svg.py e http://blenderartists.org/forum/showthread.php? 282824-SVG-output-script )

Isso permite que você obtenha objetos 3d do Blenders como gráficos vetoriais no Illustrator ou no Inkscape. Acho que isso me dá um bom começo rápido para criar ilustrações 3D simples .

Permita-me colar um exemplo. (Neste exemplo, eu uso muitas cores, mas é claro, pode ser feito em preto e vermelho no branco)

insira a descrição da imagem aqui

Ideograma
fonte
certamente você ilustrador média e Inkscape (em vez de ilustrador e ilustrador)
joojaa
Eu com certeza faço! Tnx!
Ideograma 16/09
1

Eu uso o Powerpoint e vários pacotes CAD (caros). Escrevi macros do Powerpoint (código VBA) para fazer algumas coisas especiais, como desenhar os polígonos de controle das curvas de Bezier. Então eu uso a Ferramenta de Snipping padrão do Windows para capturar capturas de tela. aqui estão alguns exemplos:

insira a descrição da imagem aqui

insira a descrição da imagem aqui

insira a descrição da imagem aqui

insira a descrição da imagem aqui

E mais alguns exemplos do Math.SE

Um
Dois
Três
Quatro
Cinco

bubba
fonte
Powerpoint é realmente muito caro, considerando as coisas. Tudo bem, afinal a habilidade de desenho vem de você. Mas pelo menos tikz, inkscape, blrnder e postscript são muito mais baratos que o powerpoint.
Joojaa #
Eu sou velho, então o tempo é mais importante para mim do que dinheiro. O Inkscape é bom, mas não há como escrever um código tikz ou PostScript para produzir imagens.
bubba