0

特定の範囲に制約/ラップを実装するためのアイデアについて、この質問を見ていました。

それから私は次のことを確認することができました

[n1、n2)

float Wrap(float x, float lo, float hi)
{
    return x % Math.Abs(lo - hi);
}

これは正の数でのみ機能するため、これが推奨されました

float Constrain(float x, float lo, float hi)
{
    float t = (x - lo) % (hi - lo);

    return t < 0 ? t + hi : t + lo;
}

上記のコードから次の範囲制約を取得する方法がまだわかりません。助けが必要ですか?

[n1、n2]

(n1、n2]

4

1 に答える 1

2

(n1、n2]

float constrainExclusiveInclusive(float x, float lo, float hi){
    float result = Constrain(x, lo, hi);
    if (result == lo){result = hi;}
    return result;
}

[n1、n2]

float constrainInclusiveInclusive(float x, float lo, float hi){
    float result = Constrain(x, lo, hi);
    if (result == lo){
        //somehow decide whether you want x to wrap to lo or hi
        if (moonIsInTheSeventhHouse()){
            result = lo;
        }
        else{
            result = hi;
        }
    }
    return result;
}

(n1、n2)

float constrainExclusiveExclusive(float x, float lo, float hi){
    float result = Constrain(x, lo, hi);
    if (result == lo){
        throw new ArgumentException("No answer exists for the given inputs");
    }
    return result;
}
于 2012-07-19T12:49:37.270 に答える