Волна ценностей класса в AS3. Есть лучший способ сделать это? - PullRequest
0 голосов
/ 19 апреля 2011

Проблема с 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
    }

}
}

UPDATE:

Окончательное решение, упакованное в простой класс с инструкциями, можно найти здесь: http://blog.crondesign.com/2011/07/as3-wave-of-values-class-function.html

Ответы [ 2 ]

0 голосов
/ 19 апреля 2011

Как насчет этого:

Math.abs((internalNum++ % 18) - 9) + 1

Это отобразит целые числа в нужную вам последовательность.

А вот общая версия:

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

ПростоОпасайтесь того, как делимость (max-min) на increment влияет на ваши значения.Начальное значение internalNum будет определять, какую последовательность генерирует алгоритм, когда increment != 1 or -1.

0 голосов
/ 19 апреля 2011

У меня нет времени, чтобы изучать математику прямо сейчас, но вы хотите прочитать о Повторяющиеся отношения .Эта последовательность не так уж и плоха для генерации.Есть две части.Один генерирует последовательность чисел, другой является термином (-1)^n для обработки части вверх / вниз.

Книга достойных алгоритмов должна охватывать это.Стандартный текст Введение в алгоритмы .Каждый программист должен иметь копию.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...