VC中怎样才能让程序所画的小车动态行走

VC中怎样才能让程序所画的小车动态行走,第1张

计算机上的图形,从高级点的来说,比如**画面,比如3D游戏。

你看上去它是连续,流畅的画面。 其实,其实它是一帧一帧的, 举个例子吧,OpenGL 这样的3D引擎,它的绘画基本原理是基于“照相” 。

说这些是想说,所有动态的画面都是由一张张的 图组合起来的,只要刷新速度足够快,看上去就像是**或者动画了。。

比如你程序画的小车,最简单的动画。。你画的时候,先设定一个 坐标起始点 x,y。。然后具体绘画的算法里,都以这个 x和y做基准。。然后有一个线程来 控制 x和y的值,注意,是缓慢的修改 x和y。。然后同时不停的让 程序重新绘制。比如设置周期,一秒钟20次。。

这样你就可以看到小车在屏幕上移动了 而移动的方向 和 x y 的值是有关的。

1、x(t)=u(t)-u(t-2)的单位阶跃函数信号波形

u(t)—白噪音的序列,如单位阶跃函数heaviside()

>>t=-20:01:20;

>>u1=heaviside(t);

>>u2=heaviside(t-2);

>>xt=u1-u2;

>> plot(t,xt)

2、x(t)=u(t)-u(t-2)的sinc函数信号波形

>>t=-20:01:20;

>>u1=sinc(t);

运行结果

y=[0 00281261 00001 0012577

005 0054559 00001 00126696

01 0080765 00001 00177487

015 0107075 000329022 00256648

02 0133688 00001 00439423

025 0160766 000858938 00495753

03 0188315 00001 00768135

035 0216371 00127298 008485

04 0243903 00001 0262183

045 0272677 00161912 0131329

05 0301642 000237354 0165833

055 0330743 000077311 019696

06 035975 000900573 0228638

065 0388648 000864398 0266933

07 0417335 000704408 0307462

075 0445801 000675268 0349906

08 0474055 000729481 0394596

085 050215 000842411 0441588

09 0530174 000990233 0491059

095 0558245 00117985 0543146

1 0586509 0014269 0598066]

n=sizeof(y);

x=1:1:y;

plot(x,y);

在VisualBasic中,不能直接播放gif动画,但可以变通一下,用浏览器IE和WebBrowser控件播放。

由于WebBrowser控件并不是VB的基本控件,因此在使用该控件之前必须先将其装入工具箱中。装入方法:在工具箱中点击鼠标右键→选中“部件”→复选MicrosoftInternetControls→然后点击“确定”键即可。

2.选取WebBrowser控件,添加到窗体的相应位置上。

3.设计相应代码:

Private Sub Form_Load()

Show

WebBrowser1Navigate AppPath & "\hgif"

End Sub

可参阅我博客中的文章:

>

一、对象从屏外移动到屏内某处或飞过屏幕。

制作步骤:

1、将对象置于(屏内或屏外)终点处;

2、在对象上单击鼠标右键,选“自定义动画”,在“动画和声音”中选“飞入、缓慢移入、螺旋”,并设置移动方向(飞过屏幕时,对象在幻灯片外一方,飞入方向要设置成从幻灯片另一方)。

二、对象从屏内一处移到另一处或屏外:利用人眼的视觉迟滞这一生理特点用“显现-隐藏-显现”实现。

制作步骤:

1、在移动对象上单击鼠标右键,选“自定义动画”,在“动画和声音”中选“闪烁”并设置速度为“中速”,或选“出现”且在下“播放动画后”中选“播放动画后隐藏”,在“顺序和时间”设置“在前一事件后0秒,自动启动”;

2、然后按住Ctrl键不放沿着移动路径依次拖放对象,复制出一连串相同对象,直到终点,对运动后不消失的对象,最后复制得的对象自定义动画效果设置“不变暗”。播放时移动。

三、效果为:对象相隔密的移动慢,相隔疏的移动快。

旋转制作:

1、对于Powerpoint中绘图工具画的图形、自选图形和剪贴画(经过“快捷菜单/组合/取消组合/转换为office图形(选是)”,再“快捷菜单/组合/组合”处理后可旋转),只要用前2方法并改。

2、为每次拖动复制到新位置后,均用“自由旋转”工具将图形旋转合适方向,其余 *** 作设置相同。

定点自转:只要用上方法以同一点为中心复制并拖转即可。

环绕旋转:若要实现一对象环绕另一对象旋转,先用“自选图形”画出环绕轨迹,再用前⑵方法,沿环绕轨迹和方向均匀复制一周,若要旋转几周,就复制几周一层层盖上去。也可用后面的循环重复播放幻灯片来实现按钮控制旋转和不停旋转。

四、用幻灯片复制和对象移位法实现多个对象同时运动。

制作步骤:

1、将环境和运动对象按初始位置放好(均不使用动态效果);

2、“幻灯片切换”设置为“每隔0秒换页”;

3、再复制一张幻灯片,在复制出来的幻灯片上将各运动对象用鼠标向运动方向拖移合适距离;

4、重复③直到所有对象均到终点,播放时就有多个对象同时运动的效果。

五、窗口内和全屏滚动字幕

制作步骤:

1、填充背景色,插入有窗口的封面(窗口可用WINDOWS“画图”的裁剪工具来开,窗内单色),并用设置工具设置透明色;

2、插入文本框(小于窗口),输入文字(文字进行字体、大小和颜色等修饰,可横排或竖排),或用艺术字,将文本框或艺术字移出窗外(一般窗外上方或右方)作为终点;

3、将滚动字其叠放层次设置成“置于底层”,设置自定义动画效果为“缓慢移入”(从下部或从左侧)和自动启动,播放时即有窗口内滚动字幕效果。类似地可制作全屏滚动字幕。

4、动态画线效果(如按笔画写字、画几何图形等)将对象按画的方向设置自定义动画“擦除”“伸展”及相同方向。如写字,要先将大字图形取到“画笔”中任意多边形剪刀笔画分开,把每个笔画作为一对象。

六、加入Gif动画

1、Gif和Flash动画来源广泛,易得易实现,效果好。Gif动画插入方法与一般的文件相同,用菜单“插入”-“”-“来自文件”选文件插入,但不能用“复制”“粘贴”来引入。一般Gif动画是循环播放的,可用“幻灯片放映/幻灯片切换”中的换页方式每隔几秒实现只播放一次动画教程。

七、加入Flash动画:

1、选择“视图”-“工具栏”-“控件工具箱”-“其他控件”-“ShockwaveFlashObject”;

2、光标变成十字型,按住鼠标左键在幻灯片上拖出一个合适的播放窗口,

3、在该区域中,按鼠标右键打开快捷菜单,选择“属性”-“自定义”-“”按钮,打开“属性页”对话框;

4、在“movieURL”框中输入Flash动画文件(*swf)的完整的路径名和文件名(若将Flash动画文件放到演示文稿文件夹,则只要输入文件名),单击“确定”,放映幻灯片就可以看到Flash动画效果。

八、调用Authorwar动画:

对象运动部分用Authorwar制作且可在Powerpoint调用,这样可弥补Powerpoint的不足。用Authorwar制作时注意演示窗与Powerpoint画面相匹配,设置其合适的大小和位置,把源文件打包成可执行文件保存。

调用方法:

1、在Powerpoint课件中要使用运动和交互练习地方,插入文字按钮(如艺术字“动画名”“练习名”);

2、右击按钮,选择"动作设置/单击鼠标或鼠标移过/运行程序",再单击“浏览”,在“浏览对话框”中选中需调用的程序文件名,两次单击“确定”。幻灯片放映时鼠标单击(或移过)该按钮就可播放动画了。03中:

PPT画图:一般用自选图形——线条——任意多边形,右键——编辑顶点

至于动画:选中——右键——自定义动画。画图在下面的绘图工具栏有很多绘图的工具,直接应用就可以自己绘图了,自定义动画稍微复杂些,幻灯片放映——自定义动画,主要是设置顺序以及怎样合理运用、设置稍微复杂些,多摸索下就能学好了。把画的图设成动画吗

Vc中关于DC(设备环境函数(Device Context))的理解

问:设备描述表DC是一个什么概念

学习Vc,首先遇到的就是这个dc,即设置描述表,输出文字,绘图都要用这个,好象它太重要了。但是我就是不明白,这是什么东西

一些教程看了,但还是不太了解,谁能通俗的说说,能快速理解它,谢谢。

答:1、作画之前需要准备好画布、画笔、调色板等。

当使用GDI函数如MoveToEx/LineTo, TextOut时,只是告诉系统要划线或写字了,但用什么样的笔(HPEN),字是什么颜色(SetTextColor),画在哪张“纸”(HBITMAP)上需要从一个由系统定义的数据结构中去读取。

这个数据结构被称为Device Context(DC)。

换句话说,GDI函数只是绘画的动作,而DC则保存了绘画所需的材料和工具。

2、设备环境函数(Device Context)

设备环境是一个结构,它定义了一系列图形对象及其相关的属性,以及会影响输出结果的绘图方式。这些图形对象包括:画笔(用于画直线),笔刷(用于绘图和填充),位图(用于屏幕的拷贝或滚动),调色板(用于定义可用的颜色集),剪裁区(用于剪裁和其他 *** 作),路径(用于绘图和画图 *** 作)。设备环境函数用于对设备环境进行创建、删除或获取信息。

问:DC,CDC,HDC,CClientDC有什么本质的区别

答:都是DC嘛,HDC就是最原始的 DC 句柄,很多API的第一个参数就是一个HDC类型,比如

HDC hDC = ::GetDC( m_hWnd);

::MoveToEx( hDC, 0, 0, NULL );

::LineTo( hDC, 0, 100, );

::ReleaseDC( m_hWnd, hDC );

在MFC中,为了将API封装成一个类来 *** 作,因此多出来了一个CDC。所以在MFC中,都是

CDC dc = GetDC();

dcMoveTo( 0, 0 );

dcLineTo( 0, 100 );

this->ReleaseDC( &dc );

但这样还不够,因为 CDC还要你自己去释放,所有MFC中又多出来一个CClientDC, 这样你就可以这样了:

CClientDC dc(this);

dcMoveTo( 0, 0 );

dcLineTo( 0, 100 );

CClientDC的析构函数自己会释放自己。

DC不是什么对象,就是设备上下文的简称。

与CClientDC一样,还有CWindowDC,CPaintDC,只是它们的绘制范围不一样。

但弄到底,都只是HDC的一些封装而已,你可以在CDC类中直接引用 m_hDC,这就是那个原始的HDC句柄了。

CDC是MFC的DC的一个类

HDC是DC的句柄,API中的一个类似指针的数据类型

MFC类的前缀都是C开头的

H开头的大多数是句柄

这是为了助记,是编程读\写代码的好的习惯

CDC中所有MFC的DC的基类常用的CClientDC dc(this);就是CDC的子类(或称派生类)

CDC等设备上下分类,都含有一个类的成员变量:m_nHdc;即HDC类型的句柄

记住下面的一句话,会有助于你的理解

MFC的类,是在用window API语句开发出来的有一定功能的小程序(也可称为类)使用它的默认方法,就是,记住它的名字与参数(可以用笔记,代替脑记)

如果将window api比做汇编语言

那么MFC就相当于Basic语言

下面介绍Vc中最重要的部分--MFC

CWnd:窗口,它是大多数“看得见的东西”的父类(Windows里几乎所有看得见的东西都是一个窗口,大窗口里有许多小窗口),比如视图CView、框架窗口CFrameWnd、工具条CToolBar、对话框CDialog、按钮CButton,etc;一个例外是菜单(CMenu)不是从窗口派生的。该类很大,一开始也不必学,知道就行了。

CDocument文档,负责内存数据与磁盘的交互。最重要的是OnOpenDocument(读入),OnSaveDocument(写盘),Serialize(读写)

CView视图,负责内存数据与用户的交互。包括数据的显示、用户 *** 作的响应(如菜单的选取、鼠标的响应)。最重要的是OnDraw(重画窗口),通常用CWnd::Invalidate()来启动它。另外,它通过消息映射表处理菜单、工具条、快捷键和其他用户消息。你自己的许多功能都要加在里面,你打交道最多的就是它。

CDC设备文本。无论是显示器还是打印机,都是画图给用户看。这图就抽象为CDC。CDC与其他GDI(图形设备接口)一起,完成文字和图形、图像的显示工作。把CDC想象成一张纸,每个窗口都有一个CDC相联系,负责画窗口。CDC有个常用子类CClientDC(窗口客户区),画图通常通过CClientDC完成。

CDialog对话框

CWinApp应用程序类。似于C中的main函数,是程序执行的入口和管理者,负责程序建立、消灭,主窗口和文档模板的建立。最常用函数InitInstance():初始化。

CGdiObject及子类,用于向设备文本画图。它们都需要在使用前选进DC。

CPen笔,画线

CBrush刷子,填充

CFont字体,控制文字输出的字体

CBitmap位图

CPalette调色板

CRgn区域,指定一块区域可以用于做特殊处理。

CFile文件。最重要的不外是Open(打开),Read(读入),Write(写)

CString字符串。封装了C中的字符数组,非常实用。

CPoint点,就是(x, y)对

CRect矩形,就是(left, top, right, bottom)

CSize大小,就是(cx, cy)对(宽、高)

Windows使用与设备无关的图形设备环境(DC: Device Context) 进行显示。MFC基础类库定义了设备环境对象类----CDC类。

CDC与CGdiObject的关系

说到CDC类就不能不提一下GdiObject---图形对象类。 在Windows应用程序中,设备环境与图形对象共同工作,协同完成绘图显示工作。就像画家绘画一样,设备环境好比是画家的画布,图形对象好比是画家的画笔。用画笔在画布上绘画,不同的画笔将画出不同的画来。选择合适的图形对象和绘图对象,才能按照要求完成绘图任务。

有关CDC类的继承

父类:从 CObject 直接继承而来。继承了CObject类的各种特性,如动态创建等等。

子类:CClientDC-------代表 *** 作窗口的DC ,是比较常用的一个子类

CMetaFileDC ------响应Meta File的DC ,Meta File是一些GDI消息。

CPaintDC-------响应WM_PAINT消息的DC。

CWindowDC ------代表整个屏幕的DC

CDC类的数据成员

数据成员只有两个:

HDC m_hDC : CDC对象使用的输出设备上下文

HDC m_hAttribDC : CDC对象使用的属性设备上下文

二者在CDC对象创建时指向相同的设备上下文。

问:VC 解释一下CDC pDC=pWnd->GetDC();

答:绘图用到的所有有关的类与函数都被集合到一起,被称之为设备上下文,或设备环境。你可以将这个类集看成一个超级的大类。GetDC()是一个函数,它能获得DC的使用权,也就是说它将句柄(或指针)交给了你,也就是说它将使用它的钥匙交给了你。你可以使用它的所有函数了。不用再向API函数那样,每一个绘图动作都要使用一个函数,如果你不想改变它的默认值,可以直接绘图,当然,他提供了比API更加强大的函数与更加多的功能。当然,对初学者,最方便的是,不用记大量的函数了,当你用它实例化一个对象后(也称得到设备上下文(DC)),你只要用->或就可以在VC提示的帮助下来选择相应的函数了。

CDC pDC=pWnd->GetDC();

1用CDC(MFC的设备上下文)实例化一个对象的指针

2为这个对象的指针赋值为pWnd

3pWnd被赋值为GetDC相当于用API的DC实例化一个对象的指针pWnd

小结:用MFC的设备上下文实列化一个指针的对象,这个指针对象的值来源于API的设备上下文实例化。

==============

实际上,MFC的大多数调用的函数,最终调用的都是API里的相应的函数

问:VC++中绘图 用到的this->GetDC()函数是什么作用还有 this->ReleaseDC(pDC)

答:1、this指针是当前类的对象的指针它指向类实例化后的对象它是隐含的指针每个对象都有一个,使用它方便呀,不用自已再定义指针了

--------------------------------------

2、this->GetDC();得到DC,

相当于

CDC pDC;

pDC->GetDC();

也相当于

CDC dc;

dcGetDC();

-----------------------------------

3、this->ReleaseDC()是释放DC

------------------------------------

4、DC的常被称为设备上下文,或设备环境它是一个超大的类或函数的集合它集合了,所有的绘图,打印,等相关的类及函数你只要声明了它的对象或指针,你就得到了它的所有类及函数的使用权象画笔,画刷,位图,绘图函数等等全部的功能你只要用/dc/this->/pDC->等方式就可以直接调用它的函数了

CClientDC

类CClientDC派生于CDC,在构造时调用了Windows函数GetDC,在析构时调用了ReleaseDC。这意味着和CClientDC对象相关的设备上下文是窗口的客户区。

几种DC及区别

CClientDC:(客户区设备上下文)用于客户区的输出,与特定窗口关联,可以让开发者访问目标窗口中客户区,其构造函数中包含了GetDC,析构函数中包含了ReleaseDC:

用法是:CClientDC dc(this);//this一般指向本窗口或当前活动视图dcTextOut(10,10,str,strGetLength());//利用dc输出文本,如果是在CScrollView中使用,还要注意调用OnPrepareDC(&dc)调整设备上下文的坐标。CPaintDC用于响应窗口重绘消息(WM_PAINT)时的绘图输出。CPaintDC在构造函数中调用BeginPaint()取得设备上下文,在析构函数中调用EndPaint()释放设备上下文。EndPaint()除了释放设备上下文外,还负责从消息队列中清除WM_PAINT消息。因此,在处理窗口重画时,必须使用CPaintDC,否则WM_PAINT消息无法从消息队列中清除,将引起不断的窗口重画。CPaintDC也只能用在WM_PAINT消息处理之中。

Detach();}CWindowDC:关联一特定窗口,允许开发者在目标窗口的任何一部分进行绘图,包含边界与标题,这种DC同WM_NCPAINT消息一起发送

CWindowDC与CClientDC,CPaintDC的区别:CWindowDC可在非客户区绘制图形,而CClientDC,CPaintDC只能在客户区绘制图形。CWindowDC下坐标原点是在屏幕的左上角,CClientDC,CPaintDC下坐标原点是在客户区的左上角。CClientDC与CPaintDC的区别:

CPaintDC的对象一般用在OnPaint内以响应Windows消息WM_PAINT,自动完成绘制,在整个窗口内进行重画,维持原有窗口完整性。CClientDC应用在非响应Windows消息WM_PAINT的情况下,进行实时绘制,绘制的区域内被重画。

CDC与CGdiObject的关系

说到CDC类就不能不提一下GdiObject---图形对象类。 在Windows应用程序中,设备环境与图形对象共同工作,协同完成绘图显示工作。就像画家绘画一样,设备环境好比是画家的画布,图形对象好比是画家的画笔。用画笔在画布上绘画,不同的画笔将画出不同的画来。选择合适的图形对象和绘图对象,才能按照要求完成绘图任务。

有关CDC类的继承

父类:从 CObject 直接继承而来。继承了CObject类的各种特性,如动态创建等等。

子类:CClientDC-------代表 *** 作窗口的DC ,是比较常用的一个子类

CMetaFileDC ------响应Meta File的DC ,Meta File是一些GDI消息。

CPaintDC-------响应WM_PAINT消息的DC。

CWindowDC ------代表整个屏幕的DC

CDC类的数据成员

数据成员只有两个:

HDC m_hDC : CDC对象使用的输出设备上下文。

HDC m_hAttribDC : CDC对象使用的属性设备上下文。

二者在CDC对象创建时指向相同的设备上下文。

所需头文件:#include <afxwinh>

以上就是关于VC中怎样才能让程序所画的小车动态行走全部的内容,包括:VC中怎样才能让程序所画的小车动态行走、用matlab实现下列式子绘图,程序和绘图是怎样的、如何用MATLAB把如下数据绘制成动态曲线,请给出详细程序等相关内容解答,如果想了解更多相关内容,可以关注我们,你们的支持是我们更新的动力!

欢迎分享,转载请注明来源:内存溢出

原文地址: http://outofmemory.cn/zz/9633730.html

(0)
打赏 微信扫一扫 微信扫一扫 支付宝扫一扫 支付宝扫一扫
上一篇 2023-04-30
下一篇 2023-04-30

发表评论

登录后才能评论

评论列表(0条)

保存