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 -> 20。
我怎样才能使这个方法起作用?
提前谢谢。
发布于 2013-08-12 19:34:04
听起来像这样:
double x = (distance - range1) / (range2 - range1);
if (x < 0)
x = 0;
if (x > 1)
x = 1;
return damage1 + x * (damage2 - damage1);基本上,您遵循一个线性规则,并调整,以保持您的线性间隔。
发布于 2013-08-12 19:30:00
看起来你想要一个步长公式,而不是线性公式。Step公式基本上是一堆if -否则,如果代码比较。就像这样:
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,你就会得到第二个公式-如果。
发布于 2013-08-12 19:56:48
您正在寻找的公式是点斜率方程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;
}https://stackoverflow.com/questions/18195094
复制相似问题