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();"/> <input type="button" value="Convert" name="B1" tabindex="2" onclick = "freqToNM()" /></p>
<p id="result"> </p>
<p> </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
}