为何我的xy_from_Temperature函数始终返回相同值?
问题:普朗克温度转xy颜色坐标函数输出固定值
不管输入10K、2000K还是40000K等不同温度,xy_from_Temperature函数始终输出固定结果:
[1] 0.2398770 0.2340373
预期输出应落在普朗克轨迹上:输入4000K时近似[1] 0.38 0.38,输入10000K时近似[1] 0.53 0.42,现求助定位问题原因。
相关代码
主函数 xy_from_Temperature
xy_from_Temperature <- function (Temperature){ X_vector <- c() Y_vector <- c() Z_vector <- c() repetition_counter <- 1 wavelength_counter <- 360 for (i in 360:830){ X <- Color_Matching_Function[,2][repetition_counter] Y <- Color_Matching_Function[,3][repetition_counter] Z <- Color_Matching_Function[,4][repetition_counter] Spectral_Radiance <- Spectral_Radiant_Exitance (wavelength_counter, Temperature) X <- X * Spectral_Radiance Y <- Y * Spectral_Radiance Z <- Z * Spectral_Radiance X_vector <- c(X_vector, X) Y_vector <- c(Y_vector, Y) Z_vector <- c(Z_vector, Z) repetition_counter <- repetition_counter + 1 wavelength_counter <- wavelength_counter + 1 } sum_X <- sum(X_vector) sum_Y <- sum(Y_vector) sum_Z <- sum(Z_vector) XYZ <- c(sum_X, sum_Y, sum_Z) xy <- XYZ_to_xy(XYZ) return (xy) }
辅助函数定义
Spectral_Radiant_Exitance(计算光谱辐射出射度)
Spectral_Radiant_Exitance <- function (wavelength, temperature){ M <- 1 / (wavelength^5 * ((exp(c2 / (wavelength * temperature))) - 1)) return (M) }
其中常数c2取值为0.01438786
XYZ_to_xy(XYZ坐标转xy坐标)
XYZ_to_xy <- function (XYZ_vector){ X <- XYZ_vector[1] Y <- XYZ_vector[2] Z <- XYZ_vector[3] x <- X / (X + Y + Z) y <- Y / (X + Y + Z) xy_vector <- c(x,y) return (xy_vector) }
背景信息
Color_Matching_Function采用CIE 1931 2度视场颜色匹配函数数据集- 函数基于光谱转XYZ坐标的公式编写,旨在通过温度对应的光谱功率分布计算xy颜色坐标
内容的提问来源于stack exchange,提问作者user23452138
相关产品推荐
相关产品推荐

