Warning: file_get_contents(/data/phpspider/zhask/data//catemap/5/actionscript-3/6.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Flash AS3中的值波动类。有更好的方法吗?_Flash_Actionscript 3_Algorithm - Fatal编程技术网

Flash AS3中的值波动类。有更好的方法吗?

Flash AS3中的值波动类。有更好的方法吗?,flash,actionscript-3,algorithm,Flash,Actionscript 3,Algorithm,Math.sin()的问题是我无法找到控制增量的方法。不过,对于这样一个简单的概念,这似乎有很多代码。有什么改进意见吗 package { // by default, iterating the next() function will return 1,2,3,4,5,6,7,8,9,10,9,8,7,6,5,4,3,2,1,2,3,4, etc public class valueWave { private var maxno,inc,startno,offset,remove

Math.sin()的问题是我无法找到控制增量的方法。不过,对于这样一个简单的概念,这似乎有很多代码。有什么改进意见吗

package { // by default, iterating the next() function will return 1,2,3,4,5,6,7,8,9,10,9,8,7,6,5,4,3,2,1,2,3,4, etc

public class valueWave {
    private var maxno,inc,startno,offset,removeDuplicates,internalNum  //internalNum is always>0
    private var goingUp=true
    public var num              //latest value

    public function valueWave($min:Number=0, $max:Number=10, $increment:Number=1, $startno:Number=0, $removeDuplicates=true) {
        if($max<$min){
            trace("valueWave ERROR: max must be greater than min")
            return
        }
        maxno=$max-$min
        inc=$increment
        startno=$startno
        internalNum=$startno
        num=$startno
        offset=$min
        removeDuplicates=$removeDuplicates
    }

    public function next(){
        if(maxno==0){return(0);} //disable if max and min are the same
        if(goingUp){//going up:
            if(internalNum <= maxno-inc){
                internalNum+=inc
            }else{//invert:
                goingUp=false
                if(removeDuplicates) internalNum-=inc
            }
        }else{//going down:
            if(internalNum >= inc){
                internalNum-=inc
            }else{//invert:
                goingUp=true
                if(removeDuplicates) internalNum+=inc
            }
        }
        upd()
        return(num)
    }

    public function reset(){
        internalNum=startno
        goingUp=true
    }

    private function upd(){
        num=internalNum+offset
    }

}
}
package{//默认情况下,迭代next()函数将返回1,2,3,4,5,6,7,8,9,10,9,8,7,6,5,4,3,2,1,2,3,4等
公共阶级价值浪潮{
私有变量maxno,inc,startno,offset,removeDuplicates,internalNum//internalNum始终大于0
private var goingUp=true
public var num//最新值
公共函数valueWave($min:Number=0,$max:Number=10,$increment:Number=1,$startno:Number=0,$removeDuplicates=true){

如果($max),我现在没有时间做数学题,但是你想继续读下去。这个序列生成起来并不坏。有两部分。一部分生成数字序列,另一部分是一个
(-1)^n
术语来处理上下部分

一本像样的算法书应该涵盖这一点。标准文本是。每个程序员都应该拥有一本。

这本怎么样:

Math.abs((internalNum++ % 18) - 9) + 1
这将把整数映射到您需要的序列

这是一个通用版本:

value = Math.abs((internalNum % (2*(max-min))) - (max-min)) + min;
internalNum += increment;

只要小心
(max-min)
增量所整除会如何影响你的值。
internalNum
的起始值将决定算法在
增量!=1或-1

时生成的序列太棒了!我希望我能想到这一点!非常感谢@merv