Вычислить фактор неизвестен

В настоящее время я пытаюсь добавить некоторые тесты JUnit в мою систему рисования пути, чтобы проверить правильность расчетов...
В настоящее время у меня есть:

Класс для тестирования (MapRouteDrawer.java):

protected static double[] getCoords(PolynomialSplineFunction curve, double[] index) {
  final double detailLevel = 1.0;//Tweak this value in order to achieve good rendering results
  final double defaultCoordSize = index[index.length - 1];
  final double[] coords = new double[(int)Math.round(detailLevel * defaultCoordSize) + 1];
  final double stepSize = curve.getKnots()[curve.getKnots().length - 1] / coords.length;
  double curValue = 0;
  for (int i = 0; i < coords.length; i ++) {
    coords[i] = curve.value(curValue);//gets y value of specified x value
    curValue += stepSize;
  }
  return coords;
}

protected static double[] getIndex(Point[] points) {
  final double[] index = new double[points.length];
  if(index.length > 0){
    index[0] = 0;
  }
  for (int i = 1; i < points.length; i++) {
    index[i] = index[i - 1] + Math.sqrt(points[i - 1].distance(points[i]));
  }
  return index;
}

TestClass:

private Point[] dummyPoints = new Point[]{new Point(0,0), new Point(100,0), new Point(0,100)};//Some Points for Testing
//This returns a so called index - the squareroot distance between addedn on top of each other
private double[] dummyIndex = MapRouteDrawer.getIndex(dummyPoints);

@Test
public void testCurve(){
  final double[] testYValues = new double[]{20, 40, 90};
  final PolynomialSplineFunction testFunction = new SplineInterpolator().interpolate(dummyIndex, testYValues);//get a Spline-Interpolated curve
  final double[] coords = MapRouteDrawer.getCoords(testFunction, dummyIndex);//Calls the function to test
  final double factor = testFunction.getKnots()[testFunction.getKnots().length - 1] / coords.length;
  assertEquals(testYValues[0] * factor, coords[(int)Math.round(dummyIndex[0])], 1);//Check if the coordinates are equal
  assertEquals(testYValues[1] * factor, coords[(int)Math.round(dummyIndex[1])], 1);
  assertEquals(testYValues[2] * factor, coords[(int)Math.round(dummyIndex[2])], 1);
}

Это работает нормально, но если вы знакомы с JUnit, вы можете заметить дельту 1, которая необходима для того, чтобы этот тест работал...
То, что я пытаюсь достичь, это:

@Test
public void testCurve(){
  final double[] testYValues = new double[]{20, 40, 90};
  final PolynomialSplineFunction testFunction = new SplineInterpolator().interpolate(dummyIndex, testYValues);//get a Spline-Interpolated curve
  final double[] coords = MapRouteDrawer.getCoords(testFunction, dummyIndex);//Calls the function to test
  final double factor;//Unknown... should be dynamic, so it does not matter which detail level I chose
  assertEquals(testYValues[0], coords[(int)Math.round(dummyIndex[0])] * factor, 0);//Check if the coordinates are equal
  assertEquals(testYValues[1], coords[(int)Math.round(dummyIndex[1])] * factor, 0);//e.g. coords[(int)Math.round(dummyIndex[0])] * factor == 20 etc.
  assertEquals(testYValues[2], coords[(int)Math.round(dummyIndex[2])] * factor, 0);
}

Так что первое значение в assertEquals() равно 20, 40, 90 и т. Д., А не странное число 21.39587576787686 (или аналогичное), а дельта равна 0 (или 0,01, если нет другого пути), а не 1, что я в настоящее время с помощью

Поскольку я использую уровень детализации в своем методе getCoords(), который должен быть в состоянии отрегулировать без необходимости менять тест, необходимо, чтобы "фактор" в моем тесте был связан с размером координат.

Как рассчитать коэффициент для успешного прохождения теста?
Любая помощь будет очень цениться

0 ответов

Другие вопросы по тегам