LOFTER for ipad —— 让兴趣,更有趣

点击下载 关闭

actionscript

1143浏览    18参与
ID507306952

用有理数逼近平方根

尝试用有理数逼近平方根,且这个方法同样适用于比较精确地笔算平方根

原理:完全平方公式 A=(√A)^2=(x+m)^2=x^2+2mx+m^2

其中A是被开方数,x是我们的估测值,m是误差。

当m很小的时候,可以认为m^2→0,此时m=(A-x^2)/2x

故更加精确的数值x'=x+m=x+(A-x^2)/2x=(A/x+x)/2 即为该方法的原理。

可以证明,在保留一定位数小数的情况下,这种方法获得的数字的稳定值永远大于或等于准确值,但是仍然是相当精确的值。

利用上述公式多次循环可以得到相当准确的值。

这里用Flash AS3写了一个小程序 可以用来模拟该过程...

尝试用有理数逼近平方根,且这个方法同样适用于比较精确地笔算平方根

原理:完全平方公式 A=(√A)^2=(x+m)^2=x^2+2mx+m^2

其中A是被开方数,x是我们的估测值,m是误差。

当m很小的时候,可以认为m^2→0,此时m=(A-x^2)/2x

故更加精确的数值x'=x+m=x+(A-x^2)/2x=(A/x+x)/2 即为该方法的原理。

可以证明,在保留一定位数小数的情况下,这种方法获得的数字的稳定值永远大于或等于准确值,但是仍然是相当精确的值。

利用上述公式多次循环可以得到相当准确的值。

这里用Flash AS3写了一个小程序 可以用来模拟该过程

function cu(A:Number,m:String,uu:Number):void{

trace1("R  : "+Math.sqrt(A));

var f:Array=m.split("/");

var f1:Number=Number(f[0]); 

var f2:Number=Number(f[1]);

var t1:Number,t2:Number;

for(var i:Number=1;i<=uu;i++){

trace1((i<10?"0"+i:i)+": "+f1/f2);

trace1(" ("+f1+"/"+f2+")");

t2=2*f1*f2;

t1=f1*f1+f2*f2*A;

f1=t1;

f2=t2;

}


}

function trace1(s:String):void{

put.appendText(s);

put.appendText("\n");

}

cal.addEventListener("click",function(i:*):void{

put.text="";

cu(Number(q0.text),q1.text,int(q2.text));

});

元件摆放如下
程序运行的结果如下(初始值取3/2)


从而可以知道665857/470832已经是较为精确的值了(12位有效数字)。

以下是一些已经获得的结果(就是使用这个程序获得的)

√2 低精度近似665857/470832(12位有效数字)
 高精度近似768398401/543339720 (至少17位有效数字)
≈1.4142135623730951

√3低精度近似3650401/2107560(12位有效数字)
 高精度近似708158977/408855776  (至少17位有效数字)
≈1.7320508075688772

√5低精度近似4870847/2178309(12位有效数字)  51841/23184 (10位有效数字)
 高精度近似5374978561/2403763488  (至少15位有效数字)
≈2.23606797749979

√7低精度近似62921681/23782160(12位有效数字)
 高精度近似2081028097/786554688  (至少17位有效数字)
≈2.6457513110645907

√11低精度近似6874607/2072772(11位有效数字) 79201/23880(10位有效数字)
 高精度近似12545596801/3782639760 (至少14位有效数字)
≈3.3166247903554

_______________________________splitting_______________________________

以下谈一谈关于这个思路在笔算根号中的运用

1.初始值建议取比较逼近的值,但以简单为宜,如√2取3/2,√3取5/3。

2.保留分数直到第3次计算,第3次计算取6位小数(如上图04);精度不高的场合只需计算2次取2位小数(如上图03)。


大概就是这些,欢迎交流想法

zhanbaocheng

as3.0 interface接口用法

AS在2.0的时候就支持接口了

接口可以让你的程序更具扩展性和灵活性,打个比方

比如你定义了一个方法

代码:public function aMethod(arg:MyClass):void { .....}

参数 arg 的类型必须是 MyClass,因为我们需要在该方法中使用MyClass的API
而MyClass是一个类的话,你传入的对象必须是MyClass类的实例或者是MyClass子类的对象,但是当你要传入的一个对象,他既不是MyClass类的实例也不是MyClass子类的对象,而是一个已经继承了其他类的对象呢,这样就难办了。 因为AS和Java一样,都不允许多重继承,多重继承会带来使...


AS在2.0的时候就支持接口了

接口可以让你的程序更具扩展性和灵活性,打个比方

比如你定义了一个方法

代码:public function aMethod(arg:MyClass):void { .....}

参数 arg 的类型必须是 MyClass,因为我们需要在该方法中使用MyClass的API
而MyClass是一个类的话,你传入的对象必须是MyClass类的实例或者是MyClass子类的对象,但是当你要传入的一个对象,他既不是MyClass类的实例也不是MyClass子类的对象,而是一个已经继承了其他类的对象呢,这样就难办了。 因为AS和Java一样,都不允许多重继承,多重继承会带来使类结构变的复杂难以管理的麻烦。

这时候接口就能派上用场了。

代码:public function aMethod(arg:MyInterface):void { .....}

这时候我们传入的对象他只要是实现了MyInterface,都可以,无论是继承了什么具体类,而且一个类可以实现多个接口,这样就解决了不允许多重继承的问题。

以上只是我个人举的一个小小例子,我的认识可能还很浅显,具体大家还是要多看oo方面的资料,网上有很多,多用Google吧 as3.0 interface接口用法 - 超级大白菜 - 菜园

注意:

1、在接口中定义了几个方法,实现时就得实现几个方法,方法名称、参数个数、参数值、返回值等都得一样。

例子:

1、定义接口。

package {

public interface IExample {

   function TestFunc(param:String):String;

   function TestFunc_1(param:Number,param_1:Number):Number;

}

}

2、实现接口。

package {

public class TestInterface implements IExample {

   public function TestInterface() {

   }

   public function TestFunc(param:String):String {

   return param;

   }

   public function TestFunc_1(param:Number,param_1:Number):Number {

   return param;

   }

}

}

package {

public class TestInterface_1 implements IExample {

   public function TestInterface_1() {

   }

   public function TestFunc(param:String):String {

   return param;

   }

   public function TestFunc_1(param:Number,param_1:Number):Number {

   return param+param_1;

   }

}

}

3、使用接口类:

package {
            import flash.display.Sprite;
            public class InterfaceExample extends Sprite

     {
            private var MyNumber:Number=20;
            private var MyTestInterface,MyTestInterface_1:IExample;
            public function InterfaceExample()

               {
                      MyTestInterface=new TestInterface();
                      trace(MyTestInterface.TestFunc("Hi..Hi"));        //output:Hi..Hi
                        trace(MyTestInterface.TestFunc_1(MyNumber,MyNumber+1));   //output:20
                        MyTestInterface_1=new TestInterface_1();
                       trace(MyTestInterface_1.TestFunc("ho..Hi"));     //output:ho..Hi
                        trace(MyTestInterface_1.TestFunc_1(MyNumber,MyNumber+1));   //output:41

                }
                       }
}

adolfjap

rtmp 判断是否还在下载 在没有取得corssdomain时

netstream.info.byteCount 这个能显示已经下载了多少字节
netstream.info.byteCount 这个能显示已经下载了多少字节
adolfjap

rtmp 是否下载完成

先出现 NetStream.Play.Stop

现出现NetStream.Play.Empty

说明已经完成

先出现 NetStream.Play.Stop

现出现NetStream.Play.Empty

说明已经完成

熊掌

突发奇想第二弹!图书馆和教务处

对AS3.0网络通信很感兴趣,学习后发现AS内嵌了强大的网络通信包,借助这个包包,自己写出的小脚本就可以获取到网络上的数据了。首先下手的学校的图书馆网站,我们学校的图书馆最近在每一个阅览室门口都安装了检测设备,可以检测到进出的人流量,图书馆把这些信息放在了一个单独的网页里供大家查询(虽然不太准确==)。

Flash提供给AS3.0的net包主要包括三个强大的类,URLLoader、URLRequest和URLVariables,第一个负责完成发送和接收操作,第二个就是被发送和接收的对象同时包括发送和接收动作的目标和属性,第三个就是第二个包裹的值。

因为这次我们不用向图书馆服务器发送什么数据...

对AS3.0网络通信很感兴趣,学习后发现AS内嵌了强大的网络通信包,借助这个包包,自己写出的小脚本就可以获取到网络上的数据了。首先下手的学校的图书馆网站,我们学校的图书馆最近在每一个阅览室门口都安装了检测设备,可以检测到进出的人流量,图书馆把这些信息放在了一个单独的网页里供大家查询(虽然不太准确==)。

Flash提供给AS3.0的net包主要包括三个强大的类,URLLoader、URLRequest和URLVariables,第一个负责完成发送和接收操作,第二个就是被发送和接收的对象同时包括发送和接收动作的目标和属性,第三个就是第二个包裹的值。

因为这次我们不用向图书馆服务器发送什么数据包,所以只要连接下载指定的网页就可以了。代码很快码完,成功接收到了那个显示图书馆人流量信息的网页。西噶西……中文出现了严重的乱码现象,其他字符都没有任何问题,就中文乱码了,百度各种方法无果,求教实验室里的大神(此处应该@CodeFace),大神热心指点一语道破天机说是编码方式的问题,让我把接收到的文本转成UTF-8试试。我通过将接收到的数据设定为二进制数据然后以UTF-8重新编码(readMultiByte),终于获取到了无乱码的网页源代码。

可是又有新问题,怎么样拿到我想要的字段呢,本来以为HTML语言和XML语言同根可以直接转化剩下的事情就容易了,可是最后只能承认自己的确是太天真了,获取到的网页源码中还包括JS语言不纯净无法直接转化成XML。于是只能再去找大神帮忙(此处再次@CodeFace),大神热心指点一语道破天机说你用正则就可以了,于是赶紧恶补正则表达式的知识,反复调试总算写出了可以抽出我想要字段的方法了,最后花了一些时间写界面,一个小Flash小工具就完成了。



然后,我把自己的目标转移到了教务处( ̄_, ̄ )

说到教务处我就不得不提那坑爹的三秒防刷和相应速度,不过今天我就要好好和它打交道了。和很多大学一样,我们大学用的也是方正的系统,怎么样才能让自己写的脚本能登录到教务处里面呢,学号密码可以拿我自己的,但是验证码怎么办,于是又得请教大神……大神热心指点一语道破天机说其实我们教务处的登录是有漏洞的(此处应降低音量……),如果我们向服务器发送的数据包里包含验证码(txtSecretCode)这个字段,那么只有填写正确的验证码才能通过审核,但是如果发给服务器的包包里根本没有这个字段,那么服务器就会忽略验证码的存在,只审核用户名和密码……

知道了跳过验证码的方法,现在我开始寻思怎么发包了,说实话我是一点基础知识都没有啊,查看了一些网上的技术文又是一通恶补,然后看着浏览器,想起谷歌浏览器有个不错的network功能可以捕获和记录网络通信,于是打开这个功能,然后手动登录教务处,果然捉到了数据包。PS.截图包括敏感信息,和谐之~



按照捕捉到的数据包的格式,在脚本中也建立了一个数据包,很不客气地把txtSecretCode这个字段去除,然后编辑了一个能获得学生姓名的方法(依然用的是正则),然后就是测试……



成功了!把界面写出来,又是一个简单的小工具了(虽然没什么大用目前),以后通过不断扩展,获得什么课程表啊成绩啊考试安排啊都是很容易实现的啦。

  

熊掌

突发奇想想写个俄罗斯方块

继续研习AS3.0,看到新学的几个方法,脑子里突然蹦出写一个俄罗斯方块的主意,于是赶紧动手。

[图片]
第一版不堪入目,不过已经实现基本功能,随时间流逝方块不断向下移动,同时键盘方向键也可以操纵方块,如果落地方块就不能动了,顶部随机产生新的方块。不过最大的问题是方块不能叠放在一起……


后来继续上网查找资料苦苦寻觅实现叠放方块的方法,发现一个不错的招hitTestObject(),可以检测到对象之间是否接触,参考网上的源码对自己的俄罗斯方块进行改造,总算实现了方块叠放,不过新的问题又来了

[图片]
通过随机颜色(当然是在指定范围内的),方块的色彩果然好看了不少,不过因为AS3.0自带的hitTestObject...

继续研习AS3.0,看到新学的几个方法,脑子里突然蹦出写一个俄罗斯方块的主意,于是赶紧动手。


第一版不堪入目,不过已经实现基本功能,随时间流逝方块不断向下移动,同时键盘方向键也可以操纵方块,如果落地方块就不能动了,顶部随机产生新的方块。不过最大的问题是方块不能叠放在一起……


后来继续上网查找资料苦苦寻觅实现叠放方块的方法,发现一个不错的招hitTestObject(),可以检测到对象之间是否接触,参考网上的源码对自己的俄罗斯方块进行改造,总算实现了方块叠放,不过新的问题又来了


通过随机颜色(当然是在指定范围内的),方块的色彩果然好看了不少,不过因为AS3.0自带的hitTestObject()方法的机制问题,角碰角或者侧面碰触都算是接触,所以会出现不少方块悬空停靠的问题(不过觉得这样随机产生的图案倒是别具一种美感~~),没办法,只好自己寻找解决的良方。

最后我用的方法是利用getObjectsUnderPoint(),简单来说就是在一个方块移动的时候在它三面(左右下)放置一个点,如果下面的点检测到有其它方块存在,那么就停止当前方块的移动,如果左边的点检测到左边有其他方块存在,就暂时让左方向键失灵,右侧同理,这样就可以高度模拟俄罗斯方块的基本物理特性了。


当然我也添加了gameover的机制,否则这个游戏会陷入冗循环的 =_=表示因为这个软件崩盘过一次……


截止我写这篇稿子的时候,这个俄罗斯方块就完成到这里了。我知道这个离真正的俄罗斯方块还有十分遥远的距离╮(╯_╰)╭,比如添加各种形状的方块,可以旋转,一行铺满自动消除等等,想想都觉得有点小激动呢……希望这个游戏不会烂尾。

TEA的WORKSPACE
08年写的一个mmo arpg...

08年写的一个mmo arpg demo,是现在我们用的2d mmo arpg引擎的雏形

08年写的一个mmo arpg demo,是现在我们用的2d mmo arpg引擎的雏形

DY's NOTEBOOK
一百层系列(玩法就不用介绍了吧...

一百层系列(玩法就不用介绍了吧^_^)

一百层系列(玩法就不用介绍了吧^_^)

DY's NOTEBOOK
大头贴项目(小露一下脸)通过摄...

大头贴项目(小露一下脸)

通过摄像头获取图片,对图片应用滤镜

大头贴项目(小露一下脸)

通过摄像头获取图片,对图片应用滤镜

DY's NOTEBOOK
05年做的横版地图编辑器

05年做的横版地图编辑器

05年做的横版地图编辑器

DY's NOTEBOOK

2D mmo arpg游戏引擎展示,包括UI编辑器,地图编辑器,资源打包工具,协议编辑器等。目前已有两款mmo arpg游戏采用该引擎开发并上线。

2D mmo arpg游戏引擎展示,包括UI编辑器,地图编辑器,资源打包工具,协议编辑器等。目前已有两款mmo arpg游戏采用该引擎开发并上线。

CJ's Weblogs

AS3 Common Bytecode

AS3ommons-bytecode 可以生成和解析字节码(ByteCode),提供了一组更加强大的反射API.

他能够在运行时生成类,并且具备Proxy和基于Proxy的拦截机制。

这为开发AOP或者Mock库提供了底层支持,可以机遇运行时生成类的特性开发更多的库。

他的运行原理是通过Loader.loadBytes加载由AS3Commons-bytecode生成的ABC。

AS3ommons-bytecode 可以生成和解析字节码(ByteCode),提供了一组更加强大的反射API.

他能够在运行时生成类,并且具备Proxy和基于Proxy的拦截机制。

这为开发AOP或者Mock库提供了底层支持,可以机遇运行时生成类的特性开发更多的库。

他的运行原理是通过Loader.loadBytes加载由AS3Commons-bytecode生成的ABC。

H

【代码】优酷弹幕播放器

[图片]
【代码】优酷弹幕播放器
一个使用youku自身的播放器完成的弹幕播放器,10秒左右没看到弹幕请刷新,视频以及flash播放器均来自youku。
  之前也用html5画板+video标签写过html5弹幕播放器,听说DOM其实效率也不低 于是试试,
可能是因为悬浮在flash上面的缘故,感觉效率并不是那么好
  这个弹幕播放器的视频部分用的是youku自身的播放器
youku的这个播放器没有限制域 所以通过javascript可以和其进行交互 这也是能完成这个弹幕播放器的大前提
  目前弹幕位置的算法还很不科学,找时间参考一下AB站的播放器,目前弹幕可以为json格式方便传输
t变量为当前时间,弹幕...

绘图一张
【代码】优酷弹幕播放器
一个使用youku自身的播放器完成的弹幕播放器,10秒左右没看到弹幕请刷新,视频以及flash播放器均来自youku。
  之前也用html5画板+video标签写过html5弹幕播放器,听说DOM其实效率也不低 于是试试,
可能是因为悬浮在flash上面的缘故,感觉效率并不是那么好
  这个弹幕播放器的视频部分用的是youku自身的播放器
youku的这个播放器没有限制域 所以通过javascript可以和其进行交互 这也是能完成这个弹幕播放器的大前提
  目前弹幕位置的算法还很不科学,找时间参考一下AB站的播放器,目前弹幕可以为json格式方便传输
t变量为当前时间,弹幕发射也很简单,就是还没写0。0

因为这个预览是在框架里面,所以全屏功能的作用域只在框架范围内
同时关闭按钮是用伪类+CSS3旋转实现的,部分浏览器表现异常

下面是具体演示,因为它会自动发出声音于是没有和上面的内容在一起


H

【笔记】关于ActionScript3 的一些记录

[图片]
好吧,拖Actionscript的服, 把ECMAscript标准重新补了个遍。瞬间觉得连javascript基础都没打牢的我是多么渺小
记录两个昨天纠结很久很久的问题的解决方案
Birth -- 東山奈央
オルゴールCD 宮崎駿の世界
コンプリケイション デュラララ!!盤(期間生産限定盤)
太鼓の達人オリジナルサウンドトラック「サントラ2008」

关于沙箱
坑爹的问题,因为沙箱的一些个安全设置导致本地调试和在线上的时候产生一堆怪异的code没问题,就是无法调用
下面的code直接允许全部域名调用和被调用,上线之后最好去掉 仅本地调试用
Security.allowDomain("...

生理痛
好吧,拖Actionscript的服, 把ECMAscript标准重新补了个遍。瞬间觉得连javascript基础都没打牢的我是多么渺小
记录两个昨天纠结很久很久的问题的解决方案
Birth -- 東山奈央
オルゴールCD 宮崎駿の世界
コンプリケイション デュラララ!!盤(期間生産限定盤)
太鼓の達人オリジナルサウンドトラック「サントラ2008」

关于沙箱
坑爹的问题,因为沙箱的一些个安全设置导致本地调试和在线上的时候产生一堆怪异的code没问题,就是无法调用
下面的code直接允许全部域名调用和被调用,上线之后最好去掉 仅本地调试用
Security.allowDomain("*");
Security.allowInsecureDomain("*");
关于XML标签中有xmlns属性时无法解析
这里纠结了好久好久,真心觉得中文在找技术类问题时的压力
在StackOverflow找到的几个解决方法
atom feed xmlns attribute messes up AS3's XML-parsing?
var xml:XML = XML() ;
trace(xml.entry.length()) ;
// output: 0
 
var ATOM:Namespace = new Namespace( "http://www.w3.org/2005/Atom" );
trace(xml.ATOM::entry.length()) ;
// output: 3
 
default xml namespace = ATOM;
trace(xml.entry.length()) ;
// output: 3
这个方法实际应用的时候总会提醒ATOM未定义,总之不是很明白 既然不明白那就先想办法用其他方法解决
于是回到老本行,用正则把xmlns从xml字段里替换掉
xml.replace("xmlns=","xmlns:default=");
~问题解决
在html DOM中定位swf用的函数优化
一般需要定位swf,并兼容全部浏览器使用的一般是
function thisMovie(movieName){
return navigator.appName.indexOf("Microsoft") != -1 ? window[movieName] : document[movieName];
}
这种根据浏览器判断方法的解决方案本身就不是很喜欢,而且在IE9里面表现异常
于是如下 更短,更精确

var swf=function(i){return document[i]||$(i)};

html部分需要配合一下,按照如下方案定义 兼容IE6+ 新版FF/chrome/opera
<object id="swf" classid="clsid:d27cdb6e-ae6d-11cf-96b8-444553540000">
<param name="src" value="test.swf" />
<embed name="swf" type="application/x-shockwave-flash" src="test.swf" />
</object>

______________________________________________
右面的自定义搜索其实还可以当查看google收录情况用嘛
比如发表文章之后不到5分钟右面就找到之类的-_____________-
我的乐与怒

as在IE下stage.stageWidth=0的解决

最近写flv播放器,就遇到这个问题,网上查了很多方法都无效,

m$确实牛,惹不起咱躲的起,解决的办法就是把第一帧空起,或者写一个定时器

另外下载了flash绿色版的朋友,如果出现 java初始失败的情况,请直接将jre文件夹内容

复制到flash安装目录的 JVM下 如果没有这个文件夹就自己创建一个.

最近写flv播放器,就遇到这个问题,网上查了很多方法都无效,

m$确实牛,惹不起咱躲的起,解决的办法就是把第一帧空起,或者写一个定时器

另外下载了flash绿色版的朋友,如果出现 java初始失败的情况,请直接将jre文件夹内容

复制到flash安装目录的 JVM下 如果没有这个文件夹就自己创建一个.

LOFTER

让兴趣,更有趣

简单随性的记录
丰富多彩的内容
让生活更加充实

下载移动端
关注最新消息