2015-10-31 6 views
0
if (CIElchOpposite[2] < 180.0) { 
    CIElchOpposite[2] = CIElchOpposite[2] + 180; 
} else { 
    CIElchOpposite[2] = CIElchOpposite[2] - 180; 
} 

Для данного CIElchOpposite[2] = 82; результата возвращения 180 когда оно должно быть 262.добавляя или вычитая двойники дает неправильному результату

CIELchOpposite является double [].

Это должно быть очень просто, но независимо от того, что операция выполнена неправильно.
Это весь метод, сопоставляющий цвет CIELab с пространством CIELch, вычисление противоположного цвета (просто добавление или вычитание на 180º), а затем преобразование его в CIELab. Отображение проверено независимо и работает правильно.

double CIElch[] = MapFromCIElabtoCIElch 
      .mapLabToLch(inputColorOneCIELAB); 
    double CIElchOpposite[] = new double[3]; 
    CIElchOpposite[0] = CIElch[0]; 
    CIElchOpposite[1] = CIElch[1]; 

    if (CIElchOpposite[2] < 180.0) { 
     CIElchOpposite[2] = CIElchOpposite[2] + 180; 
    } else { 
     CIElchOpposite[2] = CIElchOpposite[2] - 180; 
    } 

    double[] CIElabOpposite = new double[3]; 
    CIElabOpposite = MapFromCIElabtoCIElch.mapLchToLab(CIElchOpposite); 
+0

вы можете предоставить полный код этого метода? –

ответ

1

CIElchOpposite[2] никогда не назначается любое значение до если заявление

Возможно, вы имели в виду

if (CIElch[2] < 180.0) { 
    CIElchOpposite[2] = CIElch[2] + 180; 
} else { 
    CIElchOpposite[2] = CIElch[2] - 180; 
} 

Примечание Java использует верблюжьего таких как cielchOpposite и cieLch

+0

u r right, извините за глупый вопрос ..... – user3540466

0

двойной внутренне хранятся в виде дроби в двоичном, так значения, такие как 0,123 наклоняют быть представлены в двоичном формате, поэтому вы получаете неправильный выход из арифметики

использовать BigDecimal вместо BigDecimal bigDecimal = new BigDecimal(b) сделать ваши астматик а затем затем возвращать значение в два раза, если вы хотите

bigDecimal.doubleValue() 

в стороне от этого CIElchOpposite[2] никогда не был назначен