1

かなり前に現在のコードを作成し、開始色と終了色、およびステップ数を指定しました。返されるのは、開始色と終了色の間の色のテーブル(配列)です。

function getColorSteps(starting, ending, steps)
    steps = tonumber(steps) or 1

    local step = {
        (ending[1] - starting[1]) / steps,
        (ending[2] - starting[2]) / steps,
        (ending[3] - starting[3]) / steps
    }

    local palette = {
        [1] = { unpack(starting) },
        [steps] = { unpack(ending) }
    }

    for i=2, steps-1 do
        palette[i] = {
            starting[1] + (step[1] * i),
            starting[2] + (step[2] * i),
            starting[3] + (step[3] * i)
        }
    end

    print( "#palette = " .. #palette )
    print( "steps = " .. steps )
    for i = 1, #palette do
        print(
            i ..
            ". rgb(" .. 
            table.concat(palette[i], ", ")
            .. ")"
        )
    end

    return palette
end

これをステップから「プログレス」に変換してもらいたいのですが。この例を参照してください。

 s,e = {255,255,255},{0,0,0}

 getColorSteps(s,e,0)
 > 255, 255, 255, 255

 getColorSteps(s,e,0.5)
 > 127.5, 127.5, 127.5, 127.5

 getColorSteps(s,e,1)
 > 0, 0, 0, 0

どうすればいいのかわからない...

4

1 に答える 1

2

多分線形補間を使用していますか?

function getColorSteps(s, e, interp)
    return { 
        (e[1]-s[1]) * interp + s[1],
        (e[2]-s[2]) * interp + s[2],
        (e[3]-s[3]) * interp + s[3],
        (e[4]-s[4]) * interp + s[4]
    }
end

ただし、これは、対応する色の値のそれぞれにある場合にのみ機能しiますe[i] > s[i]math.max(e[0], s[0]) - math.min(e[0], s[0])したがって、おそらく毎回または同様のものを使用する必要があります。

そして、ああ、私はむしろ開始/終了の代わりにを使用aしたいと思います。bしかし、それは私の好みかもしれません。

于 2012-12-01T19:25:35.310 に答える