近来有个任务,即求两段时间是否有重叠及重叠了多少.
查遍了所有网,没有找到结果,结果花了两天的功夫,写了以下程序.
望能对各位有用.输入两组数据,可以找到这两组数据有没有重叠及重叠了多少.<HTML lang=en xml:lang="en" xmlns="http://www.w3.org/1999/xhtml">
<HEAD>
<TITLE>区间比较</TITLE><BODY>
[原创] 比较两个区间的重叠度:<br/>
Gu Laicheng 2009.8.13<br/>
l1 第一区间的长度(短)<br/>
l2 第二区间的长度(长)<br/>
d1 两区间左端的距离<br/>
d2 两区间右端的距离<br/>
d3 第一区间左端与第二区间右端的距离<br/>
d4 第一区间右端与第二区间左端的距离<br/>
d5 重叠部分长度<br/>
<script   type='text/javascript'>
var INTERVAL=2;var CURRWAY = INTERVAL;function Clone(o)
{
var oo={};
for (var k in o) oo[k]=o[k];
return oo;
}function getlength(v1,v2,flg)
{
var l = Math.abs(v1 - v2);
if (flg==POINT) return l;
if (flg==INTERVAL) return l+1;
return NaN;
}function Pair(i1,i2)
{
this.value1=(i1<i2)?(i1):(i2);
this.value2=(i1<i2)?(i2):(i1);
this.length= getlength(i1,i2,CURRWAY);
}
function complength(p1,p2)
{
return (p1.length-p2.length);
}function getashort(p1,p2)
{
var p;
if (complength(p1,p2) < 0)
{
p=Clone(p1);
}
else
{
p=Clone(p2);
}
return p;
}function getalong(p1,p2)
{
var p;
if (complength(p1,p2) >= 0)
{
p=Clone(p1);
}
else
{
p=Clone(p2);
}
return p;
}function superpose(p1,p2)
{
var q1,q2;
q1 = getashort(p1,p2);
q2 = getalong(p1,p2); var d1,d2,d3,d4;
d1 = getlength(q2.value1,q1.value1,CURRWAY);
d2 = getlength(q2.value2,q1.value2,CURRWAY);
d3 = getlength(q2.value2,q1.value1,CURRWAY);
d4 = getlength(q2.value1,q1.value2,CURRWAY); var s="";
d5 = p1.length + p2.length - Math.max(p1.length , p2.length,d1,d2,d3,d4); if (d5 > 0)
s += "<br/>有重叠 ,重叠长度: "+d5;
else
s += "<br/>无重叠 ,重叠长度: "+d5; msg.innerHTML = s;
}

var pair1,pair2;
function clk1()
{
var pair1 = new Pair(parseInt(p11.value),parseInt(p12.value));
var pair2 = new Pair(parseInt(p21.value),parseInt(p22.value));
superpose(pair1,pair2);
}</script>
区间1:<input name=p11 size=5> - <input name=p12 size=5><br/>
区间2:<input name=p21 size=5> - <input name=p22 size=5><br/>
<input type=button value=clickme onclick="clk1();"><br/>
<span id=msg></span>
</BODY>
</HTML>