数学匹配系列:0,90,180,-90,0,90,180,-90,

时间:2016-09-17 23:58:25

标签: javascript algorithm math

有些设备无法使用旋转270,所以我想将其转换为-90

如何让这个系列改为使用-90, 0, 90, 180

var val = 0;
    val = (val + 90) % 360; // 90
    val = (val + 90) % 360; // 180
    val = (val + 90) % 360; // 270
    val = (val + 90) % 360; // 0

3 个答案:

答案 0 :(得分:1)

这是一个通过在结尾处减去90来生成模数系列0..90..180..270的例子(生成器函数,但是可以真正应用于其他任何东西,只显示模式)

function *g() {
  let x = 0;
  while(true) {
    x = (x + 90) % 360;
    yield x - 90;
  }
}
let gen = g();
for (let i = 0; i < 10; i++)
  console.log(gen.next().value);

答案 1 :(得分:0)

您可以在模数之前添加(几乎)180,然后再减去它。

不完全是180因为那样你会得到-180而不是180。

&#13;
&#13;
var val = 0;
for(var i=0; i<8; ++i) {
  console.log(val = (val + 90 + 179) % 360 - 179);
}
&#13;
&#13;
&#13;

答案 2 :(得分:0)

这是愚弄处理器的另一个小技巧:

function toRad(deg){
  return deg * Math.PI / 180;
}

function toDeg(rad){
  return Math.round(rad * 180 / Math.PI);
}

function f(deg){
  var rad = toRad(deg);

  return toDeg(
           Math.round(Math.sin(rad))
           ? Math.asin(Math.sin(rad))
           : Math.acos(Math.cos(rad))
         );
}

var val = 0;

val = (val + 90) % 360; // 90 
console.log(val,f(val));

val = (val + 90) % 360; // 180 
console.log(val,f(val));

val = (val + 90) % 360; // 270 
console.log(val,f(val));

val = (val + 90) % 360; // 0
console.log(val,f(val));