Java 创建距离和伤害公式

Java 创建距离和伤害公式,java,formula,distance,Java,Formula,Distance,我试图建立一个公式来计算距离所造成的伤害 double x = (distance - range1) / (range2 - range1); if (x < 0) x = 0; if (x > 1) x = 1; return damage1 + x * (damage2 - damage1); (可变距离=) 0到38.1米,它将返回30点伤害。 50.8在安装之前,它将返回20点损坏。 38.1到50.8,它将减少线性30->20 如何使此方法有效? 提前谢谢。看起

我试图建立一个公式来计算距离所造成的伤害

double x = (distance - range1) / (range2 - range1);
if (x < 0)
  x = 0;
if (x > 1)
  x = 1;
return damage1 + x * (damage2 - damage1);
(可变距离=) 0到38.1米,它将返回30点伤害。
50.8在安装之前,它将返回20点损坏。
38.1到50.8,它将减少线性30->20

如何使此方法有效?

提前谢谢。

看起来你想要的是一个阶跃公式,而不是线性公式。Step公式基本上是一组代码中的if-else-if比较。大概是这样的:

    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;
    }
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 

}
public双重伤害(双重距离){
如果(0
编辑:刚刚看到您确实希望它在38.1和50.8之间呈线性。 使用类似于返回30-dist/10的东西;dist/10会给你27到23点伤害,你需要自己找到一个合适的常数(而不是10)。(这很容易,因为它的y=mx+b,根据你的条件(38.1,30)和(50.8,20)你有两个点。因此,将它们细分为y=mx+b,你将得到第二个else if中使用的公式。

听起来像这样:

    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;
    }
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 

}
double x=(距离-范围1)/(范围2-范围1);
if(x<0)
x=0;
如果(x>1)
x=1;
返回损坏1+x*(损坏2-损坏1);

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

您正在寻找的公式是点斜率方程y=m(x-x1)+y1方程的简单变体,其中m=(损伤1-损伤2)/(范围1-范围2),x1=范围1,y1=损伤1,x是可变距离

double x = (distance - range1) / (range2 - range1);
if (x < 0)
  x = 0;
if (x > 1)
  x = 1;
return damage1 + x * (damage2 - damage1);
public双倍伤害(双倍距离){
内损伤1=30;
内损伤2=20;
双量程1=38.1;
双量程2=50.8;
双重伤害=0;

if(0对于0-38.1和50.8,我可以使用if-else梯形图。但是对于38.1->50.8,它需要一个公式来计算例如42.5上的伤害(应该给出大约24点伤害+/-),谢谢这是动态的,正是我需要的!它可能有一个简单的答案,但我一直被卡住。非常感谢