Geometri cevaplarına eşlik etmek için basit 2D çizimler nasıl üretilir?


14

Afin Dönüşümler hakkındaki cevabımda açıklamaya yardımcı olacak bazı küçük çizimler yaptım.

Geometrik veya matematiksel bir fikri ifade eden yüklenebilir bir PNG'yi nasıl hızlı bir şekilde yaparsınız?

Bu soru postscript cevabımı destekleyecek şekilde tasarlandı, ancak SE ağına daha genel olarak fayda sağlayabilecek diğer çözümleri istemeye yönelikti. Ancak güvenilirlik için bir yanıt, bu tekniğin gerçekte kullanıldığı bir gönderinin yanı sıra "Menüden dışa aktarmayı seç" gibi bariz bir şeyden fazlasını içeriyorsa yeterli bir "nasıl yapılır" kısmına bağlanmalıdır.

Burada ve burada , sitemiz için belirleyebileceği öncelikler ışığında bu sorunun nasıl ele alınacağına ilişkin iki meta soru vardır .


2
Kişisel olarak bu soruyu PostScript'te bilgisayar grafiklerinden daha çok görüyorum.
cifz

1
@cifz doğru GD.SE daha iyi olurdu . Ama bu burada olamamanın bir nedeni değil.
joojaa

@citz Sanırım ne demek istediğini anlıyorum. Ya sorudan çıkarırsam ve tikz ve asimptot için açarım ve ne olursa olsun.
luser droog

Burada bunun bir soru olarak biraz tartışıldığını ve cevapların kesinlikle olacağını göstermek için cevap veriyorum. Belki de tüm bu iş parçacığı GD.SE'de olduğu gibi Meta'mızda yaşamalıdır . Herhangi bir düşünce, @cifz
joojaa

Yanıtlar:


13

Anın özel ihtiyaçlarına bağlı olarak çeşitli araçlar kullanıyorum. Illustrator veya Mathematica gibi şeylere erişemediğim için ücretsiz araçlara karşı bir önyargım var.

Genel vektör sanat amaçları için ücretsiz Inkscape kullanıyorum . .Svg dosyaları üzerinde çalışır ve aynı zamanda yüksek kaliteli .png veya diğer bitmap formatları olarak da oluşturabilir. Örneğin, UV eşlemesini açıklamak için Inkscape'te yaptığım bir diyagram :

2B işlev grafikleri için, çoğu zaman başkalarının görüntüleyebilmesi ve değiştirebilmesi için grafikleri çevrimiçi paylaşmanıza olanak tanıyan kullanışlı grafik hesap makinesi Desmos'u kullanıyorum . Ayrıca, gerçek zamanlı olarak eğri parametreleriyle oynatılacak şekilde değiştirilebilen kaydırıcılar da oluşturabilirsiniz. Örneğin, burada yapılandırılabilir bir bileme işlevi bulunmaktadır .

Programlama biraz içeren daha karmaşık grafik görevler için, kullandığım Maxima , ayrıca özellikleri grafiğe olan ücretsiz bir bilgisayar cebir sistemi. Maxima'yı bu cevapta Gauss bulanıklıkları hakkında grafikler oluşturmak için kullandım :

Bu, Desmos için biraz fazla karmaşıktı, çünkü programlı olarak Gaussian'ın parçalı bir yaklaşımını oluşturuyordu.

Başka hiçbir şey tarafından iyi işlenmeyen gerçekten garip grafik görevleri için, programsal olarak .svg dosyalarına diyagramlar oluşturmak için svgwrite paketiyle Python'u kullandım . Bunlar istenirse Inkscape içinde rötuşlanabilir ve Inkscape veya ImageMagick kullanılarak bitmap'lere dönüştürülebilir. Bu blog akışında derinlik hassasiyetinde görüntüler oluşturmak için bu iş akışını kullandım :

Bu durumda, sadece bir işlevi grafikle çizmekle kalmayıp, aynı zamanda ayrık derinlik tampon değerlerini göstermek için hem eksenler hem de grafik boyunca onay işaretlerini programsal ve eşit olmayan bir şekilde yerleştirmek istedim.

Ve son olarak, başka bir şey yetmezse, görüntüleri piksel piksel oluşturmak için Python'u numpy ve yastıkla kullanacağım. Bu cevapta Perlin gürültü görüntülerini bu şekilde yarattım ( bu durumda gürültü paketinin de yardımıyla ).


Nathan, derinlik hassasiyeti hakkında yazmış olan siz misiniz? Vay canına ... o şeyi okudum ve çok yardımcı oldu! küçük dünya: P
Alan Wolfe

12

Şahsen zehir seçimim Adobe Illustrator. Inkscape, Corel Draw, Xara Designer gibi diğer uygulamalar da yapacak. Bir tutam PowerPoint bile çalışır. Veri modeli ile ilgili ciddi sorunlar nedeniyle kişisel olarak PowerPoint'i önermememe rağmen, zor bile dünyanın en çok kullanılan çizim uygulamasıdır.

Elinizde bir grafik uygulaması olması da iyi bir fikir olabilir. Şahsen Mathematica'yı bunun için kullanıyorum, ancak diğer birçok uygulama da çalışacak. Veya isterseniz Mathramica'nın ücretsiz bir çevrimiçi sürümü olan Wolfram alpha kullanabilirsiniz.

Feragatname: Örnekler benim olduğundan ve utanmaz öz onaylama bir tutam tuz ile alınır.

ressam

Herhangi bir vektör çizim uygulamasında yapmanız gereken ilk şey , yapıştırma ızgarasını etkinleştirmektir . Bu, doğru çizgi yerleştirmenin sıkılığını azaltır. Inkscape'i kullanmak istemediğim en büyük nedenlerden biri, bu yapışmayı gerçekleştirmenin daha düşük yoludur. PowerPoint, varsayılan olarak ızgara yapıştırma ile birlikte gelir.

Tüm ihtiyaçlarımı karşılamadığı için Illustrator'dan gerçekten memnun değilim. Ama şu ana kadar hiçbir yazılım yok (Maya bu boşluğu doldururdu ama sonra autodesk oldu).

Illustrator'ı seçmemizin ikinci nedeni, postscript'i yerel olarak anlamasıdır. Eğer bir şey programlamak gerekirse Yani hızlı bir şekilde yapabilirim ve kodları olgunlaştıkça mevcut belgeler güncelleme Image 3 bu şekilde yapılır.

  • Illustrator ve ileri bağlantıları için ek, postscript ve java komut dosyası erişimini gösteren kaynak .

Ağda Illustrator ile yaptığım çizimlere bazı örnekler, çoğunlukla ızgara ek gücü ile:

Daire yürüyüşü

Resim 1 : Bu sitede illustrator uygulamasında çizdiğim birçok resimden biri. Not: Oldukça deneyimli bir Illustrator'um (bazen ticari) ve bu standartlara göre son derece basit.

Circle yürüyüş görüntüsünün yapılması oldukça basittir. Sadece tıklayarak rastgele bir şekil çizin. Bundan sonra çırpmayı devre dışı bırakın ve akıllı kılavuzların işinizi sizin için yapmasına izin verin. Çizgileri en yakın noktaya çizin, çizgiye daireler çizin ve (i tamamlandıktan sonra kılavuz çizgilerini sildim). Durulayın ve tekrarlayın. Çalışma alanımı başlattıktan sonra resmi çizmek yaklaşık 3-5 dakika sürdü.

Devam dalgası

Resim 2 : GD.SE Devam dalgası .

Bu görüntü daha ayrıntılı gibi görünse de, ilk görüntüden çok daha fazla iş değil. Bu nedenle, ızgara ek I'e ek olarak ve şimdi hatları 45 derecelik açılarla sınırlamak için shift tuşunu kullanarak daha tekniktir. Tarama dolguları, illüstratörün şekil oluşturucu aracıyla bölgelere kolayca atanır. ( kullanımda şekil oluşturucu örneği , ekran görüntüsü)

tetra görüntüsü

Resim 3 : Bazen postscript'te sıfırdan başlamak daha kolaydır. Görüntü üzerinde yayınlamak için ilave ENG.SE .

Son olarak, değerleri postscript'e yazarak gerçekten daha kolay bir görüntü. Postscript'te yapmak nispeten kolaydır. Hala tipografide illüstratörlük yaptım. Bunu elle çizerken tercih etmem büyük bir anlaşma değil, ama gözle karar araması yapmam gerekiyorsa yapacağım.

Mathematica

Eğer biraz daha keşfetmek istiyorsanız Mathematica harika. Mathematica için tek dezavantajı ucuz değil olmasıdır. Ancak neredeyse her şeyi hızlı bir şekilde yapabilir. Mathematica'yı nurbs bazında bazı resimlerim için kullandım .

Mathematicas'ın temel yeterliliklerinden biri, oldukça karmaşık resimler bile çok zorlanmadan geliştirilmesinin kolay olmasıdır. Ayrıca, editör içindeki basit resminizi kolayca canlandırabilir .

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

Diğerleriyle aynı resimde sonuçlar. Sonuç olarak bir tablonun içine sarılması :

resim açıklamasını buraya girin

Resim 4 : Animasyonu, Mathematica kullanarak kod düzenleyicinin içinde yapmak kolaydır.


4

PostScript + ps2eps + mogrify

İçin Afin Dönüşümler cevap , ben çok küçük bir postscript programını yazdı ve daha sonra farklı isimler altında birkaç kopya kaydedilir ve her biri farklı bir görevi yapmak için her biri düzenlendi: ölçek, döndürme çevirir. Örneğin, temel ident.psçizim, kırmızı çizim ve siyah çizim arasındaki koordinatları değiştirmek için hiçbir şey yapmaz. Kırmızı çizgileri biraz daha büyüttüm ve her zaman önce çizdim, böylece ikisi güzel bir şekilde üst üste binmiş ve görünür (IMO) görünüyor. Vi (ex) komutuyla ghostscript ile önizleme yaptım :!gs %. ( tüm kaynak dosyalar )

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

Daha sonra ps2epskomut psutilskutularını otomatik olarak sınırlama kutularını hesaplamak için kullandım

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

Ve son convertolarak kırpılmış png görüntüleri üretmek için imagemagick'in komutunu kullandı . (Ben bu bölümü otomatikleştirmek için hızlı bir yol düşünmüyordu. Düzenleme: yorum olarak, bu ile yapılabilir mogrify -format png *.eps. Teşekkürler, 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

Yüklemeye hazır PNG'ler üretir.

$ 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


Gerçekten ps2eps ile kapsül oluşturma noktasını görmüyorum, sadece şablonunuza eps üstbilgisini yazamazsınız. Talimatı daha temiz hale getirir (ve kullanıcının daha az bağımlı olması gerekir). Her dosyayı ayrı ayrı dönüştürmek yerinemogrify -format png *.eps
joojaa

Güzel. Bilmiyordum mogrify. İçin ps2epskısmen, otomatik olarak sınırlayıcı kutunun bilgi hesaplar (ve ekler). Bu bölümü convert
atlayarak

4

Powerpoint'i sadece bu diyagramları yapmak için kullanıyorum ve temel ilkelerinden memnun kaldığınızda harika çalışıyor. Döndürme, çeviri vb. Gibi tüm basit işlemleri destekler ve son revizyonlarda da kesme ve 3D dönüşümleri vardır. Örnekler:

resim açıklamasını buraya girin

resim açıklamasını buraya girin

Yanıt için yaptığım bir Powerpoint diyagramına bir örnek .

Daha karmaşık diyagramlar için, özellikle de 3D'de, bazen gölgesiz malzemelerle Blender kullanıyorum. Sorunuzla ilgiliyse örnekleri ayrıntılı olarak açıklayabilir ve gösterebilirim.

Görünüşe göre jsfiddle burada da popüler.


Katılıyorum --- cevabım artık geçerli değil çünkü şimdiye kadar hiçbir cevapta diyagram kullanmadım. Ama yakında olmasını bekliyorum. Bu cevabın birkaç gün takılması uygunsa, eminim bir cevap bulabileceğim.
ap_

Bitti! Cevabım şimdi geçerli olmalı.
ap_

Mükemmel. Önceki yorumlarım siliniyor.
luser droog 13:15

4

Aradığınız kesin araç kutusu değil, sadece kendimi kullandığım ekstra bir araç: 3d grafikler için Blender kullanışlı olabilir. Özellikle Export_SVG eklentisini kullanıyorsanız ( http://dl.dropbox.com/u/16486113/Blender/archivos/temp/SVG/export_svg.py ve http://blenderartists.org/forum/showthread.php? 282824-SVG-çıktı-script )

Bu, Blender 3d nesnelerini Illustrator veya Inkscape içinde vektör grafikleri olarak almanızı sağlar. Basit 3d çizimler oluşturmak için bana güzel bir hızlı başlangıç ​​verdiğini düşünüyorum .

Bir örnek yapıştırmama izin ver. (Bu örnekte çok fazla renk kullanıyorum, ancak tabii ki, hepsi bunun yerine siyah-kırmızı-beyaz yapılabilir)

resim açıklamasını buraya girin


elbette illustrator ve inkscape'i kastediyorsunuz (illustrator ve illustrator yerine)
joojaa

Eminim! Tnx!
İdeogram

1

Powerpoint ve çeşitli (pahalı) CAD paketleri kullanıyorum. Bezier eğrilerinin kontrol çokgenlerini çizmek gibi bazı özel şeyler yapmak için Powerpoint makroları (VBA kodu) yazdım. Sonra ekran görüntülerini yakalamak için standart Windows Snipping Tool'u kullanıyorum. İşte bazı örnekler:

resim açıklamasını buraya girin

resim açıklamasını buraya girin

resim açıklamasını buraya girin

resim açıklamasını buraya girin

Ve Math.SE'den bazı örnekler

Bir
İki
Üç
Dört
Beş


Powerpoint aslında oldukça pahalı. Tamam, tüm çizim becerileri sizden geldiğinde. Ancak en azından tikz, inkscape, blrnder ve postscript powerpoint'ten çok daha ucuzdur.
joojaa

Ben yaşlıyım, bu yüzden zaman benim için paradan daha önemli. Inkscape iyi, ancak resim üretmek için tikz veya Postscript kodu yazmak için zaman harcamamın yolu yok.
bubba
Sitemizi kullandığınızda şunları okuyup anladığınızı kabul etmiş olursunuz: Çerez Politikası ve Gizlilik Politikası.
Licensed under cc by-sa 3.0 with attribution required.