2012-01-26 16 views
2

これで補間を最近調べています。残念ながら私が読んだほとんどすべての記事では、正確には小数点以下の0.0〜1.0の補間しか説明していません。私は、どれくらいの大きさであるかに関係なく、整数の整数を補間したいと思います。私は線形補間でこれを達成しました:しかし、私は余弦補間に固執しています。 This偉大な記事はコサイン補間について述べていますが、上記のように0.0から1.0までの数値のシステム上にあります。ここで私はこれまで持っているものです。整数による余弦補間

public int interpolate(int y1, int y2, int length, int x){ 
    int v = (int)(y2 - Mathf.Cos(x * 3.1415f))/2; 
    return (y1 + x * (y2 - y1)/(length-1)) * v; 
} 

、それがすべてで滑らかでない作っていない本当の方向とほぼ乱数を返してもそれは動作しません。これが私の助けが必要なところです。 Long story short:整数を扱うコサイン補間関数を作るにはどうすればよいですか?

+3

リンク先の記事を誤解しているようです。その数字のシステムが0.0から1.0までであるということではありません。むしろ、最初のエンドポイントにいるときはmu = 0、エンドポイントにいるときはmu = 1に設定する必要があります。したがって、エンドポイントが(x1、y1)と(x2、y2)であり、xで補間したい場合は、mu = x1 +(x-x1)/(x2-x1)です。 – ruakh

+0

@ruakhはmu =(x-x1)/(x2-x1)ではないはずですか? – pkExec

+0

@pkExec:おっと、はい、ありがとう。 – ruakh

答えて

1

あなたが

(int) ((1+cos(pi*x/(length-1)))/2 * (y1-y2)+y2) 

コサインは1〜-1の角度がPiに0から行くように行く必要があります。 1を加えて2で割ると、1から0になる素敵な関数が得られます。残りは引数を変換しています。

+0

しかし、それは周りの数字を反転させるようです。 y1を20、y2を50と設定すると、結果は20から50ではなく50から20の補間になります。 – MrSplosion

+0

次にy1とy2を周りに切り替えます。私はあなたのための数式を編集しました。 – Joni