| 网站首页 | 业界新闻 | 小组 | 威客 | 人才 | 下载频道 | 博客 | 代码贴 | 在线编程 | 编程论坛
欢迎加入我们,一同切磋技术
用户名:   
 
密 码:  
共有 3821 人关注过本帖
标题:怎样画动态的直线
只看楼主 加入收藏
greenpop
Rank: 1
等 级:新手上路
帖 子:83
专家分:3
注 册:2011-12-22
结帖率:89.19%
收藏
已结贴  问题点数:4 回复次数:11 
怎样画动态的直线
我想做一个光的反射定律的动画.首先,画一逐渐延长的直线,就把我难住了.请教各位高手,怎样实现?
谢谢!
搜索更多相关主题的帖子: 动态 动画 延长 
2016-11-15 16:00
xzlxzlxzl
Rank: 15Rank: 15Rank: 15Rank: 15Rank: 15
来 自:湖北
等 级:贵宾
威 望:125
帖 子:1091
专家分:5825
注 册:2014-5-3
收藏
得分:1 
你在哪方面难住了?打算从哪开始呢?
这个例程提示如下:
1、数学方面了解直线方程
2、程序方面首先知道直线方程如何转换为代码能计算的表达式、变量之间的关系,其次知道时钟控件或自己的延时函数如何参与表达式运算,最后应知道如何把运算结果变成图形坐标、知道line函数用法。

题主努力吧!
2016-11-15 16:32
风吹过b
Rank: 20Rank: 20Rank: 20Rank: 20Rank: 20
等 级:贵宾
威 望:364
帖 子:4947
专家分:30084
注 册:2008-10-15
收藏
得分:1 
直线,由点组长,或者由短的线段组成。
逐渐延长,就是每个循环把这些短的线段慢慢画上去。
按2楼的,先解直线方程。
直线延长,粗糙一点, X方向移动速度不变或Y方向移动不变,计算另一个。
          精确一点,计算距离,然后计算出X 和 Y 来。
如果要求不高,建议可以使用粗糙一点。

计算出来的X,Y ,然后再从这组X,Y,画到上一组X,Y去,每次都画一组,得到的就是延长的线。

努力吧,

授人于鱼,不如授人于渔
早已停用QQ了
2016-11-15 16:42
xiangyue0510
Rank: 14Rank: 14Rank: 14Rank: 14
等 级:贵宾
威 望:86
帖 子:941
专家分:5244
注 册:2015-8-10
收藏
得分:1 
你这个问题其实VB代码并不复杂,就是line (x1,y1)-(x2,y2)
主要问题是数学模型,也就是确定直线的表达式和求解。
要说数学模型,也不复杂,就是两条直线的求解,交点就是反射点。 起点到反射点就是入射光, 再计算起点对于镜面垂线的镜像点,就可以得到反射光
2016-11-15 16:42
xss_wl
Rank: 5Rank: 5
等 级:禁止访问
威 望:3
帖 子:100
专家分:315
注 册:2016-10-15
收藏
得分:1 
首先楼主必须学习和了解GDI,以及GDI+等相关的绘图API函数的基本知识,这个是自己用程序实现绘图的第一步工作。只有在比较全面地掌握了API绘图函数的基本使用方法后,才为实现图形的动画效果打下了扎实的基础。如果楼主想实现比较完美的动画效果,则可以考虑使用动画制作专业软件Flash来制作动画,然后使用VB来控制Flash动画中相关图形对象的具体动画效果。比如用VB来控制Flash动画中线条或者图形的颜色,形状,大小,粗细等进行变化,从而达到通过VB间接控制Flash动画的效果。
比如下面这个程序,我就是通过VB来间接控制Flash影片中的音量的。我们知道,Flash控件是没有提供任何方法或者属性,让我们来直接控制Flash影片的音量的。但是通过Flash暴露给我们的接口,我们就能通过VB控制Flash影片中的相关对象进行改变,实现我们需要的功能。
程序效果如下所示:
图片附件: 游客没有浏览图片的权限,请 登录注册

说明一下,这个程序里面的Flash控件中只有一副猴子的图片,里面播放的音乐是“爱上你是我的缘”笛子曲,Flash中的签名“Flash制作:小松鼠”那是我当初的QQ昵称。通过调整下方的滑道控件,你可以发现Flash中的音量跟随变化。而这种音量变化,你是没办法直接通过Flash控件的方法或者属性来实现的。因为Flash控件根本就没有提供调节Flash音量的方法或者属性,让我们来设置Falsh音量的。
VB调整Flash影片音量.rar (9.58 MB)

因为这个功能当初是给一个客户的需要设计的,对方已经把程序和相关的源代码全部购买了,所以,这里不方便通过源代码,请你谅解。但至少可以说明VB是可以控制Flash中的动画效果的。也充分说明,VB只要你学的精,学的透,它的功能也是相当强大的。
2016-11-15 22:20
xzlxzlxzl
Rank: 15Rank: 15Rank: 15Rank: 15Rank: 15
来 自:湖北
等 级:贵宾
威 望:125
帖 子:1091
专家分:5825
注 册:2014-5-3
收藏
得分:0 
  题主:vb自带函数完全可以达到你的需求,学基础时不要被那些故弄玄虚的所谓高大上吓到了。
(以下完全是为了文字的趣味,提升可读性,无他。如引起楼上版主不适请见谅!)

  楼上的为做这么简单的题,先从初学者一头雾水的api、gdi说起,又扯到毫不相干的flash动画,最后居然在控制flash音量上落脚,是不是文不对题了?显摆的有点过了。你就不怕把题主刚刚鼓起的学习勇气给吓没了?

  楼上还很原则地以保护用户利益为由,不给源代码。是不是好神秘?好高大上?既展现了他高深莫测的技术,又道出了他的软件市场需求旺盛,高!

  为破除神秘,让广大坛友知道技术学习没多大难度,今天我将以完全不知晓如何用vb控制flash、也不懂如何做flash动画的身份来完成楼上类似的用vb控制楼上提供的flash音量的程序,并提供源代码、完整工程。(哎,耽误了我下午的两节实验课,不知道一起做实验的那个帅哥有没有注意到我翘课)
  首先下载并解压楼上提供的附件并分析文件组成:楼上提供的共有4个文件,一个fla格式的是flash源文件,不会也没装flash编辑软件,这个文件我可以不理;一个网页文件也不用看;一个有vb图标的“工程1.EXE”文件,应该是示范程序了,没敢运行,怕中毒(这是经验,新手最好记住);剩下最后一个“test1.swf”就是我要试验的对象--楼上做的flash影片了(运行flash也会中毒,管不了那么多了)。
  如何从不会到会呢?我当然是祭起我的百度大旗了,一番“vb如何加载flash”“vb如何控制flash音量”“vb如何和flash互动”的关键词搜索并认真阅读相关文章,我知道了vb加载“Shockwave Flash”控件并了解了如何使用该控件的属性播放flash,也知道了两者互动需要使用FSCommand事件和SetVariable方法,FSCommand事件是flash通知vb而SetVariable方法是vb给flash发控制消息的,我只需要控制flash,FSCommand事件可不理。通过百度SetVariable的用法知道有两个字符串参数,一个是flash定义的名称,一个是值;我该怎么知道flash定义的名称呢?难道要我用上那个fla文件吗?还要装flash编辑软件,还要学怎么写flash脚本函数,这太麻烦了,放弃吧!等等,既然是字符串参数,而vb编译的exe文件中字符串常量通常都能显示看到的,于是,打开记事本,拖入楼上提供的“工程1.exe”文件,顿时一大堆乱码。耐心点,慢慢看,不一会,“< i n v o k e   n a m e = " s e t V o l "”这段unicode码引起我注意,这不明摆着是设置音量的意思吗?flash定义的名称应该就叫“setVol”,于是SetVariable "setVol","0"、SetVariable "setVol","100"的一通乱试,然并卵!再仔细分析那段unicode码,发现它并不是SetVariable的参数格式,而是一段xml代码,难道还有别的方法给flash发消息?通过遍历“Shockwave Flash”控件方法,CallFunction引起我注意,前面百度时好像看到过这个词,于是将整段unicode码还原为正常文本“<invoke name="setVol" returntype="xml"><arguments><number>0</number></arguments></invoke>”(number之间的0就是音量为0),用CallFunction方法一发送,顿时清净了,成功了,似乎很神秘的技术也不过如此啊!
  只要你智商够、有耐性、兴趣足,一切存在的技术都不叫事!下面发源代码及工程文件(加载flash控件后无法存储工程,我只好用动态控件的形式加载,原理一样)。
图片附件: 游客没有浏览图片的权限,请 登录注册

图片附件: 游客没有浏览图片的权限,请 登录注册

程序代码:
Dim flash As Object

Private Sub Command1_Click()
  flash.object.CallFunction "<invoke name=""setVol"" returntype=""xml""><arguments><number>0</number></arguments></invoke>"
End Sub

Private Sub Command2_Click()
  flash.object.CallFunction "<invoke name=""setVol"" returntype=""xml""><arguments><number>50</number></arguments></invoke>"
End Sub

Private Sub Command3_Click()
  flash.object.CallFunction "<invoke name=""setVol"" returntype=""xml""><arguments><number>500</number></arguments></invoke>"
End Sub

Private Sub Form_Load()
  Set flash = Me.Controls.Add("ShockwaveFlash.ShockwaveFlash", "aaa") '动态加载flash控件
  flash.Width = Me.ScaleWidth
  flash.Height = Me.ScaleHeight - 900
  flash.Visible = True                                                '设定控件大小并显示控件
  flash.object.LoadMovie 0, App.Path & "\test1.swf"                   '加载flash影片
End Sub

控制Flash音量.rar (3.55 MB)
2016-11-16 21:02
yangfrancis
Rank: 16Rank: 16Rank: 16Rank: 16
等 级:贵宾
威 望:141
帖 子:1510
专家分:7661
注 册:2014-5-19
收藏
得分:0 
回复 楼主 greenpop
用timer控件,每执行一次timer,画一小部分。这就是动画了
2016-11-16 22:46
xss_wl
Rank: 5Rank: 5
等 级:禁止访问
威 望:3
帖 子:100
专家分:315
注 册:2016-10-15
收藏
得分:0 
回复 6楼 xzlxzlxzl
一个把“负载均衡技术”说成是用于多用户并发访问的人,能有这种解析能力,也算是难能可贵了。
2016-11-17 11:15
xzlxzlxzl
Rank: 15Rank: 15Rank: 15Rank: 15Rank: 15
来 自:湖北
等 级:贵宾
威 望:125
帖 子:1091
专家分:5825
注 册:2014-5-3
收藏
得分:0 
回复 8楼 xss_wl
你真算的上“煮熟的鸭子,死嘴硬”。和你言尽于此了,你实在不配和我讨论技术!

[此贴子已经被作者于2016-11-17 11:25编辑过]

2016-11-17 11:24
xss_wl
Rank: 5Rank: 5
等 级:禁止访问
威 望:3
帖 子:100
专家分:315
注 册:2016-10-15
收藏
得分:0 
回复 9楼 xzlxzlxzl
如果不是故意留下Flash源文件给你,别说百度,估计千度你也未必能瞎猫遇见死耗子。我故意留下Flash源文件,正是希望人家楼主能够百度出来。
2016-11-17 11:44
快速回复:怎样画动态的直线
数据加载中...
 
   



关于我们 | 广告合作 | 编程中国 | 清除Cookies | TOP | 手机版

编程中国 版权所有,并保留所有权利。
Powered by Discuz, Processed in 0.022971 second(s), 9 queries.
Copyright©2004-2024, BCCN.NET, All Rights Reserved