Jak tworzyć proste ilustracje 2D towarzyszące odpowiedziom na geometrię?

14

W mojej odpowiedzi na temat transformacji afinicznych zrobiłem kilka ilustracji, które pomogą wyjaśnić.

Jak szybko utworzyć plik PNG z możliwością przesyłania, który wyraża geometryczną lub matematyczną ideę?

To pytanie zostało opracowane w celu wsparcia mojej odpowiedzi na PostScript, ale ma na celu pozyskanie innych rozwiązań, które mogą ogólnie przynieść korzyści sieci SE. Ale dla wiarygodności odpowiedź musi zawierać link do postu, w którym ta technika została faktycznie zastosowana, a także wystarczającą część „howto”, jeśli dotyczy czegoś więcej niż czegoś oczywistego, takiego jak „Wybierz eksport z menu”.

Istnieją dwa meta pytania tutaj i tutaj dotyczące sposobu, w jaki należy rozszerzyć to pytanie w świetle priorytetów, jakie może ustawić dla naszej witryny.

luser droog
źródło
2
Osobiście widzę to pytanie bardziej na PostScript niż na grafice komputerowej.
cifz
1
@cifz prawo byłoby to zmieścić GD.SE lepiej. Ale to nie jest powód, dla którego nie może tu być.
joojaa,
@citz Myślę, że rozumiem, co masz na myśli. Co jeśli wyjdę z pytania i otworzę to na tikz i asymptotę i tak dalej.
luser droog
Odpowiadam tutaj, aby pokazać, że jest to nieco opiniotwórcze pytanie, a odpowiedzi na pewno będą. Może cały ten wątek powinien żyć w naszym Meta, tak jak to robi na GD.SE . Wszelkie przemyślenia, @cifz
joojaa

Odpowiedzi:

13

Używam różnych narzędzi w zależności od konkretnych potrzeb w danym momencie. Mam tendencję do korzystania z bezpłatnych narzędzi, ponieważ nie mam dostępu do takich rzeczy jak Illustrator lub Mathematica.

Do ogólnych celów grafiki wektorowej korzystam z bezpłatnego Inkscape . Działa na plikach .svg i może również renderować je jako wysokiej jakości pliki .pngs lub inne formaty bitmap. Na przykład, oto schemat, który wykonałem w Inkscape, aby wyjaśnić mapowanie UV :

W przypadku wykresów funkcyjnych 2D często używam kalkulatora graficznego online Desmos , który ma przydatną funkcję udostępniania wykresów online, aby inni mogli je przeglądać i modyfikować. Możesz także tworzyć suwaki, które można zmieniać, aby grać z parametrami krzywej w czasie rzeczywistym. Na przykład tutaj jest konfigurowalna funkcja ostrzenia .

Do bardziej skomplikowanych zadań graficznych, które wymagają nieco programowania, używam Maxima , darmowego systemu algebry komputerowej, który również ma funkcje graficzne. Użyłem Maximy do stworzenia wykresów w tej odpowiedzi na temat rozmycia Gaussa :

Było to nieco zbyt skomplikowane dla Desmosa, ponieważ wymagało programowego stworzenia częściowego przybliżenia Gaussa.

Do naprawdę dziwnych zadań graficznych, które nie są dobrze obsługiwane przez nic innego, użyłem Pythona z pakietem svgwrite do programowego generowania diagramów w plikach .svg. Można je w razie potrzeby poprawić w Inkscape i renderować do map bitowych za pomocą Inkscape lub ImageMagick. Użyłem tego przepływu pracy do tworzenia obrazów w tym blogu z dokładnością do głębokości , jak to:

W tym przypadku chciałem nie tylko narysować wykres funkcji, ale programowo i nierównomiernie umieścić znaczniki wzdłuż osi i wykresu, aby zilustrować dyskretne wartości bufora głębokości.

I na koniec, jeśli nic więcej nie wystarczy, użyję Pythona z numpy i poduszką do renderowania obrazów piksel po pikselu. W ten sposób stworzyłem obrazy szumów Perlina w tej odpowiedzi ( w tym przypadku również za pomocą pakietu szumów ).

Nathan Reed
źródło
Nathan, to ty napisałeś o precyzji głębokości? Wow super ... przeczytałem to i to bardzo pomogło! mały świat: P
Alan Wolfe
12

Osobiście moim wyborem trucizny jest Adobe Illustrator. Zrobią to również inne aplikacje, takie jak inkscape, Corel Draw, Xara Designer. W skrócie nawet PowerPoint będzie działał. Chociaż nie polecam osobiście programu PowerPoint z powodu poważnych problemów z jego modelem danych, nawet trudna jest prawdopodobnie najbardziej rozpowszechniona aplikacja do rysowania na świecie.

Dobrym pomysłem może być również posiadanie aplikacji graficznej. Osobiście używam do tego Mathematiki, chociaż wiele innych aplikacji też by działało. Lub jeśli chcesz, możesz użyć Wolfram alpha, która jest bezpłatną wersją internetową matematyki.

Oświadczenie: Ponieważ przykłady są moje, a bezwstydne samouznanie przyjmuje się ze szczyptą soli.

Ilustrator

Pierwszą rzeczą, którą powinieneś zrobić w dowolnej aplikacji do rysowania wektorowego, jest włączenie siatki przyciągania . Zmniejsza to żmudność dokładnego umieszczania linii. Jednym z głównych powodów, dla których nie lubię korzystać z Inkscape, jest gorszy sposób implementacji tego przyciągania. PowerPoint faktycznie ma domyślnie przyciąganie do siatki.

Illustrator nie do końca mnie satysfakcjonuje, ponieważ nie spełnia wszystkich moich potrzeb. Ale jak dotąd żadne oprogramowanie tego nie robi (Maya wypełniała tę niszę, ale potem nastąpił autodesk).

Drugim powodem, dla którego wybrałem program Illustrator, jest to, że natywnie rozumie on PostScript. Więc jeśli muszę coś zaprogramować, mogę to zrobić szybko, a istniejące dokumenty aktualizują się, gdy mój kod dojrzewa. Obraz 3 jest wykonywany w ten sposób.

  • Zasób pokazujący dostęp do snap, postscript i java script do ilustratora i linki do przodu.

Oto kilka przykładów rysunków, które wykonałem w sieci za pomocą programu Illustrator, głównie za pomocą przyciągania siatki:

Koło marszu

Zdjęcie 1 : Jedno z wielu obrazów, które narysowałem w ilustratorze na tej stronie. Uwaga: Jestem dość doświadczonym programem Illustrator (czasami komercyjnym) i według moich standardów jest to bardzo proste.

Obraz marszu w Kręgu jest dość prosty do zrobienia. Po prostu narysuj losowy kształt, klikając. Po tym wyłącz przystawkę i pozwól inteligentnym przewodnikom wykonać pracę za Ciebie. Rysuj linie do najbliższego punktu na linii, twórz okręgi do linii i (usunąłem linie pomocnicze po tym, jak to zrobiłem). Wypłukać i powtórzyć. Po uruchomieniu obszaru roboczego narysowanie obrazu zajęło mi około 3-5 minut.

Fala kontynuacji

Obrazek 2 : GD.SE Kontynuacja fali .

Chociaż ten obraz wydaje się bardziej skomplikowany, nie jest on znacznie większy niż pierwszy obraz. Jest to bardziej techniczne, więc oprócz przyciągania siatki I i teraz używając klawisza Shift, aby ograniczyć linie do kątów 45 stopni. Wypełnienia kreskowania można łatwo przypisać do regionów za pomocą narzędzia do tworzenia kształtów programu Illustrator. (przykład użycia konstruktora kształtów , zrzut ekranu)

obraz tetra

Zdjęcie 3 : Czasami łatwiej jest zacząć od zera w PostScript. Obrazek dodany odpowiedzieć na ENG.SE .

Wreszcie obraz, który naprawdę łatwiej zrobić, wpisując wartości w PostScript. Jest to stosunkowo łatwe do zrobienia w PostScript. Nadal robiłem typografię w ilustratorze. Chociaż rysowanie tego ręcznie nie jest wielką rzeczą, wolę tego nie robić, ale zrobię to, jeśli będę musiał dokonać oceny za pomocą oka.

Matematyka

Mathematica jest cudowna, jeśli chcesz odkryć coś więcej. Jedyną wadą Mathematiki jest to, że NIE jest tania. Ale może zrobić prawie wszystko szybko. Użyłem Mathematica do niektórych moich zdjęć na podstawie przedmieść .

Jedna z kluczowych kompetencji Mathematicas polega na tym, że łatwo jest tworzyć nawet dość skomplikowane zdjęcia bez większych problemów. Może również łatwo animować prosty obraz w edytorze .

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]
    ]
}]

Wyniki na tym samym obrazie, co inni. Zawijanie go w tabeli zgodnie z:

wprowadź opis zdjęcia tutaj

Zdjęcie 4 : Animacja jest prosta do wykonania w edytorze kodu za pomocą Mathematica.

joojaa
źródło
4

PostScript + ps2eps + mogrify

Dla odpowiedzi Affine Transformations napisałem bardzo mały program postscriptowy, a następnie zapisałem kilka kopii pod różnymi nazwami i edytowałem każdy z nich, aby wykonać każde inne zadanie: skalować, tłumaczyć, obracać. Na przykład tutaj jest podstawowy, ident.psktóry nie robi nic, aby zmienić współrzędne między rysunkiem czerwonym a rysunkiem czarnym. Sprawiłem, że czerwone linie są trochę większe i zawsze rysuję je jako pierwsze, więc oba pokazują się ładnie nałożone i widoczne (IMO). Podglądałem za pomocą ghostscript za pomocą polecenia vi (ex) :!gs %. ( wszystkie pliki źródłowe )

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

Następnie użyłem ps2epspolecenia z psutilsdo automatycznego obliczenia obwiedni

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

I w końcu użyłem convertpolecenia imagemagick do stworzenia przyciętych obrazów png. (Nie pomyślałem o szybkim sposobie zautomatyzowania tej części. Edytuj: jak skomentowano, można to zrobić za pomocą mogrify -format png *.eps. Dzięki, 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

Który produkuje pliki PNG, gotowe do przesłania.

$ 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
źródło
Naprawdę nie widzę sensu generowania enkapsulacji za pomocą ps2eps, nie mogę po prostu wpisać nagłówka eps w szablonie. Sprawia, że ​​instrukcja jest czystsza (a użytkownik potrzebuje mniej zależności). Zamiast konwertować każdy plik osobnomogrify -format png *.eps
joojaa,
Chłodny. Nie wiedziałam o tym mogrify. Dla ps2epsczęści automatycznie oblicza (i dodaje) informacje ramki granicznej. Pominięcie tej części convertspowoduje utworzenie pełnowymiarowych obrazów
luser droog
4

Po prostu używam Powerpoint do tworzenia takich diagramów i działa świetnie, gdy tylko poczujesz się komfortowo z jego podstawowymi prymitywami. Obsługuje wszystkie proste operacje, takie jak obrót, tłumaczenie itp., A najnowsze wersje mają również transformacje ścinania i 3D. Przykłady:

wprowadź opis zdjęcia tutaj

wprowadź opis zdjęcia tutaj

Oto przykład schematu Powerpoint, który przygotowałem dla odpowiedzi.

Aby uzyskać bardziej skomplikowane diagramy, szczególnie w 3D, czasami używam Blendera z materiałami bezcieniowymi. Mogę opracować i pokazać przykłady, jeśli są one odpowiednie dla twojego pytania.

Wygląda na to, że jsfiddle jest tutaj również popularny.

ap_
źródło
Zgadzam się - moja odpowiedź prawdopodobnie nie jest już ważna, ponieważ do tej pory nie korzystałem z diagramów. Ale spodziewam się, że stanie się to wkrótce. Jeśli więc odpowiedź będzie w porządku przez kilka dni, jestem pewien, że będę w stanie znaleźć odpowiedź.
ap_
Gotowy! Moja odpowiedź powinna być teraz aktualna.
ap_
Doskonały. Usuwanie moich wcześniejszych komentarzy.
luser droog,
4

Nie jest to ostateczny zestaw narzędzi, którego możesz szukać, ale tylko dodatkowe narzędzie, którego sam używam: w przypadku grafiki 3D Blender może się przydać. Zwłaszcza jeśli korzystasz z wtyczki Export_SVG (dostępnej na stronie http://dl.dropbox.com/u/16486113/Blender/archivos/temp/SVG/export_svg.py i http://blenderartists.org/forum/showthread.php? 282824-SVG-skrypt-wyjściowy )

Pozwala to uzyskać obiekty 3D Blendera jako grafikę wektorową w Illustrator lub Inkscape. Uważam, że daje mi to szybki start do tworzenia prostych ilustracji 3D.

Pozwól mi wkleić przykład. (W tym przykładzie używam wielu kolorów, ale oczywiście można to wszystko zrobić czarno-czerwono-na białym).

wprowadź opis zdjęcia tutaj

Ideogram
źródło
na pewno masz na myśli ilustratora i inkscape (zamiast ilustratora i ilustratora)
joojaa 16.09.2015
Na pewno tak! Tnx!
Ideogram
1

Używam Powerpoint i różnych (drogich) pakietów CAD. Napisałem makra programu Powerpoint (kod VBA), aby wykonać specjalne czynności, takie jak narysowanie wielokątów kontrolnych krzywych Beziera. Następnie używam standardowego narzędzia Windows Snipping Tool do robienia zrzutów ekranu. Oto kilka przykładów:

wprowadź opis zdjęcia tutaj

wprowadź opis zdjęcia tutaj

wprowadź opis zdjęcia tutaj

wprowadź opis zdjęcia tutaj

I kilka innych przykładów z Math.SE

Jeden
Dwa
Trzy
Cztery
Pięć

bubba
źródło
Powerpoint jest naprawdę dość drogi, biorąc pod uwagę różne rzeczy. Jest ok, przecież umiejętność rysowania pochodzi od ciebie. Ale przynajmniej tikz, inkscape, blrnder i postscript są znacznie tańsze niż powerpoint.
joojaa,
Jestem stary, więc czas jest dla mnie ważniejszy niż pieniądze. Inkscape jest dobry, ale nie ma mowy, żebym spędził czas na pisaniu tikz lub kodu Postscript do tworzenia zdjęć.
bubba