利用可能な数式を使用してXYZ値をLAB *に変換しようとしていますhere。数式の構文が正しくない
問題は、式を調べると、3つの変数var_X、var_Y、およびvar_Zの出力は常に1.00です。
wolfram alphaに値を入れると、実際には(おそらく)正しい出力が得られます(リンクの例は、この質問の下部にあるログに表示されているvar_Zの入力です)。
私が間違っている場所を見つけるのを助けてくれますか?ここで
は私のコードです:-(NSArray*)convertXYZtoLABSpaceWithLABArray:(NSArray*)labArray{
double var_X = [[labArray objectAtIndex:0] doubleValue]/95.047;
double var_Y = [[labArray objectAtIndex:1] doubleValue]/100.000;
double var_Z = [[labArray objectAtIndex:2] doubleValue]/108.883;
NSLog(@"convertXYZtoLAB... var_X: %f var_Y: %f var_Z: %f", var_X, var_Y, var_Z);
if (var_X > 0.008856){
var_X = pow(var_X, (1/3));
}else{
var_X = (7.787 * var_X) + (16/116);
}
if (var_Y > 0.008856){
var_Y = pow(var_Y, (1/3));
}else{
var_Y = (7.787 * var_Y) + (16/116);
}
if (var_Z > 0.008856){
var_Z = pow(var_Z, (1/3));
}else{
var_Z = (7.787 * var_Z) + (16/116);
}
NSLog(@"convertXYZtoLAB... var_X: %f var_Y: %f var_Z: %f", var_X, var_Y, var_Z);
NSNumber *l,*a,*b;
l = [NSNumber numberWithDouble:(116 * var_Y) - 16];
a = [NSNumber numberWithDouble:500 * (var_X - var_Y)];
b = [NSNumber numberWithDouble:200 * (var_Y - var_Z)];
return([NSArray arrayWithObjects:l,a,b, nil]);
}
そして、ここでの方法では2つのログポイントで式の入力/出力されます:あなたはおそらく代わりに整数の除算を取得している
convertXYZtoLAB... var_X: 0.345393 var_Y: 0.502066 var_Z: 0.308145
convertXYZtoLAB... var_X: 1.000000 var_Y: 1.000000 var_Z: 1.000000
代わりに[コードレビューサイト](http://codereview.stackexchange.com/)をお試しください。 – dasblinkenlight