繁体   English   中英

这两种PhysicsVector方法有什么区别?

[英]What is the difference between these two PhysicsVector methods?

根据评论,他们应该做完全相同的事情。 除此之外,当我使用“ add”而不是“ increaseBy”时,我的代码会产生不同的输出。

/**
* standard vector addition. If <b> v = xi + yj</b>
* and <b>u = wi + zy</b>, then the method returns a vector
* <b>(x+w)i + (y+z)j</b>
*
* @param v first vector in sum
* @param u second vector in sum
* @return return summed vector
**/
public static PhysicsVector add(PhysicsVector v, PhysicsVector u){
    PhysicsVector sum = new PhysicsVector(v);
    sum.increaseBy(u);
    return sum;
}

所以这是一个,这里是另一个:

/**
* Add a vector <b>v</b> to the original vector. Normal vector
* addition is carried out. I.e. the x-components are added and
* the y components are added, etc.
*
* @param v vector to be added to original vector. 
**/
public void increaseBy(PhysicsVector v){
    for (int i=0; i<vectorComponents.length; i++) {
        vectorComponents[i] += v.vectorComponents[i];
    }
}

前者创建向量v副本 ,将其增加,然后返回该副本。 后者实际上修改了传递给它的原始向量。

所以:

PhysicsVector u = new PhysicsVector(1, 1);
PhysicsVector v = new PhysicsVector(2, 4);

PhysicsVector result = PhysicsVector.add(u, v);

// u and v are still (1, 1) and (2, 4), and result is (3, 5)

但是随着increaseBy

PhysicsVector u = new PhysicsVector(1, 1);
PhysicsVector v = new PhysicsVector(2, 4);

u.increaseBy(v);

// u itself has now been changed to (3, 5)

尽管这两种方法执行相同的任务,但是它们返回结果的方式不同:

  • 第一种方法产生一个新的 PhysicsVector表示和,就vu而言,没有任何副作用。
  • 第二种方法在原位执行加法,因此因其副作用而被称为该方法。

这就是为什么从一种方法切换到另一种方法时会得到不同结果的原因。

result.add(u,v)似乎不起作用

请注意,API的结构提供了正在发生的情况的提示,因为第一种方法是static 在实例上调用静态方法表示使用问题。 您需要做的是

result = PhysicsVector.add(u, v);

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM