如何快速制作可上载的PNG,以表达几何或数学思想?
该问题旨在支持我的后记答案,但旨在寻求其他可能更有利于SE网络的解决方案。但是为了可信起见,答案必须链接到实际上已经使用了此技术的帖子,以及足够的“ howto”部分(如果涉及的内容不止是诸如“从菜单中选择导出”之类的东西)。
此处有两个关于如何根据我们网站的优先级确定问题范围的元问题。
#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
然后我使用来自
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.
最后使用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
评论
我个人在PostScript上看到的这个问题比在计算机图形学上看到的更多。@cifz对,这将更适合GD.SE。但这不是它不能在这里的原因。
@citz我想我明白你的意思。如果我将其排除在外,然后将其开放给tikz和渐近线之类的东西该怎么办。
我在这里回答是为了表明这是一个问题,肯定会得到答案。也许整个线程都应该存在于我们的Meta中,就像GD.SE上那样。有任何想法,@ cifz
有关此问题的元问题。