JavaScript中的指数规范计算
我有一个小的JavaScript AJAX脚本,它可以以kbps或其他任何速度(比如MB/s)获得进度。现在我想添加一个仪表,以图形方式显示速度 我会有一个包含仪表设计的图像和另一个带有指针的图像。默认情况下,指针指向顶部-最低值为-120度,最高值为120度。但如果某人有1mb的连接,那就不好了,所以我需要添加一个指数计算 以下是价值观JavaScript中的指数规范计算,javascript,math,Javascript,Math,我有一个小的JavaScript AJAX脚本,它可以以kbps或其他任何速度(比如MB/s)获得进度。现在我想添加一个仪表,以图形方式显示速度 我会有一个包含仪表设计的图像和另一个带有指针的图像。默认情况下,指针指向顶部-最低值为-120度,最高值为120度。但如果某人有1mb的连接,那就不好了,所以我需要添加一个指数计算 以下是价值观 0-1MB:-120度->90度 1-5MB:-90度->60度 5-10MB:-60度->30度 10-20MB:-30度->0度 20-30MB:0度-
- 0-1MB:-120度->90度
- 1-5MB:-90度->60度
- 5-10MB:-60度->30度
- 10-20MB:-30度->0度
- 20-30MB:0度->30度
- 30-50MB:30度->60度
- 50-75MB:60度->90度
- 75-100MB:90度->120度
-webkit转换:旋转(Xdeg)
它会在
xhr.onprogress
获得速度的计算为:
kb/s=((e.loaded/((new Date()-start)/1000))/1024).toFixed(2),
MB/S=(d/1024*8).toFixed(2)
当我有MB/s时,我只想设置仪表度数
如何实现这些价值观
这是一个不完全工作的变体。我是用写的,虽然
,但我认为这不是正确的方法
测量
img{位置:固定;顶部:100px;左侧:100px;}
变量b=[1,5,10,20,30,50,75100150],
deg=30;
get=函数(a){
var l=b.长度
而(l--){
如果(b[l]这是我需要的工作代码。但我知道你们有更好的方法
<!doctype html>
<html>
<head>
<meta charset="utf-8">
<title>gauge</title>
<style>
img{position:fixed;top:100px;left:100px;}
.pointer{-webkit-transform:rotate(-120deg);}
input{width:100%;}
</style>
<script>
var pointer,
get=function(a){
var b=[0,1,5,10,20,30,50,75,100],l=b.length,c=30,x=-120;
if(a>=b[l-1]){
x=120;
}else{
while(l--){
if(b[l]<a&&a<=b[l+1]){
x=(c*l-120)+c*((a-b[l])/(b[l+1]-b[l]));
break;
}
}
}
pointer.style['-webkit-transform']='rotate('+x+'deg)';
}
window.onload=function(){
pointer=document.getElementsByClassName('pointer')[0];
}
</script>
</head>
<body>
<img src="gauge1.png"><img class="pointer" src="pointer.png">
<input type="range" min="0" max="100" value="0" onChange="get(this.value)" step="0.1">
</body>
</html>
测量
img{位置:固定;顶部:100px;左侧:100px;}
.pointer{-webkit变换:旋转(-120度);}
输入{宽度:100%;}
变量指针,
get=函数(a){
变量b=[0,1,5,10,20,30,50,75100],l=b.长度,c=30,x=-120;
如果(a>=b[l-1]){
x=120;
}否则{
而(l--){
如果(b[l]这是我需要的工作代码。但我知道你们有更好的方法
<!doctype html>
<html>
<head>
<meta charset="utf-8">
<title>gauge</title>
<style>
img{position:fixed;top:100px;left:100px;}
.pointer{-webkit-transform:rotate(-120deg);}
input{width:100%;}
</style>
<script>
var pointer,
get=function(a){
var b=[0,1,5,10,20,30,50,75,100],l=b.length,c=30,x=-120;
if(a>=b[l-1]){
x=120;
}else{
while(l--){
if(b[l]<a&&a<=b[l+1]){
x=(c*l-120)+c*((a-b[l])/(b[l+1]-b[l]));
break;
}
}
}
pointer.style['-webkit-transform']='rotate('+x+'deg)';
}
window.onload=function(){
pointer=document.getElementsByClassName('pointer')[0];
}
</script>
</head>
<body>
<img src="gauge1.png"><img class="pointer" src="pointer.png">
<input type="range" min="0" max="100" value="0" onChange="get(this.value)" step="0.1">
</body>
</html>
测量
img{位置:固定;顶部:100px;左侧:100px;}
.pointer{-webkit变换:旋转(-120度);}
输入{宽度:100%;}
变量指针,
get=函数(a){
变量b=[0,1,5,10,20,30,50,75100],l=b.长度,c=30,x=-120;
如果(a>=b[l-1]){
x=120;
}否则{
而(l--){
符合你们规范的指数函数的if(b[l]公式
设d为[-120120]中的度数
设f(d)为下载速度,单位为MB/S,其中f(d)=a*额定值+b
让MIN和MAX分别为-120度和120度对应的下载速度
然后我们有以下两个方程
最小值=f(-120)=a*速率-120+b
最大值=f(120)=a*120+b
我们可以如下解a和b
最大-最小=a*(速率120-速率120)
=>a=(最大-最小)/(速率120-速率120)
=>b=MIN-a*速率-120
现在选择MIN、MAX和RATE。函数s(d)的反比是将以MB/s为单位的速度映射为以度为单位的值
d=f-1(s)=对数率((s-b)/a)
神奇配方随时可用
如果选择MIN=0.1 MB/S=100 kB/S,MAX=100 MB/S,RATE=1.011662,则f-1(20)=0。然后函数变为:
d=f-1(s)=log1.011662
((s+6.488681037)/26.48810966)
看起来是这样的:
d = Math.log((s + 6.488681037) / 26.48810966) / Math.log(1.011662)
请注意通过的三个关键点:
- (0.1 MB/S,-120度)
- (20 MB/S,0度)
- (100 MB/S,120度)
在JavaScript中,公式如下所示:
d = Math.log((s + 6.488681037) / 26.48810966) / Math.log(1.011662)
其中,s
是以MB/s为单位的速度,d
是您应该使用的度数。符合您规范的指数函数公式
设d为[-120120]中的度数
设f(d)为下载速度,单位为MB/S,其中f(d)=a*额定值+b
让MIN和MAX分别为-120度和120度对应的下载速度
然后我们有以下两个方程
最小值=f(-120)=a*速率-120+b
最大值=f(120)=a*120+b
我们可以如下解a和b
最大-最小=a*(速率120-速率120)
=>a=(最大-最小)/(速率120-速率120)
=>b=MIN-a*速率-120
现在选择MIN、MAX和RATE。函数s(d)的反比是将以MB/s为单位的速度映射为以度为单位的值
d=f-1(s)=对数率((s-b)/a)
神奇配方随时可用
如果选择MIN=0.1 MB/S=100 kB/S,MAX=100 MB/S,RATE=1.011662,则f-1(20)=0。然后函数变为:
d=f-1(s)=log1.011662
((s+6.488681037)/26.48810966)
看起来是这样的:
d = Math.log((s + 6.488681037) / 26.48810966) / Math.log(1.011662)
请注意通过的三个关键点:
- (0.1 MB/S,-120度)
- (20 MB/S,0度)
- (100 MB/S,120度)
在JavaScript中,公式如下所示:
d = Math.log((s + 6.488681037) / 26.48810966) / Math.log(1.011662)
其中,s
是以MB/s为单位的速度,d
是你应该使用的度数。你现有的代码在哪里?你尝试过什么?你在这方面做过什么研究?听起来你需要一些三角函数!啊,三角函数…很久没有听到这个词了…这就是为什么我不知道n知道要搜索什么..您在哪个部分遇到问题?您在设置仪表动画/渲染仪表时遇到问题吗?或者您在转换大小(mb/s)时遇到问题度?啊,正弦-余弦…切线…看起来有很多问题…是的,这就是问题所在。我不知道如何获得???magintude???。你应该能够适应我的答案。你现有的代码在哪里?你尝试了什么?你在这方面做了什么研究?听起来你需要一些三角函数!h嗯,三角函数…很长时间我没听过这个词…这就是为什么我甚至不知道要搜索什么…你有什么问题吗?你有没有问题动画/渲染仪表?或者你有问题在大小之间转换(mb/s)那么度呢?啊,正弦-余弦…切线…看起来有很多问题…是的,这就是问题所在。我不知道