在回答有关仿射变换的问题时,我做了一些小插图以帮助解释。



如何快速制作可上载的PNG,以表达几何或数学思想?

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

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

评论

我个人在PostScript上看到的这个问题比在计算机图形学上看到的更多。

@cifz对,这将更适合GD.SE。但这不是它不能在这里的原因。
@citz我想我明白你的意思。如果我将其排除在外,然后将其开放给tikz和渐近线之类的东西该怎么办。

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

有关此问题的元问题。

#1 楼

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

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



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

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

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



在这种情况下,我不仅要绘制函数图形,还要放置图形沿轴和图形以编程方式且不一致地显示刻度线,以显示离散的深度缓冲区值。

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



评论


$ \ begingroup $
内森(Nathan),你是那位写过深度精度的人吗?哇,酷...我读了那本书,对我有很大帮助!小世界:P
$ \ endgroup $
–艾伦·沃尔夫(Alan Wolfe)
2015年9月3日23:03

#2 楼

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

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

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

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

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

我选择Illustrator的第二个原因是它可以自然地理解Postscript。因此,如果我需要进行编程,则可以快速完成,并且随着代码的成熟,现有文档也将更新,如图3所示。



资源显示snap,postscript和java脚本访问illustrator并转发链接。

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



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

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



图像2:GD.SE连续波。

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



图像3:有时,它更容易从后记开始。最后在ENG.SE上发布的图像。在后记中相对容易做到。我仍然在插画家中排版。尽管我不愿意手工绘制此图形,但这并不是什么大不了的事情,但是如果我必须通过肉眼进行判断,我会这样做。

Mathematica

Mathematica很棒,如果您想进一步探索。 Mathematica的唯一缺点是它并不便宜。但是它几乎可以快速完成任何事情。 Ive在小节的基础上使用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在代码编辑器中可以很容易地制作动画。

评论


$ \ begingroup $
对于PS图像,这是同构投影吗?您是手动计算值还是具有进行投影的功能?
$ \ endgroup $
–luser droog
20年5月8日在23:10

$ \ begingroup $
@luserdroog我具有接受3D坐标并将其投影的功能。基本而言,其等距矩阵加上z的偏移量。为什么?你需要那样的东西吗?
$ \ endgroup $
– joojaa
20年5月9日在9:28



$ \ begingroup $
我在这里重新阅读答案,因为我需要制作一些图表和流程图。不,我想我真的不需要这样的功能,我只是对此感到好奇。谢谢
$ \ endgroup $
–luser droog
20年5月9日16:00

$ \ begingroup $
@luserdroog我认为您在执行此操作时不会遇到问题。无论如何,您不会碰巧知道流程图的一些简单图形布局算法。
$ \ endgroup $
– joojaa
20年5月9日在16:04

$ \ begingroup $
我不知道任何算法,但是我认为Bell Labs有很多关于图片的论文可能是值得的。对于我的任务,我尝试了Inkscape,但似乎无法迅速获得想要的东西。我现在正在使用app.diagrams.net,这看起来不错。
$ \ endgroup $
–luser droog
20年5月9日在16:34

#3 楼

PostScript + ps2eps + mogrify

对于Affine Transformations的答案,我编写了一个非常小的Postscript程序,然后用不同的名称保存了多个副本,并分别编辑了每个副本以完成不同的任务:缩放,平移,旋转。例如,这是基本的ident.ps,它不更改红色图形和黑色图形之间的坐标。我将红线稍大一点,并始终先绘制它,因此这两个线很好地叠加并可见(IMO)。我使用vi(ex)命令:!gs %用ghostscript进行了预览。 (所有源文件)

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


然后我使用来自ps2epspsutils命令自动计算边界框

$ 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




评论


$ \ begingroup $
我真的看不到用ps2eps生成封装的意义,不能只在模板中键入eps标头。它使指令更整洁(用户需要更少的依赖)。而不是分别转换每个文件,而是执行mogrify -format png * .eps
$ \ endgroup $
– joojaa
2015年9月2日在9:43



$ \ begingroup $
酷。我不知道要发牢骚。对于ps2eps部分,它会自动计算(并添加)边界框信息。省略该部分,convert将产生整页大小的图像
$ \ endgroup $
–luser droog
2015年9月2日于20:48

#4 楼

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





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

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

类似jsfiddle的外观在这里也很流行。

评论


$ \ begingroup $
我同意-我的答案可能不再有效,因为到目前为止我还没有在任何答案中使用图表。但是我希望很快会发生。因此,如果可以将答案保留几天,可以肯定,那么我可以找到答案。
$ \ endgroup $
–ap_
2015年9月8日于19:04

$ \ begingroup $
完成!我的答案现在应该有效。
$ \ endgroup $
–ap_
15年9月13日在18:24

$ \ begingroup $
很好。删除我之前的评论。
$ \ endgroup $
–luser droog
15年9月13日在19:44

#5 楼

不是您可能正在寻找的权威工具箱,而是我自己使用的一个额外工具:对于3D图形,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)

这使您可以在Illustrator或Inkscape中获得Blenders 3d对象作为矢量图形。我发现它为创建简单的3d插图提供了不错的快速入门。

允许我粘贴示例。 (在此示例中,我使用了很多颜色,但是当然可以全部用黑色和红色对白色进行制作)



评论


$ \ begingroup $
当然,您指的是插画家和inkscape(而不是插画家和插画家)
$ \ endgroup $
– joojaa
2015年9月16日上午8:10

$ \ begingroup $
我一定会的!天哪!
$ \ endgroup $
–表意文字
15年9月16日在8:30

#6 楼

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









Math.SE中的一些其他示例

OneTwoThreeFourFive

评论


$ \ begingroup $
考虑到事情,Powerpoint实际上非常昂贵。好的,毕竟您的绘画技巧来自您。但是至少tikz,inkscape,blrnder和postscript比powerpoint便宜。
$ \ endgroup $
– joojaa
17年11月1日在5:38



$ \ begingroup $
我老了,所以时间对我来说比金钱更重要。 Inkscape很好,但是我无法花时间编写tikz或Postscript代码来生成图片。
$ \ endgroup $
–布巴
17年11月1日在12:47

$ \ begingroup $
无需截屏,可以将结果导出为pdf(或EMF)格式,然后以inkscape之类的格式将其打开,以您选择的分辨率将其导出到PNG。
$ \ endgroup $
– s.ouchene
20年8月28日在18:29