我很难用计算器手动将CIELab转换为CIELCh。
根据http://www.easyrgb.com/en/math.php,以下是通过从弧度到度从CIELab到CIELCh的中性语言编程代码:
<script>
$( document ).ready(function() {
var data = {
labels: [u'Red', u'Blue', u'Yellow', u'Green', u'Purple', u'Orange'],
datasets: [
{
label: "Site Registrations in the Last 30 Days",
fillColor: "rgba(220,220,220,0.2)",
strokeColor: "rgba(220,220,220,1)",
pointColor: "rgba(220,220,220,1)",
pointStrokeColor: "#fff",
pointHighlightFill: "#fff",
pointHighlightStroke: "rgba(220,220,220,1)",
data: [12, 19, 3, 5, 2, 3]
}
]
};
var ctx = document.getElementById("myChart").getContext("2d");
var myLineChart = new Chart(ctx).Line(data);
});
</script>
在此网站上,它给出了相同的代码,但假定所有内容都已经以度表示:http://www.brucelindbloom.com/index.html?Equations.html
当尝试通过物理手持式计算器将CIELAB代码(37.80,-21.59,38.17)转换为CIELch时,我得到了值(38,43.851,299.49)。
但是,正确的值是(38,43.851,119.499)。
这意味着前两个部分都很好,但最后一个部分不正确。
我不知道他们是如何获得119而不是299的。我认为数学可能存在错误。以下是我如何通过计算器检索299的方法:
我求出(38.17 / -21.59)的反正切值。我检索了-1.056弧度的值。根据代码,如果var_H <0,则需要执行以下操作:
var_H = arc_tangent( CIE-b*, CIE-a* ) //Quadrant by signs
if ( var_H > 0 ) var_H = ( var_H / PI ) * 180
else var_H = 360 - ( abs( var_H ) / PI ) * 180
CIE-L* = CIE-L*
CIE-C* = sqrt( CIE-a* ^ 2 + CIE-b* ^ 2 )
CIE-H° = var_H
所以我做了360-(1.056 / 3.14)* 180。
得出299。
那么我在这里做错了什么?我如何获得119的价值?
答案 0 :(得分:0)
我联系了EasyRGB网站的支持,他们非常出色,可以解释该怎么做!这是代表说的:
您需要在反正切计算中考虑“象限”。 这是一个从CIE-Lab计算H°值的示例,请牢记象限信息:
FUNCTION GS_CIE2Hue( a, b )
LOCAL xBias
if a >= 0 .AND. b == 0 ; return 0 ; endif
if a < 0 .AND. b == 0 ; return 180 ; endif
if a == 0 .AND. b > 0 ; return 90 ; endif
if a == 0 .AND. b < 0 ; return 270 ; endif
if a > 0 .AND. b > 0 ; xBias := 0 ; endif
if a < 0 ; xBias := 180 ; endif
if a > 0 .AND. b < 0 ; xBias := 360 ; endif
return rtod( atan( b / a ) ) + xBias
此解决方案的全部功劳归于http://www.easyrgb.com。如果有人尝试转换任何颜色,则一定要检查计算器和数学页面: