0
    public double getDamage(double distance){
        int damage1 = 30; // (0 - 38.1)
        int damage2 = 20; // (50.8 - *)
        double range1 = 38.1;
        double range2 = 50.8;

        double damage = 0; // FORMULA

        return damage;
    }

距離によるダメージ量を計算する式を作成してみます。

(可変距離 =) 0 ~ 38.1 メートル 30 ダメージを返します。
Inifite まで 50.8 20 のダメージを返します。
38.1 から 50.8 までは 30 -> 20 と直線的に減少します。

このメソッドを機能させるにはどうすればよいですか?
前もって感謝します。

4

3 に答える 3

1

次のように聞こえます。

double x = (distance - range1) / (range2 - range1);
if (x < 0)
  x = 0;
if (x > 1)
  x = 1;
return damage1 + x * (damage2 - damage1);

基本的に、線形ルールに従い、線形間隔にとどまるように調整します。

于 2013-08-12T19:34:04.060 に答える
0

あなたが探している式は、ポイントスロップ式 y = m(x-x1) + y1 式の単純なバリエーションです。ここで、m = (ダメージ 1 - ダメージ 2)/(範囲 1 - 範囲 2)、x1 = 範囲 1、y1 = ダメージ 1 、x は可変距離です。

public double getDamage(double distance){
    int damage1 = 30;
    int damage2 = 20;
    double range1 = 38.1;
    double range2 = 50.8;

    double damage = 0;
    if(0 <= distance && distance <= range1)
        damage = damage1;
    else if (range1 < distance && distance < range2)
        damage = (damage1 - damage2)/(range1 - range2) * (distance - range1) + damage1;
    else if (distance >= range2)
        damage = damage2;

    return damage;
}
于 2013-08-12T19:56:48.900 に答える