游客:
注册
|
登录
|
会员
|
搜索
|
统计
|
帮助
无忧脚本
»
JavaScript & VBScript & DHTML 脚本技术讨论版
» 请高手来解决一个JS钟摆问题
‹‹ 上一主题
|
下一主题 ››
投票
交易
悬赏
活动
打印
|
推荐
|
订阅
|
收藏
标题:
[讨论]
请高手来解决一个JS钟摆问题
夏如嘏
小恐龙
UID 46652
精华 0
积分 231
帖子 112
威望 134
阅读权限 30
注册 2006-2-6
来自 上海
状态 离线
#1
大
中
小
使用道具
发表于 2008-2-29 20:32
资料
个人空间
主页
短消息
加为好友
请高手来解决一个JS钟摆问题
这是我自己写的一个,本来想做成一个钟摆的,就是用鼠标拉到某个位置后,自动掉下来,
按照能量守恒定律进行力学摆动。
但是因为公式不知道,还有一些莫名的数学BUG,实在写不下去了,请高手帮忙修改!!
<html xmlns:v="urn:schemas-microsoft-com:vml" xmlns:o="urn:schemas-microsoft-com:office:office"> <head> <meta http-equiv="Content-Type" content="text/html; charset=utf-8" /> <!--[if !mso]> <style> v\:* { behavior: url(#default#VML) } o\:* { behavior: url(#default#VML) } .shape { behavior: url(#default#VML) } </style> <![endif]--> <style> #div{ position:absolute; width:50px; height:50px; border:1px #333 solid; background-color:#666699; color:#FFF; cursor:pointer; filter: progid:DXImageTransform.Microsoft.Matrix(M11=1,M12=0,M21=0,M22=1,SizingMethod="auto expand"); z-index:2; font-size:16px; text-align:center; line-height:50px; overflow:hidden; } #line{ position:absolute; left:0; top:0; z-index:1; } </style> <script language="javascript"> var div=null; var line=null; function config() { div=document.getElementById("div"); line=document.getElementById("line"); div.width=parseInt(div.currentStyle.width); div.height=parseInt(div.currentStyle.height); div.q=0; line.strokecolor="#000"; line.strokeweight="1px"; line.from="200,200"; line.to="200,300"; line.pleft=300; line.ptop=200; line.plength=200; line.from=line.pleft+","+line.ptop; document.body.onselectstart=function(){event.returnValue=false;}; div.setpos=div_setpos; div.setrote=div_setrote; div.setpos(0,200,true); div.setpos(200,200); div.setrote(); div.onmousedown=div_onmousedown; div.onmousemove=div_onmousemove; div.onmouseup=div_onmouseup; } function div_onmousedown() { div.setCapture(); div.preleft=div.xleft; div.pretop=div.xtop; div.prex=event.x; div.prey=event.y; } function div_onmousemove() { if(event.button!=1) return; var x=event.x-div.prex+div.preleft; var y=event.y-div.prey+div.pretop; div.setpos(x,y); } function div_onmouseup() { div.releaseCapture(); } function div_setrote() { } function div_setpos(xleft,xtop,byhand) { div.xleft=xleft; div.xtop=xtop; if(byhand==true){ div.style.left=line.pleft+xleft-div.width/2; div.style.top=line.ptop+xtop-div.height/2; line.to=parseInt(div.style.left)+div.width/2+","+parseInt(div.style.top); }else{ var qa=0; if(xtop==0){ qa=Math.PI/2; }else{ qa=Math.atan(xleft/xtop); } var lx=Math.abs(parseInt((div.width/2)*Math.cos(qa))); var ly=Math.abs(parseInt((div.width/2)*Math.sin(qa))); if(xleft>=0){ div.style.left=line.pleft+xleft-lx; div.style.top=line.ptop+xtop-ly; line.to=(line.pleft+xleft)+","+(line.ptop+xtop); }else{ var x1=Math.abs(div.width*Math.tan(qa)); var x2=div.height-x1; var w2=x2*Math.sin(qa); var w1=x1/Math.sin(qa); var w=Math.abs(w1)+Math.abs(w2); div.style.left=line.pleft+xleft-(w-lx); div.style.top=line.ptop+xtop-ly; line.to=(line.pleft+xleft)+","+(line.ptop+xtop); } with(div.filters.item(0)){ M11=Math.cos(qa); M12=Math.sin(qa); M21=-Math.sin(qa); M22=Math.cos(qa); } } } window.attachEvent("onload",config); </script> </head> <body> <div id="div">重</div> <v:line id="line"></v:line> </body> </html>
提示:您可以先修改部分代码再运行
不用谢,大家爽,才是真的爽
winter
超级版主
5毛发一贴,千里不留行。
UID 65747
精华
11
积分 7582
帖子 3353
威望 3335
阅读权限 150
注册 2007-2-27
状态 离线
#2
大
中
小
使用道具
发表于 2008-3-1 10:38
资料
个人空间
短消息
加为好友
公式就是能量守恒 m*g*h=m(v^2)/2
我的blog
夏如嘏
小恐龙
UID 46652
精华 0
积分 231
帖子 112
威望 134
阅读权限 30
注册 2006-2-6
来自 上海
状态 离线
#3
大
中
小
使用道具
发表于 2008-3-6 14:20
资料
个人空间
主页
短消息
加为好友
这个公式我知道,只是要让它动起来,我需要根据时间t来计算h
在知道时间t的情况下不知道怎样跟这个共识关联起来。
不用谢,大家爽,才是真的爽
winter
超级版主
5毛发一贴,千里不留行。
UID 65747
精华
11
积分 7582
帖子 3353
威望 3335
阅读权限 150
注册 2007-2-27
状态 离线
#4
大
中
小
使用道具
发表于 2008-3-6 14:48
资料
个人空间
短消息
加为好友
就是想知道高度和时间的函数关系呗
我的blog
winter
超级版主
5毛发一贴,千里不留行。
UID 65747
精华
11
积分 7582
帖子 3353
威望 3335
阅读权限 150
注册 2007-2-27
状态 离线
#5
大
中
小
使用道具
发表于 2008-3-6 15:14
资料
个人空间
短消息
加为好友
是这样滴
单摆的运动方程基本上是解不出来滴 假如摆角是x,x''是x对时间的二阶导数 最后求出来的大概是这么个东西
x'' * l = - g * Sin x.
但是x比较小的时候可以Sin x ≈ x 这样单摆就变成和弹簧类似的东西了 然后可以很容易的解掉 所以只要你不把线拉得很远还是比较好办的
不过你如果很bt的话 完全可以用程序模拟这个微分方程 或者数值计算你比较在行的话(数值计算我是小白) 这个微分方程就不是问题了
我的blog
月影
超级版主
UID 24714
精华
9
积分 4243
帖子 1553
威望 1918
阅读权限 150
注册 2005-3-9
状态 离线
#6
大
中
小
使用道具
发表于 2008-3-6 17:17
资料
个人空间
主页
短消息
加为好友
小摆角的单摆(<5度)可以用无阻尼简谐振动方程来近似:
x'' + x = 0
投票
交易
悬赏
活动
最近访问的论坛 ...
Flex & Flash 技术讨论版
Html & XHtml & CSS 网页制作讨论版
ASP & Access & SQL Server 后台编程讨论版
无忧脚本
无忧脚本技术讨论区
> 原创文章 & 讨论汇总版
> Html & XHtml & CSS 网页制作讨论版
> JavaScript & VBScript & DHTML 脚本技术讨论版
> XML & XSL & XPath & VML 网页技术讨论版
> ASP & Access & SQL Server 后台编程讨论版
> PHP & MySQL 后台编程讨论版
> JSP & Java & J2SE 后台编程讨论版
> .Net 相关技术讨论版
> Web 服务器技术
> Flex & Flash 技术讨论版
> Web UI & 图形技术讨论版
无忧脚本资源服务区
> 经典代码、教程资源库
> 参考手册、常用软件资源库
> 无忧合租服务器讨论版
无忧脚本休闲区
> 休闲留言板
> 招聘求职、网站推荐、广告信息版
> 无忧站务管理版
> 垃圾帖回收站
控制面板首页
编辑个人资料
积分交易
公众用户组
好友列表
升级个人空间
基本概况
流量统计
客户软件
发帖量记录
论坛排行
主题排行
发帖排行
积分排行
在线时间
管理团队
当前时区 GMT+8, 现在时间是 2010-7-31 04:39
苏ICP备05080427号
Powered by
Discuz!
5.5.0
© 2001-2007
51JS.COM
Processed in 0.224962 second(s), 8 queries , Gzip enabled
TOP
清除 Cookies
-
联系我们
-
无忧脚本
-
Archiver