在我对仿射变换的回答中,我做了一些小插图来帮助解释。
您如何快速制作可表达几何或数学思想的可上传PNG?
该问题旨在支持我的后记答案,但旨在寻求其他可能更有利于SE网络的解决方案。但是为了可信起见,答案必须链接到实际上已使用该技术的帖子,以及足够的“ howto”部分(如果涉及的内容不止是诸如“从菜单中选择导出”之类的内容)。
在我对仿射变换的回答中,我做了一些小插图来帮助解释。
您如何快速制作可表达几何或数学思想的可上传PNG?
该问题旨在支持我的后记答案,但旨在寻求其他可能更有利于SE网络的解决方案。但是为了可信起见,答案必须链接到实际上已使用该技术的帖子,以及足够的“ howto”部分(如果涉及的内容不止是诸如“从菜单中选择导出”之类的内容)。
Answers:
我会根据当下的特殊需求使用各种工具。我偏爱免费工具,因为我无法使用Illustrator或Mathematica之类的工具。
出于一般矢量艺术的目的,我使用免费的Inkscape。它可以对.svg文件进行操作,也可以将它们呈现为高质量.png或其他位图格式。例如,这是我在Inkscape中制作的用于解释UV贴图的图表:
对于2D功能图,我经常使用在线图形计算器Desmos,它具有方便的功能,可让您在线共享图形,以便其他人可以查看和修改它们。您还可以创建可以实时改变曲线参数的滑块。例如,这是一个可配置的锐化功能。
对于涉及一些编程的更复杂的图形绘制任务,我使用Maxima,它是一个免费的计算机代数系统,也具有图形绘制功能。我在此答案中使用了Maxima来创建有关高斯模糊的图形:
对于Desmos而言,这有点太复杂了,因为它涉及以编程方式创建高斯的分段近似。
对于其他任何事情都无法很好处理的真正奇怪的制图任务,我将Python与svgwrite软件包结合使用,以编程方式将图生成为.svg文件。然后,可以根据需要在Inkscape中对它们进行修饰,并使用Inkscape或ImageMagick将其渲染为位图。我使用该工作流程在此博客文章中以景深精度创建图像,如下所示:
在这种情况下,我不仅要绘制函数的图形,还要以编程方式和不均匀的方式在坐标轴和图形上放置刻度线,以说明离散的深度缓冲区值。
最后,如果没有其他条件,我将使用带有numpy和pillow的 Python 逐像素渲染图像。这就是我在此答案中创建Perlin噪声图像的方式(在这种情况下,也借助噪声包)。
我个人选择的毒药是Adobe Illustrator。其他应用程序(例如inkscape,Corel Draw,Xara Designer)也可以使用。即使如此,PowerPoint仍然可以正常工作。尽管由于其数据模型存在严重问题,我个人不建议使用PowerPoint,但即使是世界上部署最多的绘图应用程序,其难度也可能更大。
拥有图形应用程序也是一个好主意。尽管许多其他应用程序也可以使用,但我个人使用Mathematica。或者,如果您愿意,可以使用Wolfram alpha,它是mathematica的免费在线版本。
免责声明:因为例子是我的和无耻的自我认可,所以要加点盐。
在任何矢量绘图应用程序中应该做的第一件事就是启用捕捉网格。这减少了精确放置线的乏味。我不喜欢使用Inkscape的主要原因之一是它实现此捕捉的劣等方式。PowerPoint实际上默认情况下带有网格捕捉功能。
我对Illustrator并不满意,因为它不能满足我的所有需求。但是到目前为止,还没有软件可以使用(Maya曾经填补了这个空白,但是后来出现了Autodesk)。
我选择Illustrator的第二个原因是它本身了解Postscript。因此,如果我需要进行编程,则可以快速执行,并且随着代码的成熟,现有文档也会更新,Image 3就是通过这种方式完成的。
以下是一些我使用Illustrator在网络上完成的工程图示例,主要是借助网格捕捉的功能:
图片1:我在此站点上以插画家绘制的众多图片之一。注意:我是一位经验丰富的Illustrator(有时是商业人士),按照我的标准,这非常简单。
圆环行进图像非常简单。只需单击周围即可绘制随机形状。禁用快照后,让智能向导为您完成工作。在直线上绘制最接近的点,在直线上画圆,然后(完成后我删除了指导线)。冲洗并重复。启动工作区后,我花了大约3-5分钟的时间来绘制图像。
图2:GD.SE 连续波。
尽管此图像看起来更加精细,但与第一张图像相比,它的工作量并不多。它是更技术性的,因此除了网格捕捉I之外,现在还使用Shift键将线约束为45度角。使用illustrator的形状构建器工具可以轻松地将填充图案分配给区域。(正在使用的形状生成器示例,屏幕截图)
图片3:有时在后记中更容易从头开始。图片已添加到ENG.SE上。
最后,通过在后记中键入值,可以更轻松地实现图像。在后记中相对容易做到。我仍然在插画家中排版。尽管我不愿手动绘制此图,但我不愿意这样做,但是如果我必须通过眼神判断时,我会这样做。
如果您想进一步探索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在代码编辑器中可以轻松进行动画处理。
对于“ 仿射变换”的答案,我编写了一个很小的脚本程序,然后以不同的名称保存了多个副本,并编辑了每个副本以完成每个不同的任务:缩放,平移,旋转。例如,以下是基本的示例,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
然后,我使用ps2eps
from中的命令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
mogrify -format png *.eps
mogrify
。对于ps2eps
零件,它会自动计算(并添加)边界框信息。省略该部分,convert
将产生整页大小的图像
我只是使用Powerpoint制作这样的图,只要您对它的基本原语感到满意,它就可以很好地工作。它支持所有简单的操作,例如旋转,平移等,并且最新版本还具有剪切和3D变换。例子:
这是我为答案制作的Powerpoint图的示例。
对于更复杂的图,尤其是在3D中,我有时将Blender与无阴影材质一起使用。如果与您的问题有关,我可以详细说明并举例说明。
看起来jsfiddle在这里也很受欢迎。
不是您可能正在寻找的权威工具箱,而是我自己使用的一个额外工具:对于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-输出脚本)
这使您可以将Blenders 3d对象作为Illustrator或Inkscape中的矢量图形进行获取。我发现它为创建一个不错的快速入门简单的 3d插图入门。
请允许我粘贴一个例子。(在此示例中,我使用了很多颜色,但是当然,可以将它们全部制成黑白相间的红色)
我使用Powerpoint和各种(昂贵的)CAD软件包。我编写了Powerpoint宏(VBA代码)来做一些特殊的事情,例如绘制Bezier曲线的控制多边形。然后,我使用标准的Windows截图工具抓取屏幕截图。这里有些例子:
还有Math.SE的其他示例