วิธีการสร้างภาพประกอบ 2D อย่างง่ายเพื่อตอบคำตอบรูปทรงเรขาคณิต?


14

ในคำตอบของฉันเกี่ยวกับAffine Transformationsฉันทำภาพประกอบเล็กน้อยเพื่อช่วยอธิบาย

คุณสร้าง PNG ที่สามารถอัปโหลดได้อย่างรวดเร็วซึ่งแสดงความคิดทางเรขาคณิตหรือคณิตศาสตร์ได้อย่างไร

คำถามนี้ได้รับการออกแบบมาเพื่อรองรับคำตอบแบบโพสต์ของฉัน แต่มีจุดประสงค์เพื่อขอคำแนะนำอื่น ๆ ที่อาจเป็นประโยชน์ต่อเครือข่าย SE โดยทั่วไป แต่เพื่อความน่าเชื่อถือคำตอบต้องเชื่อมโยงไปยังโพสต์ที่ใช้เทคนิคนี้ในความเป็นจริงเช่นเดียวกับส่วน "howto" ที่เพียงพอหากเกี่ยวข้องมากกว่าสิ่งที่ชัดเจนเช่น "เลือกส่งออกจากเมนู"

มีเมตาคำถามสองข้อที่นี่และที่นี่เกี่ยวกับวิธีการกำหนดขอบเขตคำถามนี้ตามลำดับความสำคัญที่อาจมีสำหรับไซต์ของเรา


2
ฉันเองเห็นคำถามนี้เพิ่มเติมเกี่ยวกับ PostScript มากกว่าที่เป็นในคอมพิวเตอร์กราฟิก
cifz

1
@cifz ใช่นี่จะเหมาะกับGD.SEดีกว่า แต่นั่นไม่ใช่เหตุผลที่มันไม่สามารถอยู่ที่นี่
joojaa

@ citz ฉันคิดว่าฉันเห็นสิ่งที่คุณหมายถึง ถ้าฉันเอามันออกมาจากคำถามและเปิดมันขึ้นมาสำหรับ tikz และ asymptote และ whatnot
luser droog

ฉันตอบที่นี่เพื่อแสดงให้เห็นว่านี่เป็นความเห็นที่ค่อนข้างจะเป็นคำถามและคำตอบจะเป็นอย่างแน่นอน นี้อาจกระทู้ทั้งหมดควรอยู่ใน Meta ของเราเช่นนี้ไม่เกี่ยวกับGD.SE ความคิดใด ๆ @cifz
joojaa

คำตอบ:


13

ฉันใช้เครื่องมือที่หลากหลายขึ้นอยู่กับความต้องการในขณะนั้น ฉันมีอคติต่อเครื่องมือฟรีเนื่องจากฉันไม่สามารถเข้าถึงสิ่งต่าง ๆ เช่น Illustrator หรือ Mathematica

สำหรับวัตถุประสงค์ของศิลปะเวกเตอร์ทั่วไปผมใช้ฟรีInkscape มันทำงานกับไฟล์. svg และยังสามารถแสดงผลเป็น. pngs หรือรูปแบบบิตแมปอื่น ๆ ที่มีคุณภาพสูง ตัวอย่างเช่นนี่คือแผนภาพที่ฉันทำใน Inkscape เพื่ออธิบายการทำแผนที่ UV :

สำหรับกราฟฟังก์ชั่น 2D ฉันมักจะใช้Desmosเครื่องคิดเลขกราฟออนไลน์ซึ่งมีความสามารถที่สะดวกในการให้คุณแบ่งปันกราฟออนไลน์เพื่อให้ผู้อื่นสามารถดูและแก้ไขได้ คุณยังสามารถสร้างตัวเลื่อนที่สามารถปรับเปลี่ยนให้เล่นกับพารามิเตอร์เส้นโค้งแบบเรียลไทม์ ตัวอย่างเช่นนี่คือฟังก์ชั่นการลับคมที่กำหนดค่าได้

สำหรับงานกราฟที่ซับซ้อนมากขึ้นซึ่งเกี่ยวข้องกับการเขียนโปรแกรมเล็กน้อยฉันใช้Maximaระบบพีชคณิตคอมพิวเตอร์ฟรีที่มีคุณสมบัติการสร้างกราฟ ฉันใช้ Maxima เพื่อสร้างกราฟในคำตอบนี้เกี่ยวกับ Gaussian blurs :

นี่เป็นสิ่งที่ซับซ้อนเกินไปสำหรับ Desmos เนื่องจากมันเกี่ยวข้องกับการเขียนโปรแกรมแบบเกาส์เป็นชิ้น ๆ

สำหรับงานกราฟที่แปลก ๆ ที่ไม่ได้รับการจัดการอย่างดีฉันได้ใช้ Python กับแพ็คเกจsvgwriteเพื่อสร้างไดอะแกรมเป็นโปรแกรมเป็นไฟล์. svg สามารถสัมผัสสิ่งเหล่านี้ใน Inkscape หากต้องการและแสดงผลเป็นบิตแมปโดยใช้ Inkscape หรือ ImageMagick ฉันใช้เวิร์กโฟลว์นั้นเพื่อสร้างภาพในโพสต์บล็อกนี้เกี่ยวกับความแม่นยำเชิงลึกเช่นนี้

ในกรณีนี้ฉันต้องการที่จะไม่เพียงกราฟฟังก์ชั่น แต่ทำเครื่องหมายถูกโดยทางโปรแกรมและไม่เป็นไปตามทั้งแกนและกราฟเพื่อแสดงค่าบัฟเฟอร์ความลึกแบบไม่ต่อเนื่อง

และในที่สุดหากไม่มีสิ่งใดเพียงพอฉันจะใช้ Python กับnumpyและหมอนเพื่อแสดงภาพแบบพิกเซลต่อพิกเซล นั่นคือวิธีที่ฉันสร้างภาพสัญญาณรบกวน Perlin ในคำตอบนี้ (ด้วยความช่วยเหลือของชุดเสียงในกรณีนี้)


นาธันคุณเป็นคนที่เขียนเกี่ยวกับความแม่นยำระดับลึก? ว้าวเจ๋งดี ... ฉันอ่านมันแล้วก็ช่วยได้มาก! โลกใบเล็ก: P
Alan Wolfe

12

โดยส่วนตัวแล้วการเลือกใช้พิษของฉันคือ Adobe Illustrator แอพอื่น ๆ เช่น inkscape, Corel Draw, Xara Designer จะทำเช่นกัน แม้แต่นิดเดียว PowerPoint ก็ใช้งานได้ แม้ว่าฉันจะไม่แนะนำให้ใช้ PowerPoint เป็นการส่วนตัวเนื่องจากปัญหาร้ายแรงเกี่ยวกับรูปแบบข้อมูลของตัวเองแม้ความยากลำบากอาจเป็นแอพวาดภาพที่ใช้งานได้มากที่สุดในโลก

มันอาจเป็นความคิดที่ดีที่จะมีโปรแกรมกราฟอยู่ในมือ ฉันเองใช้ Mathematica สำหรับเรื่องนี้ถึงแม้ว่าแอพอื่น ๆ จะใช้ได้เช่นกัน หรือถ้าคุณต้องการคุณสามารถใช้ Wolfram alpha ซึ่งเป็น mathematica รุ่นออนไลน์ได้ฟรี

คำเตือน: เนื่องจากตัวอย่างเป็นของฉันและไร้ที่ติการรับรองตนเองใช้เวลากับเกลือ

ผู้วาดภาพประกอบ

สิ่งแรกที่คุณควรทำในแอปวาดภาพเวกเตอร์คือการเปิดใช้งานตาราง snapping สิ่งนี้จะช่วยลดความน่าเบื่อของการวางสายอย่างแม่นยำ หนึ่งในเหตุผลใหญ่ที่ฉันไม่ชอบใช้ Inkscape เป็นวิธีที่ด้อยกว่าที่ใช้ snapping นี้ โดยค่าเริ่มต้น PowerPoint จะมาพร้อมกับการจัดตาราง

ฉันไม่พอใจกับ Illustrator เพราะไม่ได้ตอบสนองทุกความต้องการของฉัน แต่ยังไม่มีซอฟต์แวร์มายา (มายาใช้เติมช่องนี้ แต่เกิดขึ้นกับ Autodesk)

เหตุผลที่สองที่ฉันเลือก Illustrator คือมันเข้าใจ PostScript อย่างแท้จริง ดังนั้นหากฉันต้องการโปรแกรมสิ่งที่ฉันสามารถทำได้อย่างรวดเร็วและการปรับปรุงเอกสารที่มีอยู่เป็นรหัสของฉันเมื่อครบกำหนด Image 3 จะทำเช่นนี้

  • ทรัพยากรที่แสดง snap, postscript และ java script เพื่อเข้าถึงผู้วาดภาพประกอบและลิงก์ไปข้างหน้า

นี่คือตัวอย่างบางส่วนของภาพวาดที่ฉันได้ทำข้ามเครือข่ายด้วย Illustrator ซึ่งส่วนใหญ่มาจาก power of grid snap:

วงกลมเดือนมีนาคม

ภาพที่ 1 : หนึ่งในหลาย ๆ ภาพที่ฉันวาดด้วยผู้วาดภาพประกอบบนเว็บไซต์นี้ หมายเหตุ: ฉันเป็นนักวาดภาพประกอบที่มีประสบการณ์มาก (บางครั้งในเชิงพาณิชย์) และนี่เป็นมาตรฐานที่ง่ายมาก

ภาพวงกลมในเดือนมีนาคมค่อนข้างง่ายที่จะทำ เพียงแค่วาดรูปร่างแบบสุ่มโดยคลิกไปรอบ ๆ หลังจากปิดการใช้งาน snap และให้คำแนะนำอัจฉริยะทำงานให้คุณ ลากเส้นไปยังจุดที่ใกล้ที่สุดบนบรรทัดสร้างวงกลมไปที่บรรทัดและ (ฉันลบเส้นบอกแนวหลังจากทำเสร็จแล้ว) ล้างและทำซ้ำ ฉันใช้เวลาในการวาดภาพประมาณ 3-5 นาทีเมื่อฉันเริ่มพื้นที่ทำงาน

คลื่นต่อเนื่อง

ภาพที่ 2 : GD.SE คลื่นต่อเนื่อง

ในขณะที่ภาพนี้ดูเหมือนจะค่อนข้างซับซ้อน แต่ก็ไม่ได้ผลมากไปกว่าภาพแรก มันเป็นเรื่องทางเทคนิคมากกว่านั้นนอกเหนือจาก grid snap I และตอนนี้ใช้ปุ่ม shift เพื่อ จำกัด บรรทัดเป็นมุม 45 องศา การเติมแฮทช์นั้นง่ายต่อการกำหนดให้กับภูมิภาคด้วยเครื่องมือสร้างรูปร่างของนักวาดภาพประกอบ (ตัวอย่างของการใช้งานตัวสร้างรูปร่างการจับภาพหน้าจอ)

ภาพ tetra

Image 3 : บางครั้งมันง่ายกว่าที่จะเริ่มจากศูนย์ใน postscript เพิ่มรูปภาพในโพสต์ในENG.SEแล้ว

ในที่สุดภาพที่ทำได้ง่ายกว่าโดยการพิมพ์ค่าลงใน postscript มันค่อนข้างง่ายที่จะทำใน postscript ฉันยังพิมพ์ตัวอักษรในการ์ตูนได้ ในขณะที่วาดภาพนี้ด้วยมือไม่ใช่เรื่องใหญ่ที่ฉันไม่ชอบ แต่ฉันจะทำมันถ้าฉันต้องทำการเรียกร้องด้วยสายตา

มาติกา

Mathematica นั้นยอดเยี่ยมถ้าคุณต้องการสำรวจสิ่งต่าง ๆ อีกเล็กน้อย ข้อเสียเปรียบเพียงอย่างเดียวของ Mathematica คือมันไม่ถูก แต่มันสามารถทำอะไรได้อย่างรวดเร็วเกือบ ใช้ Ive Mathematica สำหรับบางส่วนของภาพของฉันบนของพื้นฐาน NURBS

หนึ่งในความสามารถหลักของ Mathematicas คือมันสามารถพัฒนาภาพที่ซับซ้อนได้อย่างง่ายดายแม้โดยไม่ยุ่งยาก นอกจากนี้ยังสามารถเคลื่อนไหวภาพที่เรียบง่ายของคุณในตัวคุณบรรณาธิการ

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

ผลลัพธ์ในภาพเดียวกับที่คนอื่นมี ห่อมันไว้ในตารางตามผลลัพธ์ใน:

ป้อนคำอธิบายรูปภาพที่นี่

Image 4 : แอนิเมชันเป็นเรื่องง่ายที่จะทำในโปรแกรมแก้ไขโค้ดโดยใช้ Mathematica


4

PostScript + + ps2eps mogrify

สำหรับคำตอบของAffine Transformationsฉันเขียนโปรแกรม postscript ขนาดเล็กมากจากนั้นบันทึกหลายสำเนาภายใต้ชื่อที่แตกต่างกัน ตัวอย่างเช่นนี่คือสิ่งพื้นฐานident.psที่ไม่ทำอะไรเลยเพื่อเปลี่ยนพิกัดระหว่างการวาดสีแดงและการวาดสีดำ ฉันสร้างเส้นสีแดงให้ใหญ่ขึ้นเล็กน้อยและวาดก่อนเสมอดังนั้นทั้งสองจึงแสดงภาพที่ยอดเยี่ยมและมองเห็นได้ชัดเจน (IMO) ฉันแสดงตัวอย่างกับ Ghostscript :!gs %ด้วยคำสั่ง ( ไฟล์ต้นฉบับทั้งหมด )

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

ฉันใช้ps2epsคำสั่งจากpsutilsเพื่อคำนวณขอบเขตของกล่องโดยอัตโนมัติ

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

และในที่สุดก็ใช้convertคำสั่งของ imagemagick เพื่อสร้างภาพ png ที่ครอบตัด (ฉันไม่ได้คิดวิธีที่รวดเร็วในการทำให้ส่วนนี้เป็นแบบอัตโนมัติแก้ไข:ตามที่แสดงความคิดเห็นสามารถทำได้ด้วยmogrify -format png *.epsขอบคุณ 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

ซึ่งสร้าง PNG พร้อมที่จะอัพโหลด

$ 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


ฉันไม่เห็นจุดของการสร้าง encapsulation ด้วย ps2eps คุณแค่พิมพ์ eps header ในเทมเพลตของคุณ มันทำให้การเรียนการสอนสะอาดขึ้น (และผู้ใช้ต้องการการพึ่งพาน้อยลง) แทนการแปลงไฟล์แยกจากกันทำmogrify -format png *.eps
joojaa

เย็น. mogrifyผมไม่ทราบเกี่ยวกับ สำหรับชิ้นps2epsส่วนมันจะคำนวณ (และเพิ่ม) ข้อมูลขอบเขตของกล่องโดยอัตโนมัติ การข้ามส่วนนั้นconvertจะสร้างภาพขนาดเต็มหน้า
luser droog

4

ฉันใช้ Powerpoint เพื่อสร้างไดอะแกรมดังกล่าวและใช้งานได้ดีทันทีที่คุณพอใจกับการใช้งานพื้นฐาน รองรับการทำงานง่าย ๆ ทั้งหมดเช่นการหมุนการแปล ฯลฯ และการปรับปรุงล่าสุดยังมีการแปลงแรงเฉือนและ 3D ตัวอย่าง:

ป้อนคำอธิบายรูปภาพที่นี่

ป้อนคำอธิบายรูปภาพที่นี่

นี่คือตัวอย่างของแผนภาพ Powerpoint ที่ฉันทำเพื่อคำตอบ

สำหรับไดอะแกรมที่ซับซ้อนมากขึ้นโดยเฉพาะอย่างยิ่งใน 3D ฉันใช้ Blender กับวัสดุที่ไม่มีร่มเงา ฉันสามารถอธิบายและแสดงตัวอย่างได้หากเกี่ยวข้องกับคำถามของคุณ

ดูเหมือนว่าjsfiddleยังเป็นที่นิยมในบริเวณนี้


ฉันเห็นด้วย --- คำตอบของฉันน่าจะไม่ถูกต้องอีกต่อไปเพราะฉันไม่ได้ใช้ไดอะแกรมในคำตอบใด ๆ แต่ฉันคาดว่าจะเกิดขึ้นเร็ว ๆ นี้ ดังนั้นหากไม่เป็นไรสำหรับคำตอบนี้ให้รอประมาณสองสามวันฉันมั่นใจว่าฉันจะสามารถหาคำตอบได้
ap_

ทำ! คำตอบของฉันควรจะใช้ได้ในขณะนี้
ap_

ยอดเยี่ยม การลบความคิดเห็นก่อนหน้าของฉัน
luser droog

4

ไม่ใช่กล่องเครื่องมือที่คุณอาจกำลังมองหา แต่เป็นเครื่องมือพิเศษที่ฉันใช้เอง: สำหรับกราฟิก 3 มิติ Blender อาจมีประโยชน์ โดยเฉพาะอย่างยิ่งถ้าคุณใช้ปลั๊กอิน Export_SVG (หาได้จากhttp://dl.dropbox.com/u/16486113/Blender/archivos/temp/SVG/export_svg.pyและhttp://blenderartists.org/forum/showthread.php? 282824-SVG-output-script )

สิ่งนี้ช่วยให้คุณได้วัตถุ Blenders 3d เป็นกราฟิกแบบเวกเตอร์ใน Illustrator หรือ Inkscape ฉันพบว่ามันเป็นการเริ่มต้นที่ดีสำหรับฉันในการสร้างภาพประกอบ 3 มิติที่เรียบง่าย

อนุญาตให้ฉันวางตัวอย่าง (ในตัวอย่างนี้ฉันใช้สีจำนวนมาก แต่แน่นอนว่ามันสามารถทำให้เป็นสีดำและสีแดงบนสีขาวแทน)

ป้อนคำอธิบายรูปภาพที่นี่


แน่นอนคุณการ์ตูนค่าเฉลี่ยและ Inkscape (แทนที่จะเป็นนักเขียนการ์ตูนและนักวาดภาพประกอบ)
joojaa

ฉันแน่ใจ! tnx!
Ideogram

1

ฉันใช้ Powerpoint และแพ็คเกจ CAD ราคาแพง ฉันเขียนแมโคร Powerpoint (รหัส VBA) เพื่อทำสิ่งพิเศษเช่นวาดรูปหลายเหลี่ยมควบคุมของเส้นโค้ง Bezier จากนั้นฉันก็ใช้ Windows Snipping Tool มาตรฐานเพื่อจับภาพหน้าจอ นี่คือตัวอย่างบางส่วน:

ป้อนคำอธิบายรูปภาพที่นี่

ป้อนคำอธิบายรูปภาพที่นี่

ป้อนคำอธิบายรูปภาพที่นี่

ป้อนคำอธิบายรูปภาพที่นี่

และตัวอย่างเพิ่มเติมจาก Math.SE

หนึ่ง
สอง
สาม
สี่
ห้า


Powerpoint ค่อนข้างแพงเมื่อพิจารณาเรื่องต่าง ๆ ไม่เป็นไรหลังจากทักษะการวาดทั้งหมดมาจากคุณ แต่ atleast tikz, inkscape, blrnder และ postscript นั้นถูกกว่า powerpoint
joojaa

ฉันแก่แล้วเวลาจึงสำคัญกับฉันมากกว่าเงิน Inkscape นั้นดี แต่ไม่มีทางที่ฉันจะใช้เวลาเขียนโค้ด tikz หรือ Postscript เพื่อสร้างรูปภาพ
bubba
โดยการใช้ไซต์ของเรา หมายความว่าคุณได้อ่านและทำความเข้าใจนโยบายคุกกี้และนโยบายความเป็นส่วนตัวของเราแล้ว
Licensed under cc by-sa 3.0 with attribution required.