创建距离和损坏的公式

时间:2013-08-12 19:25:34

标签: java distance formula linear

    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点伤害 50.8直到Inifite它将造成20点伤害 38.1至50.8它将减少线性30-> 0。 20。

如何使此方法有效?
提前谢谢。

3 个答案:

答案 0 :(得分:1)

听起来像这样:

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

基本上,您遵循线性规则并调整以保持线性间隔。

答案 1 :(得分:0)

看起来你想要一个步骤公式,而不是一个线性公式。步骤公式基本上是一堆if-else,如果在代码中进行比较。像这样:

public double getDamage(double dist){
    if (0 < dist & dist < 38.1)
        return 30;
    else if ( 38.1 < dist & dist < 50.8 )
        return 30 - dist/10;
    else 
        return 

}

编辑:只是看到你确实想要它在38.1和50.8之间线性。 使用类似这样的东西返回30 - dist / 10; dist / 10会给你27到23的伤害,你需要自己找到一个合适的常数(而不是10)。 (这很容易,因为它的y = mx + b,你的条件(38.1,30)和(50.8,20)你有两个点。所以把它们分成y = mx + b你会得到公式用于第二个 - 如果。

答案 2 :(得分:0)

您正在寻找的公式是点斜率方程y = m(x-x1)+ y1方程的简单变化,其中m =(damage1 - damage2)/(range1 - range2),x1 = range1, y1 = damage1,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;
}