需求
1.指定时间:一天
2.固定奖品个数 :103.希望概率根据实际情况变化,不要太快抽完,也不要到结束也没人抽到
4.每人抽一次
分析
1.剩余时间越少,概率应该越高,这要保证前期不会太快,基数/剩余时间
2.剩余奖品越少,概率应该低,奖品越少越应该控制不要太快抽完,降低概率可以做到这点,基数*剩余奖品
3.参加人数越多,概率应该越低,人的基数增加,降低概率可以保证抽中的人不会增加太多。基数/参加人数
4.如果每人抽一次,则应该用人数的增长率计算,如果一人抽多次,应该用总人数计算
概率 = 基数*剩余奖品数/剩余时间/参与人数
概率 = 基数*剩余奖品数/(剩余时间+参与人数)
基准概率 = 1%
如果概率计算后大于基准概率,则使用基准概率,否则使用计算得到的概率
function calcScale(scale_val,x){
return Math.ceil(100*Math.pow(1/scale_val,$x));
}
function getScale(h,h_next){
//换算成分钟
var x = h.split(":");
var y = h_next.split(":");
var h_minute = x[0]*60+x[1]*1;
var h_next_minute = y[0]*60+y[1]*1;
//计算当前时间
var d = new Date();
var _nh = d.getHours();
var _nm = d.getMinutes();
var _n_now = _nh*60+_nm;
//两次抽奖时间间隔
var total = h_next_minute-h_minute;
var data_x = [];
var data_y = [];
var data_z = [];
var _now = x;
var _h,_m;
var scale_val = $("#scale_val").val()*1; //基数
for(var i=0;i<=total;i++){
_now = h_minute+i;
_h = Math.floor(_now/60);
_m = _now%60;
if(_m<10){
data_x.push(_h+":0"+_m);
}else{
data_x.push(_h+":"+_m);
}
if($(".use_specified_scale:checked").val()==2){
$x = total-i;
$y = calcScale(scale_val,$x);
}else{
$y = $("#specified_scale").val();
}
data_y.push($y);
if(_n_now == _now){
if(_n_now>=h_minute && _n_now<=h_next_minute){
//当前时间段
data_z = [{name : '当前概率%', value : $y+' %', xAxis: i, yAxis: $y}];
}
}
}
var data = new Array();
data.push(data_x);
data.push(data_y);
data.push(data_z);
return data;
}