昨天项目里面遇到个需要两个区域映射的问题, 问了一大波人, 花了一晚+一上午的时间, 总算是搞定了
//区间范围 p映射到u
var p = [1, 100], u = [1, 15];
var a = p[0], b = 1, c = -u[0], d = p[1], e = 1, f = -u[1], n, p, w, z;
//解二元一次方程
function k() {
n = (d * c) - (a * f);
p = (a * e) - (b * d);
y = n / p;
w = (b * f) - (c * e);
z = (a * e) - (b * d);
x = w / z;
if( a==0 && b==0 ) {
console.log("表达式不成立,此方程组错误!");
return [];
}
else if( d==0 && e==0 ) {
console.log("表达式不成立,此方程组错误!");
return [];
}
else if( (1.0 * a / d==1.0 * b / e) && (1.0 * a / d!=1.0 * c / f) ) {
console.log("此方程式无解!\n");
return [];
}
// 当a/d=b/e=c/f 时,该方程组有无数组解
else if( 1.0 * a / d==1.0 * b / e==1.0 * c / f ) {
console.log("此方程式有无数个解!");
return [];
}
else if( a==0 && d==0 ) {
var m, t;
m = 1.0 * b / e;
t = 1.0 * c / f;
if( m==t ) {
y = -1.0 * c / b;
console.log("x=x任意值,y=" + y);
}
else {
console.log("无解!");
}
return [];
}
else if( b==0 && e==0 ) {
var m, t;
m = 1.0 * a / d;
t = 1.0 * c / f;
if( m==t ) {
x = -1.0 * c / a;
console.log("x=" + x + ",y取任意值");
}
else {
console.log("无解!");
}
return [];
}
else if( 1.0 * a / d!=1.0 * b / e ) {
y = 1.0 * n / p;
x = 1.0 * w / z;
console.log("x = " + x + ",y =" + y);
return [x, y];
}
else {
console.log("此方程真的无解!");
}
}
//计算函数
function r(x) {
var c = k();
if( c.length>1 && typeof x!="undefined" ) {
var y = x * c[0] + c[1];
document.write(y);
console.log("y=" + y);
}
else {
console.log("计算出错!");
}
}
r(2);
要查看效果的话 可以访问这里 http://runjs.cn/code/v9kzkcb7