博文

笛卡尔网格生成方法概述(2010-03-15 17:47:00)

摘要:......(省略了)
§1.2 计算流体动力学中网格生成技术的发展
计算流体动力学作为计算机科学、流体力学、偏微分方程数学理论、计算几何、数值分析等学科的交叉融合,它的发展除依赖于这些学科的发展外,更直接表现于对网格生成技术、数值计算方法发展的依赖。
在计算流体动力学中,按照一定规律分布于流场中的离散点的集合叫网格(Grid),分布这些网格节点的过程叫网格生成(Grid Generation)。网格生成对CFD至关重要,直接关系到CFD计算问题的成败。1974年Thompson等提出采用求解椭圆型方程方法生成贴体网格,在网格生成技术的发展中起到了开创作用。随后Steger等又提出采用求解双曲型方程方法生成贴体网格。但直到二十世纪八十年代中期,相比于计算格式和方法的飞跃发展,网格生成技术未能与之保持同步发展。因而从二十世纪八十年代开始,各国计算流体和工业界都十分重视网格生成技术的研究。二十世纪九十年代以来迅速发展的非结构网格和自适应笛卡尔网格等方法,使复杂外形的网格生成技术呈现出了更加繁荣发展的局面。现在网格生成技术已经发展成为CFD的一个重要分支,它也是计算流体动力学近二十年来一个取得较大进展的领域。也正是网格生成技术的迅速发展,才实现了流场解的高质量,使工业界能够将CFD的研究成果――求解Euler/NS方程方法应用于型号设计中。
随着CFD在实际工程设计中的深入应用,所面临的几何外形和流场变得越来越复杂,网格生成作为整个计算分析过程中的首要部分,也变得越来越困难,它所需的人力时间已达到一个计算任务全部人力时间的60%左右。在网格生成这一“瓶颈”没有消除之前,快速地对新外形进行流体力学分析,和对新模型的实验结果进行比较分析还无法实现。尽管现在已有一些比较先进的网格生成软件,如ICEM、Gridgen、Gambit等等,但是对一个复杂的新外形要生成一套比较合适的网格,其需要的时间还是比较长,而对于设计新外形的工程人员来说,一两天是他们可以接受的对新外形进行一次分析的最大周期。CFD已经成功地缩短了新外形设计中所需要的风洞实验时间,但在CFD对任意外形成为一种适时的分析工具以前,新外形设计中所需要的风洞实验时间依然非常巨大。要将CFD从专业的研究团体中脱离出来,并且能让工程设计人员应用到实际的设计中去,就必须首先解决网格生成的自动化、......

阅读全文(6125) | 评论:0

发布中文Qt程序时要注意的问题(转)(2009-09-12 11:36:00)

摘要:用Qt写好了程序,并撰写了中文的语言文件(.qm文件) 后,发布到没有安装过Qt的系统上时,却发现只有固定的界面文字中的中文能正常显示,而程序运行过程中保存到诸如txt、xml文件中的中文却变成了奇怪的编码,而读回时就会变成“?”。 经过研读Qt的文档,总算知道了原因,那是因为对于中文之类的特殊编码文字,Qt系统中是使用相应的TextCodec来进行Unicode到本地编码(GB2312,GB18030等)的转换的,而这个TextCodec并不是静态编译到Qt的几个库文件中的,而是在编译完Qt系统后,以Plugin 的形式出现在 /qt/plugins/codecs 目录下,如简体中文的Codec库文件名为:qcncodecs4.dll,而我发布Qt程序时只安装了Qt的几个主文件(QtCore4.dll,QtGui4.dll),所以造成了该系统上缺少中文Codec的问题。 解决方法很简单,有多种方法:
1)将以上的中文编码库文件安装到可执行程序的目录下的 codecs 目录下,程序启动时,QtCore中的初始化过程会自动找到该目录并加载到内存中。
2)在Qt程序启动时,用代码指定Qt的Library搜索路径。
3)编写qt.config文件,放在可执行文件的目录下,并在其中定义Codecs的路径。
4)对于用static编译的Qt,在主程序文件中写上这句宏指令:Q_IMPORT_PLUGIN(qcncodecs),并在Link中加入相应的LIB文件。
具体内容我不多说了,看Qt文档吧: doc/html/plugins-howto.html 另外,Qt的图像解码系统也是用Plugin的方式提供的,如果忘了复制如jpeg,gif之类的解码库的话,程序将只能显示bmp和png的图片了。 本文来自CSDN博客,转载请标明出处:http://blog.csdn.net/xuxinshao/archive/2008/10/20/3111447.aspx......

阅读全文(2357) | 评论:0

打开文件夹属性反应慢(2009-09-11 22:20:00)

摘要:解决方案:

1.打开

注册表管理器

2.删除
HKEY_CLASSES_ROOT\Directory\shellex\PropertySheetHandlers
下的{5a61f7a0-cde1-11cf-9113-00aa00425c62}
问题原因:
{5a61f7a0-cde1-11cf-9113-00aa00425c62}是显示文件夹的WEB共享属性。
如果系统上装有IIS,右键属性时,电脑就会启动IISAdmin服务,并且去查询IIS,本目录是否为某站点的虚拟目录。
......

阅读全文(2100) | 评论:1

乱弹OpenGL选择-拾取机制(下)(转)(2009-09-11 10:40:00)

摘要:本篇紧随上篇,探讨一下OpenGL内置的拾取机制,给出一个完整的拾取部分实现代码,请有心人批评指正。前篇是:[乱弹OpenGL选择-拾取机制(上)] —— ZwqXin.com
前篇主要讲了名字栈机制,这是拾取机制中对拾取结果进行识别的机制,是后处理的前提。而本篇则从拾取机制的“拾取”部分,揭露一下我所理解的OpenGL内置拾取机制。
3. 真正的拾取机制
还记得前篇提及的一般游戏引擎中所使用的“射线检测”机制吗?这确实是实现成本非常小的技术,而且无关OPENGL或D3D管道。但是依靠人工的进行点面检测将涉及两个难题:屏幕场景中很多物件怎么办?要把射线与所有这些物件都做一次叉叉检测么;物件由很大量三角形面组成怎么办?连渲染模型本身都够呛了,何况还得在点选时把射线方程与各个面纠缠一次直到检测到或全部检测完发现做了无用功为止……(所以现在都改射线-包围盒检测了~但前一问题尤在。)
OpenGL内置拾取机制利用的是固定渲染管道的东西——视截体裁减。留意过3D图形学的朋友应该记得流水线是怎么“砍掉”场景中不在视野内的部分的,这里我就不探讨其数学原理了——其实也就相交检测之类,不过交给更可靠的流水线去快速实现而已。而这里,OpenGL也是应用的流水线的这个能力,只不过用来“砍”场景的平头视锥题是个“萎缩版”的而已。
(看不到图片的见贴:[显示本站所有图片] )
这是去年9月做的一个小DEMO,场景中有三个模型(物件),能进行鼠标拾取操作从而对模型进行平面移动。如你所见,整个渲染窗口是一个投影平面,也是视锥的近截面。流水线把视锥之外的都喀嚓掉了,譬如船模的船头部分,实际上已经被切断,然后在切断处形成暂时的流水线顶点。那么,我们看鼠标吧。它正在拾取其中一个白色模型,在点击鼠标进行拾取的刹那,在渲染窗口屏幕上形成了一个看不见的小矩形(我在画图工具里用个黄色矩形形象化表示~),这个小矩形就是在拾取时(renderMode == GL_SELECT),OPENGL世界中唯一能显示出来的区域——没错,它就是拾取刹那产生的新平头视截体的近平面!这个新视截体在下图草草表现出来:  注意红色椭圆圈着的就是新视截体的近、远截面,与之间的四条连线构成一个小型平头锥体,是不是形同于意同于“目光”呢?其实也算一种射线吧哈哈。(注意,在屏幕上的小矩形实......

阅读全文(3668) | 评论:1

乱弹OpenGL选择-拾取机制(上)(转)(2009-09-11 10:39:00)

摘要:转自:http://www.zwqxin.com/archives/opengl/opengl-picking-what.html
无论是游戏还是VR,三维世界总免不了与用户的交互。而这其中常也免不了“用户对场景中物件的选择(也就是,拾取)”这种需求。OpenGL本身就内置有一套拾取机制,这次就乱弹一下吧。(乱弹不少了哦~)——ZwqXin.com
OpenGL内置的拾取方法,应该是第三次要接触了。头次是课程作业,套例子糊里糊涂弄成功了;第二次是去年9月,做一个DEMO,实现起来终于遇到了诸多麻烦,好不容易通过艰辛调试得到了正确的结果,相关代码被我供奉捧信至今,但其实也不算真正理解了这套机制。这次则是跟老师做的一个项目需要,虽说把之前的代码弄进来这个选取逻辑就差不多了,但我觉得嘛,还是趁机作一次更深入的了解吧。
假设用户是通过鼠标左键单击来选择场景物件的。先说说一般游戏引擎里的“射线检测”实现思路,也就是在用户拾取物件,点击渲染窗口(屏幕)上的相应的某一点的时候,激发一条从相机位置(眼睛)过该点的射线,这条射线反映在世界空间中,就是“穿过”视像平面发射到三维世界空间的光束。根据三维投影的知识(小孔成像原理)可知,该光速必然可以“射中”用户所点击处的物件,问题转化为线面相交检测——检测通过则意味着“射中”该面所属的三维物件。
1.名字标识
这“射线检测”比较好理解。好吧,请先认为OpenGL也遵循这种机制(可不要先入为主哦,后面或许会否定这个假设的),那么,从工序的后端往前看,要解决些什么问题呢?恩,三维物件知道自己身体某一部分的面被一条线叉中了,但它怎么通知应用程序“我被叉叉了”呢?简单的就是给上头打报告,报告内容首项写上自己的姓名。好吧,在三维世界里允许长一个样的但不允许有同样的识别码,换言之,你最好给场景中每样你在意的物件分配一个唯一的ID,好在它们打报告的时候不会弄混。于是,在这层意义上,ID就是名字。
OpenGL拾取机制觉得ID这太俗了,于是用名字(Name)来唯一表示每个可拾取物件。但是我们作为应用者就该记住,这里的Name就是ID,即使它真是一个名字"Allan",那背后肯定也有这么一句"#define Allan 13"之类的。OpenGL拾取的名字机制也就是ID机制。当然,它里面没有什么排斥不唯一性的,但你......

阅读全文(3711) | 评论:0

插件法实现自定义控件集成(转)(2009-09-09 09:37:00)

摘要:插件法需要创建一个插件库,使Qt Designer能够实时加载,用来创建控件的实例。这样,Qt Designer就可以在编辑窗体或者预览的时候使用自定义控件。因为有了Qt的meta-object系统,Qt Designer能动态获得自定义控件的全部属性。现在以IconEditor为例,用插件法把IconEditor集成到Qt Designer中。
首先,我们从QDesignerCustomWidgetInterface派生一个新类,重写一些虚函数。我们假定这个插件的源代码在iconeditorplugin目录中,IconEditor类的代码在与它平行的目录iconeditor中。
这里是插件类的定义:
#include <QDesignerCustomWidgetInterface>
class IconEditorPlugin : public QObject, public QDesignerCustomWidgetInterface
{
    Q_OBJECT
    Q_INTERFACES(QDesignerCustomWidgetInterface)
public:
    IconEditorPlugin(QObject *parent = 0);
    QString name() const;
    QString includeFile() const;
    QString group() const;
    QIcon icon() const;
    QString toolTip() const;
    QString whatsThis() const;
    bool isContainer() const;
    QWidget *createWidget(QWidget *pa......

阅读全文(3650) | 评论:1

qt程序发布方法(2009-09-08 22:30:00)

摘要:部署发布QT程序有两种方法: 第一种,静态编译,可生成单一的可执行文件。 第二种,动态编译,需同时附上需要的dll文件。 一、静态编译 1 编译QT。 要静态编译,首先要求QT是静态编译过的。在QT目录下执行: configure.exe -static -release make sub-src 就可以编译出静态库。如果只是用来分发程序,也可以mingw32-make release sub-src只编译一个静态库。 这个过程需要1-2个小时。QT目录会变成1.8G左右。注:mingw32-make和make是一样的。 如果用VC2005平台,在编译Qt的时候,configure.exe -static -platform win32-msvc2005 然后nmake sub-src或者nmake release sub-src完成静态编译。 2 编译程序。 然后到你自己的程序目录下执行: make clean qmake -config release make 这时会得到一个非常大的可执行程序,但也会有一个重要的问题,就是图片文件显示不出来。 按照QT帮助的说法,QT里的jpeg,gif等图片的支持都是以插件的形式存在的,现在我们还没有包含任何插件。 3 加入插件 在main.cpp里: #include <QApplication> #include <QtPlugin> //这个 Q_IMPORT_PLUGIN(qjpeg) //这个 Q_IMPORT_PLUGIN(qgif) //这个 int main(int argc, char *argv[]) { QApplication app(argc, argv); … return app.exec(); } 在.pro里加入: QTPLUGIN += qjpeg qgif CONFIG += static QT的帮助里就做到这里,但我编译程序时出错如下: release/main.o(.text+0×1c9):main.cpp: undefined reference to `qt_plugin_instance_qgif()’ undefined reference to `qt_plugin_insta......

阅读全文(5790) | 评论:0

浅入深出在Win XP上傻瓜式编译安装Qwt中(转)(2009-09-08 11:07:00)

摘要:原文链接:http://www.cuteqt.com/blog/?p=1015 在上篇中,介绍了如何使用QtCreator编译安装qwt,现在介绍怎么使用QtCreator来编写使用了qwt库的qt程序。 为了简化流程,本菜菜直接复制了qwt中example的代码,并且使用QtCreator新建一个工程并将代码粘贴进去。这时如果误以为只要点击run就可以运行程序,那就是大错特错了。本菜菜开始时就犯了如下的错误,不幸的是,是直接使用了qwt目录里的example,而里面的pro工程文件可是设置完毕的,只要生成了库文件dll和libxx.a的文件情况下,自然是可以运行的。本菜菜就是这样被蒙蔽了,才造成qwt库设置完毕的假象。 这时如果点击run,多半会出现以下错误: 简单地来说,就是QtCreator找不到qwt库中各个类型的声明。解决的办法也很简单,将qwt的头文件包含进去即可。去qwt的解压目录,在下面有个src目录,里面就有所有qwt的源码文件,将其中的.h头文件复制出来,然后去Qt SDK的安装目录,在下面的qt子目录的include目录里(比如F:\Qt\2009.03\qt\include)新建一个Qwt文件,将复制出来的.h文件粘贴进去。 Qwt毕竟是第三方库,指望QtCreator能自动认出来,还需要在.pro里文件设置LIBS和INCLUDEPATH ,这些属于qmake的知识范畴内,有兴趣的朋友可以去看看文档qmake手册部分:http://qt.nokia.com/doc/4.5/qmake-manual.html. 本菜菜的设置如下: LIBS += -L”f:/Qt/2009.03/qt/lib” -lqwt5 INCLUDEPATH += f:/Qt/2009.03/qt/include/qwt 各人设置爱好都不一样,大家可以根据自己的需求来设置。 上面这些步骤浓缩起来时很简单,但在一无所知地情况下,本菜菜花费了大量的时间来尝试,可谓步步都留下辛勤的汗水。 恐怕很多在想了,现在总可以正常使用qwt了吧,好吧,我也是这样想的,结果却是: 真是很郁闷的错误啊,然后又花费了大量的时间进行研究,原因其实也很简单,在winXP下面,Qt是不能混用库的。在QtCreator下面,默认编译运行的是debug模式,而......

阅读全文(3937) | 评论:0

浅入深出在Win XP上傻瓜式编译安装Qwt上(转)(2009-09-08 11:06:00)

摘要:原文链接:http://www.cuteqt.com/blog/?p=994 现在看到的本文已经是第三版,写这篇博文的起初原因是本菜菜最近准备使用Qwt开发一些功能部件,而公司里基本是使用win Xp系统进行开发工作,为了便于日后的团队开发,所以研究了怎么将qwt库和QtCreator整合起来。 但是由于不是很严谨的态度,但随便的实验感觉成功后,感觉整合没问题后,就轻松地写了篇博文,幸亏由于shiroki大姐的指出,才发现许多不足,甚至是严重的错误会误导别人。 通过双休日的不懈努力和研究,总算实验成果,并且证实了本菜菜的思路,而且对于Qt更加了解,对以前缺少的知识点也得到了补足,这个内容么,也真正做到的浅入深出。 在基于Qt绘制科学图表 -- Qwt试用中,shiroki大姐介绍了怎么样在linux下安装qwt,并使用qwt,本菜菜经过在winXp操作系统下的不断尝试,发现能快速地使用Qt Creator进行编译,而在开发程序时也能使用Qt Creator进行,故详细地介绍给大家。 首先确定你使用的是winXP操作系统,并且已经安装了Qt SDK for windows,如果没有安装,可以去Qt官方网站下载安装包安装,安装的过程十分简便,跟普通的windows的EXE安装包没有太大区别,指定好路径,一路next就可以安装,在安装完成后,也无需设置环境变量即可使用来编写编译Qt程序。 安装完毕后,即可使用QtCreator,然后去下载qwt的源代码,目前的版本为qwt-5.2.0,在前面文章中提供过项目主页地址,在项目主页地址下可以选择下载对应linux的tar源码压缩包或者对应win的zip源码压缩包,我们选择的自然是zip压缩包,然后下载完成后,解压在英文路径下的目录即可。 有了Qt SDK,qwt的编译过程自然就变得简单无比了,环境变量啊,Qt的lib库啊,一切都有Qt SDK帮助,这就是为什么是我想说傻瓜式安装qwt的原因。相比以前的编译,安装和设置环境变量,使用Qt Creator可以帮助简化步骤。 打开Qt Creator,打开qwt源码目录下的.pro工程文件,然后点击左下的run按钮,qwt就开始了自动编译的的过程: 编译过程需要5到10分种时间,可以坐下别的事,或者喝杯咖啡什么的>_<,并且Qt Creator......

阅读全文(3248) | 评论:2

qwt(2009-09-08 10:48:00)

摘要:【QWT简介】   QWT[1],全称是Qt Widgets for Technical Applications,是一个基于LGPL版权协议的开源项目, 可生成各种统计图。它为具有技术专业背景的程序提供GUI组件和一组实用类,其目标是以基于2D方式的窗体部件来显示数据, 数据源以数值,数组或一组浮点数等方式提供,输出方式可以是Curves(曲线),Slider(滚动条),Dials(圆盘),Compasses(仪表盘)等等。该工具库基于Qt开发,所以也继承了Qt的跨平台特性。   【QWT基类】[2]   QwtAbstractScale: 包含刻度尺的所有类的抽象基类;   QwtAbstractScaleDraw:绘制刻度尺的抽象基类;   QwtAbstractSlider:滑块部件的抽象基类;   QwtAlphaColorMap:可以改变颜色的alpha值;   QwtAnalogClock:时钟的模拟类;   QwtArrayData:包含2个QwtArray<double>实例的数据类;   QwtArrowButton:箭头按钮;   QwtClipper:剪贴板类;   QwtColorMap:提供数值到颜色的映射功能;   QwtCompass:指南针部件;   QwtCompassMagnetNeedle:指南针部件的磁针;   QwtCompassRose:罗盘部件的抽象基类;   QwtCompassWindArrow:风向标的指示器;   …… ……   【统计图截图】[3]   1、柱状图                柱状图                 2、曲线图               曲线图                  CUP性能图     &......

阅读全文(3233) | 评论:0