新项目 - 来自实验室的新鲜事物
Discrete Geometry Viewer (DGV) 是由澳大利亚莫纳什大学的博士生 Shekhar Chandra 开发的一款引人入胜的软件。作为一个通用软件包,DGV 及其各种扩展是 C++ 的量子力学工具包和 3D 查看器。它允许通过图像、表面和体积图使用 OpenGL 进行数据可视化,以及快速开发的量子力学模拟。它使用 Blitz++、VTK 可视化和开源 Qt 库。
分解所有这些,DGV 允许您对图像进行一些非常酷的操作,无论您的兴趣是科学的还是纯粹艺术的。该程序最初是一个理论物理项目,名为 Quantum Mechanical Simulator,Shekhar 的主要问题是如何查看实际数据,因此他编写了 DGV 来填补空白。随着时间的推移,Shekhar 将把更多博士研究工作添加到 DGV 中。
引用 Shekhar 的话,未来的改进将包括
查看器内的像素值。
保存动画。
Python shell 而不是简单的控制台输出。请参阅我的项目 QPythonShell,它允许将 Python shell 嵌入到 Qt 应用程序中。
更多文件格式。
更多变换,例如数论变换(通过我的新数论变换 C 库)。
安装
单击主网站上的“下载”链接,您将被带到 SourceForge 托管文件页面。在“Discrete Geometry Viewer”标题下,根据您的系统获取最新的软件包。提供了适用于 Linux 和 Windows 的 x86 二进制 tarball,以及源代码 tarball。我选择了二进制文件,它在我的系统上没有任何依赖性问题,并且可以立即运行。
如果您真的想从源代码编译(特别是如果您没有基于 Intel 的机器),您可以从源代码编译,但要求列表相当严格,并且对于许多系统来说可能有点晦涩难懂(有关更多详细信息,请参阅项目网站)。
下载并解压缩 tarball,并在新文件夹中打开终端。要运行该程序,请输入
$ ./dgv
用法
首先,您需要导入图片。任何图片都可以,但就数字运算而言,分辨率较小(例如 800x600)和常用宽高比(例如 4x3 或 16x9)的图片会更容易,因为您和计算机最终都会做相当多的数学运算。使用“文件”→“打开”打开您喜欢的任何图像,图像将出现在屏幕上。出现的图像可能以灰度显示,具体取决于发布版本,但不要担心,它不一定会保持这种状态。
现在,让我们直接进入该程序最酷的功能。右键单击图像,然后从下拉框中选择“带图像的表面图”。然后,等待一段时间。有很多数学运算需要处理,但如果幸运的话,这将是一个快速的过程。现在屏幕上将出现一个新的 3D 景观(并恢复彩色),可以实时移动和旋转,并从任何角度查看。
左键单击并向前和向后移动鼠标,世界会相应倾斜。向右或向左移动鼠标,世界会朝该方向旋转。按住 Ctrl 键同时移动鼠标,图像会在您面前旋转,就像在 2D 平面上一样,顺时针或逆时针旋转。按住 Shift 键或鼠标中键,然后移动鼠标,您可以在屏幕内水平或垂直拖动对象。
如果您发现默认值及其产生的景观有点粗糙(甚至有点微妙),请右键单击图像并选择“缩放因子”。减小给定的值,生成的地形会变得更小,更接近原始图像。这可以用于应用一些非常微妙的图像增强,效果极佳。增加给定的值,地形的凹凸不平会变得更大,更夸张。
然而,就其本身而言,这更像是一种向您的朋友炫耀的噱头。该项目的核心是其数学和绘图能力,以及操纵图像的技术,这些技术可以产生一些令人惊叹的结果。
让我们用一些更传统的东西来实际看看。关闭任何正在进行的项目窗口,并从头开始使用基本的 2D 图像。打开文件后,右键单击图像本身,然后从下拉框中选择“数据”。将生成一个数据表,而这个表尤其重要。
数字的每个单元格都包含影响您从此表生成的任何几何图形或效果的信息。用英语来说,如果您知道自己在做什么,您可以手动控制最终图像的最终效果。让我们以快速傅里叶变换为例。(为了节省空间,我们将使用我的工作文件名 whole-kit.jpg。用您自己的文件替换它。)
右键单击表格,然后选择“变换”→“傅里叶”→“FFT”。片刻之后,一个点状灰度图片将出现在原始图像上方的单独窗口中。现在,将这两个图像组合成一个最终图像。从上面的菜单中单击“数据”→“操作”。在新的对话框窗口中,在“操作”下选择“乘法”,在“数据源 1”下选择“whole-kit.jpg”,在“数据源 2”下选择“图像:FFT-whole-kit.jpg”。然后,就得到了一个漂亮的新图像!原始图像将与颗粒状 FFT 图像结合,从而产生每个图片独有的外观。
我们在这里仅仅触及了表面,因此非常值得查看 Shekhar 的教程 (code.google.com/p/discrete-geometry-viewer/wiki/Home) 和博客 (l3mmings.blogspot.com),以了解该程序真正能够做什么(并为本文中可能存在的任何不准确之处向 Shekhar 道歉)。对于任何希望探索图像处理这个非常不同领域的人来说,DGV 绝对值得一看。
根据该项目的网站
peekabot 是一个分布式的实时 3D 可视化工具,适用于机器人研究人员和开发人员,使用 C++ 编写。其目的是简化机器人专家每天面临的可视化需求——例如,使用可视化作为调试辅助工具或为演示文稿制作精美的幻灯片。
我们的目标是提供一个灵活的工具,该工具能够满足机器人专家的大部分可视化需求,并且易于使用。典型场景包括模拟可视化、来自真实机器人的数据展示以及远程部署机器人的监控。
...为了实现远程数据可视化,peekabot 使用分布式客户端-服务器架构。所有繁琐的网络细节都由客户端库处理,您的程序可以使用该库。
安装
访问网站,并获取最新的 tarball。关于库要求,文档很有帮助地说明了以下内容(注意,在下面的列表中:*仅在仅构建客户端 API 时才需要;**仅在构建单元测试时才需要,默认情况下禁用单元测试)
相当新的 GCC 版本。
Boost 1.34.0+ (Boost.Thread, Boost.DateTime, Boost.Filesystem*, Boost.ProgramOptions* 和 Boost.Test**)。
Xerces-C++ 2.7.0+*。
FLTK 1.1.6+*。
OpenGL*。
GLU*。
libpng*。
我还必须获取这些开发文件:libxerces-c2-dev 和 libfltk1.1-dev。下载 tarball 后,在保存 tarball 的任何位置打开终端并输入以下内容
$ tar xvzpf peekabot-x.y.z.tar.gz $ cd peekabot-x.y.z $ ./configure --prefix=/usr $ make $ sudo make install
假设一切顺利,当编译完成后,您可以使用以下命令运行该程序
$ peekabot
在我们开始之前,我必须警告您,我们只介绍了一半的内容。peekabot 由两个关键部分组成:服务器及其客户端。在初始构建过程之后,您将单独拥有服务器。服务器是主 GUI 屏幕,您将在其中测试客户端程序并与之交互。客户端通常是独立程序,它们在遵循自己的编码结构的同时与 peekabot 服务器通信。虽然这对于新用户(包括我)来说可能令人望而生畏,但它确实使系统非常开放、强大且灵活。
好的,我假设您已打开服务器窗口并准备好试用 peekabot。让我们看一下一个工作示例程序,并在其运行时探索 GUI。
在 peekabot 源代码目录中打开另一个终端,然后在 examples 文件夹下查找。在这里您将看到文件夹 bo-slam、results 和 skeleton。进入这些文件夹中的任何一个,然后运行命令make。在 make 编译每个示例的代码后,新程序将在同一目录中可用。以 bo-slam 为例,以下是要输入的终端命令(我们假设您在 peekabot 主文件夹中打开了一个文件夹)
$ cd examples $ cd bo-slam $ make $ ./bo-slam
单独运行时,什么都不会发生,您将在控制台中收到一堆错误消息。但是,当与 peekabot 服务器同时启动时,将出现一个机器人和一堆塔架,塔架将自己移动到世界各地的位置,机器人将在预编程的路径上绕过每个塔架。好的,既然我们已经运行了一些东西,让我们探索一下 GUI。
主窗口包含您将使用的场景,以及一个视角可调的摄像头。鼠标左键将平移摄像头,右键将旋转摄像头。要放大和缩小,请使用鼠标中键或鼠标滚轮。如果您需要摄像头控件的灵敏度更高或更低,Shift 键和 Ctrl 键将相应地调节灵敏度(例如,在极端特写或从非常远的地方观看时很有用)。
右侧是树状浏览器,其中包含所有活动对象、场景元素等等。您可以通过左键单击来选择视图中的对象,并且可以像任何文件管理器一样选择性地组合多个对象,使用 Ctrl 键切换选择,使用 Shift 键添加到选择中。
我在这里仅介绍了该程序的基本操作,因为您需要进行一些实际编码才能深入了解该程序的细节。坦率地说,我编码很糟糕!如果您有兴趣了解更多信息,请查看基本文档(手册:www.peekabot.org/doc/latest/manual_the_basics.html;模型:sourceforge.net/apps/mediawiki/peekabot/index.php?title=Model_repository)。在那里您将找到入门的编码及其结构等等。
最终,这看起来是一个功能强大的机器人可视化项目,尽管它相当令人生畏。尽管从其主要基于编码的界面来看,学习曲线相对困难,但可能正是这种交互性将为其带来长久的生命力。没有 GUI 设计的限制来阻碍机械原理,对于那些希望在低级别处理其机械设计而又不希望受到初学者通常施加的限制的人来说,这无疑是天赐之物。
项目概览
深海危机 (dangerdeep.sourceforge.net)
深海危机 是一款免费、开源的二战德国潜艇模拟器。该网站称:“这款游戏计划作为战术模拟游戏,并将尽可能地根据我们当前的时间和物理知识做到逼真”。我曾短暂地玩过它,到目前为止,我看到的是一款充满打磨和热情的游戏。我期待在下个月更详细地介绍它。
正在酝酿新鲜、创新或令人兴奋的东西?发送电子邮件至 newprojects@linuxjournal.com。
John Knight 是一位 25 岁的鼓手和攀岩狂热者,来自世界上最偏远的城市——西澳大利亚州珀斯。人们通常会发现他要么埋头于 Audacity 屏幕,要么疯狂地敲击底鼓。