Как определить, совпадают ли два математических вектора? - PullRequest
0 голосов
/ 16 января 2020

Мне нужно определить, являются ли два вектора почти равными (похожими). Два вектора одинаковы, если величина их разности векторов меньше указанного допуска (tol) other - другой вектор для сравнения с tol пороговой длины разности векторов (this - other) возвращает true, если длина (this - other) ) меньше, чем tol, в противном случае - false.

Вот мой метод:

public boolean similarTo(Vector2 other, double tol) {
   boolean result = false;
   double z = this.mag() - other.mag();
   if (z < tol) {
       result = true;
   }
   else {
       result = false;
   }
   return result;
}

Однако, похоже, это не работает, так как при запуске теста JUnit я получаю java .lang.AssertionError, больше ничего. Любая помощь будет оценена. Кстати, метод mag () уже написан и работает правильно.

РЕДАКТИРОВАТЬ: Вот тест JUnit:

@Test
public void test15_similarTo() {
    double rad = 0.34;
    double x = Math.cos(rad);
    double y = Math.sin(rad);
    Vector2 unit = new Vector2(x, y);
    for (int i = -6; i <= 6; i++) {
        double tol = Math.pow(10.0, i);

        // if we scale unit by maxScale we will be at the limits of similarity
        double maxScale = 1.0 + tol;
        double scale = Math.nextAfter(maxScale, Double.NEGATIVE_INFINITY);
        Vector2 w = new Vector2(scale * x, scale * y);
        assertTrue(unit.similarTo(w, tol));

        scale = Math.nextAfter(maxScale, Double.POSITIVE_INFINITY);
        w = new Vector2(scale * x, scale * y);
        assertFalse(unit.similarTo(w, tol));
    }
}

1 Ответ

0 голосов
/ 16 января 2020

Вот решение (для всех, кто заинтересован):

public boolean similarTo(Vector2 other, double tol) {
   boolean result = false;
   double z = Math.abs(this.mag() - other.mag());
   if (z < tol) {
       result = true;
   }
   else {
       result = false;
   }
   return result;
}
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...