如何制作简单的2D插图以伴随几何答案?


14

在我对仿射变换的回答中,我做了一些小插图来帮助解释。

您如何快速制作可表达几何或数学思想的可上传PNG?

该问题旨在支持我的后记答案,但旨在寻求其他可能更有利于SE网络的解决方案。但是为了可信起见,答案必须链接到实际上已使用该技术的帖子,以及足够的“ howto”部分(如果涉及的内容不止是诸如“从菜单中选择导出”之类的内容)。

这里这里有两个关于如何根据我们网站的优先级确定问题范围的元问题。


2
我个人在PostScript上看到的问题多于计算机图形学上的问题。
cifz

1
@cifz正确的,这将符合GD.SE更好。但这不是它不能在这里的原因。
joojaa 2015年

@citz我想我明白你的意思。如果我不考虑这个问题,并为tikz和渐近线之类的东西打开它怎么办?
luser droog 2015年

我在这里回答是为了表明这是一个问题,肯定会得到答案。也许整个线程都应该存在于我们的Meta中,就像GD.SE那样。任何想法,@ cifz
joojaa

Answers:


13

我会根据当下的特殊需求使用各种工具。我偏爱免费工具,因为我无法使用Illustrator或Mathematica之类的工具。

出于一般矢量艺术的目的,我使用免费的Inkscape。它可以对.svg文件进行操作,也可以将它们呈现为高质量.png或其他位图格式。例如,这是我在Inkscape中制作的用于解释UV贴图的图表:

对于2D功能图,我经常使用在线图形计算器Desmos,它具有方便的功能,可让您在线共享图形,以便其他人可以查看和修改它们。您还可以创建可以实时改变曲线参数的滑块。例如,这是一个可配置的锐化功能

对于涉及一些编程的更复杂的图形绘制任务,我使用Maxima,它是一个免费的计算机代数系统,也具有图形绘制功能。我在此答案中使用了Maxima来创建有关高斯模糊的图形:

对于Desmos而言,这有点太复杂了,因为它涉及以编程方式创建高斯的分段近似。

对于其他任何事情都无法很好处理的真正奇怪的制图任务,我将Python与svgwrite软件包结合使用,以编程方式将图生成为.svg文件。然后,可以根据需要在Inkscape中对它们进行修饰,并使用Inkscape或ImageMagick将其渲染为位图。我使用该工作流程在此博客文章中以景深精度创建图像,如下所示:

在这种情况下,我不仅要绘制函数的图形,还要以编程方式和不均匀的方式在坐标轴和图形上放置刻度线,以说明离散的深度缓冲区值。

最后,如果没有其他条件,我将使用带有numpypillow的 Python 逐像素渲染图像。这就是我在此答案中创建Perlin噪声图像的方式(在这种情况下,也借助噪声包)。


内森(Nathan),您是关于深度精度的那个人吗?哇,酷...我读了那本书,对我有很大帮助!小世界:P
艾伦·沃尔夫

12

我个人选择的毒药是Adobe Illustrator。其他应用程序(例如inkscape,Corel Draw,Xara Designer)也可以使用。即使如此,PowerPoint仍然可以正常工作。尽管由于其数据模型存在严重问题,我个人不建议使用PowerPoint,但即使是世界上部署最多的绘图应用程序,其难度也可能更大。

拥有图形应用程序也是一个好主意。尽管许多其他应用程序也可以使用,但我个人使用Mathematica。或者,如果您愿意,可以使用Wolfram alpha,它是mathematica的免费在线版本。

免责声明:因为例子是我的和无耻的自我认可,所以要加点盐。

插画家

在任何矢量绘图应用程序中应该做的第一件事就是启用捕捉网格。这减少了精确放置线的乏味。我不喜欢使用Inkscape的主要原因之一是它实现此捕捉的劣等方式。PowerPoint实际上默认情况下带有网格捕捉功能。

我对Illustrator并不满意,因为它不能满足我的所有需求。但是到目前为止,还没有软件可以使用(Maya曾经填补了这个空白,但是后来出现了Autodesk)。

我选择Illustrator的第二个原因是它本身了解Postscript。因此,如果我需要进行编程,则可以快速执行,并且随着代码的成熟,现有文档也会更新,Image 3就是通过这种方式完成的。

  • 该资源显示对illustrator和前进链接的快照,后记和Java脚本访问。

以下是一些我使用Illustrator在网络上完成的工程图示例,主要是借助网格捕捉的功能:

圆行军

图片1:我在此站点上以插画家绘制的众多图片之一。注意:我是一位经验丰富的Illustrator(有时是商业人士),按照我的标准,这非常简单。

圆环行进图像非常简单。只需单击周围即可绘制随机形状。禁用快照后,让智能向导为您完成工作。在直线上绘制最接近的点,在直线上画圆,然后(完成后我删除了指导线)。冲洗并重复。启动工作区后,我花了大约3-5分钟的时间来绘制图像。

连续波

图2:GD.SE 连续波

尽管此图像看起来更加精细,但与第一张图像相比,它的工作量并不多。它是更技术性的,因此除了网格捕捉I之外,现在还使用Shift键将线约束为45度角。使用illustrator的形状构建器工具可以轻松地将填充图案分配给区域。(正在使用形状生成器示例,屏幕截图)

四象

图片3:有时在后记中更容易从头开始。图片已添加到ENG.SE上

最后,通过在后记中键入值,可以更轻松地实现图像。在后记中相对容易做到。我仍然在插画家中排版。尽管我不愿手动绘制此图,但我不愿意这样做,但是如果我必须通过眼神判断时,我会这样做。

Mathematica

如果您想进一步探索Mathematica,那就太好了。Mathematica的唯一缺点是它并不便宜。但是它几乎可以做任何事情。Ive在nurb的基础上用Mathematica画了我的一些照片。

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

结果与其他图片相同。结束语表内在结果:

在此处输入图片说明

图4:使用Mathematica在代码编辑器中可以轻松进行动画处理。


4

PostScript + ps2eps +迁移

对于“ 仿射变换”的答案,我编写了一个很小的脚本程序,然后以不同的名称保存了多个副本,并编辑了每个副本以完成每个不同的任务:缩放,平移,旋转。例如,以下是基本的示例,ident.ps它不更改红色图形和黑色图形之间的坐标。我将红线稍大一些,并始终先绘制它,因此这两个线很好地叠加并可见(IMO)。我使用vi(ex)命令预览了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

然后,我使用ps2epsfrom中的命令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.

最后使用imagemagick的convert命令生成裁剪的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


我真的看不到用ps2eps生成封装的意义,不能仅在模板中键入eps标头即可。它使指令更整洁(并且用户需要更少的依赖)。而不是分别转换每个文件,而是做mogrify -format png *.eps
joojaa 2015年

凉。我不知道mogrify。对于ps2eps零件,它会自动计算(并添加)边界框信息。省略该部分,convert将产生整页大小的图像
luser droog

4

我只是使用Powerpoint制作这样的图,只要您对它的基本原语感到满意,它就可以很好地工作。它支持所有简单的操作,例如旋转,平移等,并且最新版本还具有剪切和3D变换。例子:

在此处输入图片说明

在此处输入图片说明

这是我为答案制作的Powerpoint图示例

对于更复杂的图,尤其是在3D中,我有时将Blender与无阴影材质一起使用。如果与您的问题有关,我可以详细说明并举例说明。

看起来jsfiddle在这里也很受欢迎。


我同意-我的答案可能不再有效,因为到目前为止我还没有在任何答案中使用图表。但是我希望很快会发生。因此,如果可以将答案悬空几天,我相信我将能够找到答案。
2015年

做完了!我的答案现在应该有效。
ap_

优秀。删除我之前的评论。
luser droog 2015年

4

不是您可能正在寻找的权威工具箱,而是我自己使用的一个额外工具:对于3D图形,Blender可能会派上用场。特别是如果您使用Export_SVG插件(可从http://dl.dropbox.com/u/16486113/Blender/archivos/temp/SVG/export_svg.pyhttp://blenderartists.org/forum/showthread.php获得? 282824-SVG-输出脚本

这使您可以将Blenders 3d对象作为Illustrator或Inkscape中的矢量图形进行获取。我发现它为创建一个不错的快速入门简单的 3d插图入门。

请允许我粘贴一个例子。(在此示例中,我使用了很多颜色,但是当然,可以将它们全部制成黑白相间的红色)

在此处输入图片说明


当然,您的意思是插图画家和inkscape(而不是插图画家和插图画家)
joojaa 2015年

我确定!天哪!
Ideogram

1

我使用Powerpoint和各种(昂贵的)CAD软件包。我编写了Powerpoint宏(VBA代码)来做一些特殊的事情,例如绘制Bezier曲线的控制多边形。然后,我使用标准的Windows截图工具抓取屏幕截图。这里有些例子:

在此处输入图片说明

在此处输入图片说明

在此处输入图片说明

在此处输入图片说明

还有Math.SE的其他示例

一个
两个
三个
四个
五个


考虑到问题,Powerpoint实际上相当昂贵。好的,毕竟您的绘画技巧来自您。但是至少tikz,inkscape,blrnder和postscript比powerpoint便宜。
joojaa

我老了,所以时间对我来说比金钱更重要。Inkscape很好,但是我无法花时间编写tikz或Postscript代码来生成图片。
bubba '17
By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.