You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

为何我的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

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.06.29 12:34:51