js 区间映射函数

昨天项目里面遇到个需要两个区域映射的问题, 问了一大波人, 花了一晚+一上午的时间, 总算是搞定了


//区间范围 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


转载于:https://my.oschina.net/hellangelll/blog/158066

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值