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。
如何使此方法有效?
提前谢谢。
答案 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;
}