Javascript 频率到RGB

Javascript 频率到RGB,javascript,rgb,spectra,Javascript,Rgb,Spectra,我正在寻找一种将动态频率信号转换为相应颜色的方法。我发现了这个脚本: 函数trim1(str){ 返回str.replace(/^\s\s*/,“”)。replace(/\s\s*$/,“”); } 函数decimalToHex(d){ d=数学四舍五入(d); var hex=d.toString(16); 而(十六进制长度=380&&w=440&&w=490&&w=510&&w=580&&w=645&&w=380&&w=420&&w=701&&w0?255*数学功率(红色*因子,伽马):0

我正在寻找一种将
动态频率
信号转换为相应颜色的方法。我发现了这个脚本:


函数trim1(str){
返回str.replace(/^\s\s*/,“”)。replace(/\s\s*$/,“”);
}
函数decimalToHex(d){
d=数学四舍五入(d);
var hex=d.toString(16);
而(十六进制长度<2){
hex=“0”+十六进制;
}
返回十六进制;
}
函数freqToNM(){
freq=(document.getElementById(“in”).value);
轻微=299792458;
convert();
}
函数转换(){
var输入=document.getElementById(“in”).value;
输入=trim1(输入);
var w=解析浮点(输入);
如果(w>=380&&w<440)
{
红色=-(w-440)/(440-380);
绿色=0.0;
蓝色=1.0;
}
否则如果(w>=440&&w<490)
{
红色=0.0;
绿色=(w-440)/(490-440);
蓝色=1.0;
}
否则,如果(w>=490&&w<510)
{
红色=0.0;
绿色=1.0;
蓝色=-(w-510)/(510-490);
}
否则,如果(w>=510&&w<580)
{
红色=(w-510)/(580-510);
绿色=1.0;
蓝色=0.0;
}
否则,如果(w>=580&&w<645)
{
红色=1.0;
绿色=-(w-645)/(645-580);
蓝色=0.0;
}
否则如果(w>=645&&w<781)
{
红色=1.0;
绿色=0.0;
蓝色=0.0;
}
其他的
{
红色=0.0;
绿色=0.0;
蓝色=0.0;
}
//让强度在视觉极限附近下降
如果(w>=380&&w<420)
系数=0.3+0.7*(w-380)/(420-380);
否则如果(w>=420&&w<701)
系数=1.0;
否则如果(w>=701&&w<781)
系数=0.3+0.7*(780-w)/(780-700);
其他的
系数=0.0;
varγ=0.80;
var R=(红色>0?255*数学功率(红色*因子,伽马):0);
var G=(绿色>0?255*数学功率(绿色*因子,伽马):0);
VarB=(蓝色>0?255*数学功率(蓝色*因子,伽马):0);
var hex=“#”+分馏麦芽糖(R)+分馏麦芽糖(G)+分馏麦芽糖(B);
var输出=十六进制;
document.getElementById(“结果”).firstChild.nodeValue=输出;
document.getElementById(“结果”).style.color=hex;
}
我添加了freqToNM函数,试图在使用转换函数之前将频率从赫兹(Hz)转换为波长(纳米)。有什么想法吗?提前谢谢

编辑:下面是我如何应用它的html

<!DOCTYPE html>
<head>
  <title>Freqency to Color Converter</title>
</head>
    <body>
        <div id="main">

            <p><input type="text" id = "in" name="in" size="20" tabindex="1" onKeyDown="if(event.keyCode==13) freqToNM();"/> &nbsp; <input type="button" value="Convert" name="B1" tabindex="2" onclick = "freqToNM()" /></p>

            <p id="result">&nbsp;</p>
            <p>&nbsp;</p>
        </div>

<script type="text/javascript" src="data.js"></script>
<script type="text/javascript">


function trim1 (str) {  
    return str.replace(/^\s\s*/, '').replace(/\s\s*$/, '');
}
function decimalToHex(d) {
    d = Math.round(d);
    var hex = d.toString(16);
    while (hex.length < 2) {
        hex = "0" + hex;
    }

    return hex;
}
function freqToNM() {
    var freq = (document.getElementById("in").value);
    var Slight = 299792458;
      convert();
   }

function convert() {

        var input = Slight / freq;
        input = trim1(input);
        var w = parseFloat(input);

    if (w >= 380 && w < 440)
    {
        red   = -(w - 440) / (440 - 380);
        green = 0.0;
        blue  = 1.0;
    }
    else if (w >= 440 && w < 490)
    {
        red   = 0.0;
        green = (w - 440) / (490 - 440);
        blue  = 1.0;
    }
    else if (w >= 490 && w < 510)
    {
        red   = 0.0;
        green = 1.0;
        blue  = -(w - 510) / (510 - 490);
    }
    else if (w >= 510 && w < 580)
    {
        red   = (w - 510) / (580 - 510);
        green = 1.0;
        blue  = 0.0;
    }
    else if (w >= 580 && w < 645)
    {
        red   = 1.0;
        green = -(w - 645) / (645 - 580);
        blue  = 0.0;
    }
    else if (w >= 645 && w < 781)
    {
        red   = 1.0;
        green = 0.0;
        blue  = 0.0;
    }
    else
    {
        red   = 0.0;
        green = 0.0;
        blue  = 0.0;
    }


    // Let the intensity fall off near the vision limits

    if (w >= 380 && w < 420)
        factor = 0.3 + 0.7*(w - 380) / (420 - 380);
    else if (w >= 420 && w < 701)
        factor = 1.0;
    else if (w >= 701 && w < 781)
        factor = 0.3 + 0.7*(780 - w) / (780 - 700);
    else
        factor = 0.0;

    var gamma = 0.80;
    var R = (red   > 0 ? 255*Math.pow(red   * factor, gamma) : 0);
    var G = (green > 0 ? 255*Math.pow(green * factor, gamma) : 0);
    var B = (blue  > 0 ? 255*Math.pow(blue  * factor, gamma) : 0); 

    var hex = "#" + decimalToHex(R) + decimalToHex(G) + decimalToHex(B);
    var output = hex;
    document.getElementById("result").firstChild.nodeValue = output;
    document.getElementById("result").style.color = hex;
}
</script>


</body>

</html>

频率到颜色转换器

函数trim1(str){ 返回str.replace(/^\s\s*/,“”)。replace(/\s\s*$/,“”); } 函数decimalToHex(d){ d=数学四舍五入(d); var hex=d.toString(16); 而(十六进制长度<2){ hex=“0”+十六进制; } 返回十六进制; } 函数freqToNM(){ var freq=(document.getElementById(“in”).value); var轻微=299792458; convert(); } 函数转换(){ var输入=轻微/频率; 输入=trim1(输入); var w=解析浮点(输入); 如果(w>=380&&w<440) { 红色=-(w-440)/(440-380); 绿色=0.0; 蓝色=1.0; } 否则如果(w>=440&&w<490) { 红色=0.0; 绿色=(w-440)/(490-440); 蓝色=1.0; } 否则,如果(w>=490&&w<510) { 红色=0.0; 绿色=1.0; 蓝色=-(w-510)/(510-490); } 否则,如果(w>=510&&w<580) { 红色=(w-510)/(580-510); 绿色=1.0; 蓝色=0.0; } 否则,如果(w>=580&&w<645) { 红色=1.0; 绿色=-(w-645)/(645-580); 蓝色=0.0; } 否则如果(w>=645&&w<781) { 红色=1.0; 绿色=0.0; 蓝色=0.0; } 其他的 { 红色=0.0; 绿色=0.0; 蓝色=0.0; } //让强度在视觉极限附近下降 如果(w>=380&&w<420) 系数=0.3+0.7*(w-380)/(420-380); 否则如果(w>=420&&w<701) 系数=1.0; 否则如果(w>=701&&w<781) 系数=0.3+0.7*(780-w)/(780-700); 其他的 系数=0.0; varγ=0.80; var R=(红色>0?255*数学功率(红色*因子,伽马):0); var G=(绿色>0?255*数学功率(绿色*因子,伽马):0); VarB=(蓝色>0?255*数学功率(蓝色*因子,伽马):0); var hex=“#”+分馏麦芽糖(R)+分馏麦芽糖(G)+分馏麦芽糖(B); var输出=十六进制; document.getElementById(“结果”).firstChild.nodeValue=输出; document.getElementById(“结果”).style.color=hex; }
波长是速度/频率。当您将频率而不是波长传递到
convert
函数时,必须将传递的频率更改为波长,如下所示:

function freqToNM(freq) {
  // freq: The frequency as THz [float]
  const Slight = 299792458;
  return Slight / freq / 1000;
}

function convert() {
  var input = document.getElementById("in").value;
  input = trim1(input);
  var f = parseFloat(input);
  var w = freqToNM(f);

  // The rest of the convert code
}

请注意,
freqToNM
返回计算值,它没有调用
convert
函数。

您的问题并不清楚。这个脚本不起作用吗?有什么问题吗?你好,Rubydesic,这个脚本从nm转换到RBG。我想做的是从太赫兹转换到RGB,所以我试图通过添加函数freqToNM来添加将太赫兹转换到nm的步骤。但是,当我调用onclick函数并将结果发送到convert函数时,variable input似乎不想接受它,我没有得到任何结果。原始代码期望波长作为参数,而您希望传递频率?这就是你要问的吗?是的,这就是你问题的答案。对不起,是的,这对我的瞳孔不起作用。我认为首先需要调用freqToNM,它才能将太赫兹作为输入。如果你看看我在编辑我的问题时发布的html,它可能会澄清我想做什么。不管怎样,谢谢你的帮助。如果使用正确,它会很好地发挥作用。我会改正的。非常感谢。
function freqToNM(freq) {
  // freq: The frequency as THz [float]
  const Slight = 299792458;
  return Slight / freq / 1000;
}

function convert() {
  var input = document.getElementById("in").value;
  input = trim1(input);
  var f = parseFloat(input);
  var w = freqToNM(f);

  // The rest of the convert code
}