有关三角函数的问题(逆时钟旋转)

zhyindividual 2007-12-22 03:14:54
以下代码是一个时钟,我想让它逆时钟转动,数学没学好,不知道怎么改,希望无忧的兄弟姐妹能帮帮忙.感激不尽!

当然,如果更有哪位能帮我实现类似腾讯QQ砸Q宠蛋的那个锤子的动画效果则更好了.
具体效果可参看如下网址(移到蛋上面点击鼠标,不要松开)

http://img.pet.qq.com/act/guide/egg.swf

<HTML><HEAD> 
<META http-equiv=Content-Type content="text/html; charset=gb2312">
<META content="MSHTML 6.00.6000.16414" name=GENERATOR></HEAD>
<BODY>
<DIV
style="LEFT: 155px; WIDTH: 400px; ZOOM: 1; POSITION: absolute; TOP: 133px; HEIGHT: 300px">
<DIV id=bg
style="LEFT: -22px; WIDTH: 150px; ZOOM: 1.5; POSITION: absolute; TOP: -57px; HEIGHT: 150px"><IMG
style="Z-INDEX: 22; WIDTH: 129px; HEIGHT: 129px" src="http://www.jb51.net/upload/novelty.gif">
</DIV>
<DIV id=h
style="PADDING-RIGHT: 5px; PADDING-LEFT: 5px; PADDING-BOTTOM: 5px; WIDTH: 129px; PADDING-TOP: 5px; POSITION: absolute; HEIGHT: 129px"><IMG
style="Z-INDEX: 22; WIDTH: 129px; HEIGHT: 129px" src="http://www.jb51.net/upload/novelty_h.gif">
</DIV>
<DIV id=m
style="PADDING-RIGHT: 5px; PADDING-LEFT: 5px; PADDING-BOTTOM: 5px; WIDTH: 129px; PADDING-TOP: 5px; POSITION: absolute; HEIGHT: 129px"><IMG
style="Z-INDEX: 22; WIDTH: 129px; HEIGHT: 129px" src="http://www.jb51.net/upload/novelty_m.gif">
</DIV>
<DIV id=s
style="PADDING-RIGHT: 5px; PADDING-LEFT: 5px; PADDING-BOTTOM: 5px; WIDTH: 129px; PADDING-TOP: 5px; POSITION: absolute; HEIGHT: 129px"><IMG
style="Z-INDEX: 22; WIDTH: 129px; HEIGHT: 129px" src="http://www.jb51.net/upload/novelty_s.gif">
</DIV>
<DIV id=dot
style="PADDING-RIGHT: 5px; PADDING-LEFT: 5px; PADDING-BOTTOM: 5px; WIDTH: 129px; PADDING-TOP: 5px; POSITION: absolute; HEIGHT: 129px"><IMG
style="Z-INDEX: 22; WIDTH: 129px; HEIGHT: 129px" src="http://www.jb51.net/upload/novelty_dot.gif">
</DIV>
<DIV>
<SCRIPT>
//oObj input requires that a matrix filter be applied.
//deg input defines the requested angle of rotation.
var deg2radians = Math.PI * 2 / 360;
function MatrixFilter(obj)
{
if(!obj.filters)return;
//alert(obj.filters.item(0));
var Matrix;
for(p in obj.filters)
{
if(p=="DXImageTransform.Microsoft.Matrix")Matrix=obj.filters["DXImageTransform.Microsoft.Matrix"];
}
if(!Matrix)
{
obj.style.filter+="progid:DXImageTransform.Microsoft.Matrix()";
}
Matrix=obj.filters["DXImageTransform.Microsoft.Matrix"];
this.equal=function(Matrix2D_x)
{
if(Matrix2D_x.M11)Matrix.M11 = Matrix2D_x.M11;
if(Matrix2D_x.M12)Matrix.M12 = Matrix2D_x.M12;
if(Matrix2D_x.M21)Matrix.M21 = Matrix2D_x.M21;
if(Matrix2D_x.M22)Matrix.M22 = Matrix2D_x.M22;
}

if(arguments[1])this.equal(arguments[1]);

this.Rotate=function(deg)
{
rad = deg * deg2radians;
costheta = Math.cos(rad);
sintheta = Math.sin(rad);
var d=new Matrix2D(costheta,-sintheta,sintheta,costheta);
this.equal(Matrix2D.Mul(Matrix,d));
}
this.RotateTo=function(deg)
{
rad = deg * deg2radians;
costheta = Math.cos(rad);
sintheta = Math.sin(rad);
var d=new Matrix2D(costheta,-sintheta,sintheta,costheta);
this.equal(d);
}
this.RotateAt=function(deg,sx,sy)
{
rad = deg * deg2radians;
costheta = Math.cos(rad);
sintheta = Math.sin(rad);
var d=new Matrix2D(costheta,-sintheta,sintheta,costheta);
var x=sx-Matrix.Dx;
var y=sy-Matrix.Dy;
this.MoveTo(x*costheta+y*sintheta-x,-x*sintheta+y*costheta-y);
this.equal(Matrix2D.Mul(Matrix,d));
}
this.RotateToAt=function(deg,sx,sy)
{
rad = deg * deg2radians;
costheta = Math.cos(rad);
sintheta = Math.sin(rad);
var d=new Matrix2D(costheta,-sintheta,sintheta,costheta);
var x=sx;
var y=sy;
this.MoveTo(x-(x*costheta-y*sintheta),-(x*sintheta+y*costheta-x));
this.equal(d);
}

this.MoveTo=function(sx,sy)
{
Matrix.Dx=sx;
Matrix.Dy=sy;
}
this.toMatrix2D=function()
{
return new Matrix2D(Matrix.M11,Matrix.M12,Matrix.M21,Matrix.M22);
}
this.ZoomBy=function(sx,sy)
{
var d=new Matrix2D(sx,0,0,sy);
this.equal(Matrix2D.Mul(Matrix,d));
}
this.toString=function()
{
return ""+Matrix.M11+" "+Matrix.M12+"\n"+Matrix.M21+" "+Matrix.M22+"\n"
}
//Matrix.SizingMethod='clip to original';
//this.fnSetRotation(30);
//alert(Matrix.M11);
//alert(obj.filters["DXImageTransform.Microsoft.Matrix"]);
}
function Matrix2D()
{
this.M11 = arguments[0]||1;
this.M12 = arguments[1]||0;
this.M21 = arguments[2]||0;
this.M22 = arguments[3]||1;
this.Mul_Matrix2D=function(Matrix2D_b)
{
var r=new Matrix2D();
r=Matrix2D.Mul(this,Matrix2D_b);
return r;
}
this.toString=function()
{
return ""+this.M11+" "+this.M12+"\n"+this.M21+" "+this.M22+"\n"
}
}
Matrix2D.Mul=function(Matrix2D_a,Matrix2D_b)
{
var r=new Matrix2D();
r.M11=Matrix2D_a.M11*Matrix2D_b.M11+Matrix2D_a.M12*Matrix2D_b.M21;
r.M12=Matrix2D_a.M11*Matrix2D_b.M12+Matrix2D_a.M12*Matrix2D_b.M22;
r.M21=Matrix2D_a.M21*Matrix2D_b.M11+Matrix2D_a.M22*Matrix2D_b.M21;
r.M22=Matrix2D_a.M21*Matrix2D_b.M12+Matrix2D_a.M22*Matrix2D_b.M22;
return r;
}


var ms=new MatrixFilter(s);
var mm=new MatrixFilter(m);
var mh=new MatrixFilter(h);
var i=1;
setInterval("ms.RotateToAt((new Date()).getSeconds()*6+6,69,69)",500);
setInterval("mm.RotateToAt((new Date()).getMinutes()*6+6,69,69)",500);
setInterval("mh.RotateToAt(((new Date()).getHours()+(new Date()).getMinutes()/60)*30,69,69)",500);
//mf.MoveTo(30,70);
//mf.ZoomBy(1.5,1.5);
//mf.ZoomBy(1.5,1.5);
//alert(mf.toMatrix2D());

//alert(Matrix2D.Mul(m2d1,m2d2));
//fnSetRotation(oDiv.filters.item(0),30);
</SCRIPT>
</DIV></DIV></BODY></HTML>
...全文
169 3 打赏 收藏 转发到动态 举报
写回复
用AI写文章
3 条回复
切换为时间正序
请发表友善的回复…
发表回复
浴火_凤凰 2008-05-16
  • 打赏
  • 举报
回复
有问题先问google
wilowind 2007-12-26
  • 打赏
  • 举报
回复
恩, 时钟初始化的不好。 加个偏移量吧

setInterval("mh.RotateToAt(360-((new Date()).getHours()+(new Date()).getMinutes()/60)*30+12,69,69)",500);
wilowind 2007-12-26
  • 打赏
  • 举报
回复
不用管三角函数, 只需要

setInterval("ms.RotateToAt((new Date()).getSeconds()*6+6,69,69)",500);
setInterval("mm.RotateToAt((new Date()).getMinutes()*6+6,69,69)",500);
setInterval("mh.RotateToAt(((new Date()).getHours()+(new Date()).getMinutes()/60)*30,69,69)",500);


改为

setInterval("ms.RotateToAt(360-(new Date()).getSeconds()*6,69,69)",500);
setInterval("mm.RotateToAt(360-(new Date()).getMinutes()*6,69,69)",500);
setInterval("mh.RotateToAt(360-((new Date()).getHours()+(new Date()).getMinutes()/60)*30,69,69)",500);

87,902

社区成员

发帖
与我相关
我的任务
社区描述
Web 开发 JavaScript
社区管理员
  • JavaScript
  • 无·法
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧