Flash AS3中的值波动类。有更好的方法吗?
Math.sin()的问题是我无法找到控制增量的方法。不过,对于这样一个简单的概念,这似乎有很多代码。有什么改进意见吗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
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