123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335336337338339340341342343344345346347348349350351352353354355356357358359360361362363364365366367368369370371372373374375376377378379380381382383384385386387388389390391392393394395396397398399400401402403404405406407408409410411412413414415416417418419420421422423424425426427428429430431432433434435436437438439440441442443444445446447448449450451452453454455456457458459460461462463464465466467468469470471472473474475476477478479480481482483484485486487488489490491492493494495496497498499500501502503504505506507508509510511512513514515516517518519520521522523524525526527528529530531532533534535536537538539540541542543544545546547548549550551552553554555556557558559560561562563564565566567568569570571572573574575576577578579580581582583584585586587588589590591592593594595596597598599600601602603604605606607608609610611612613614615616617618619620621622623624625626627628629630631632633634635636637638639640641642643644645646647648649650651652653654655656657658659660661662663664665666667668669670671672673674675676677678679680681682683684685686687688689 |
- let assign = function (target, ...varArgs) {
- if (target == null) {
- throw new TypeError('Cannot convert undefined or null to object');
- }
- if (!varArgs || varArgs.length <= 0) {
- return target;
- }
- // 深度合并对象
- function deepAssign(obj1, obj2) {
- for (let key in obj2) {
- obj1[key] = obj1[key] && obj1[key].toString() === "[object Object]" ?
- deepAssign(obj1[key], obj2[key]) : obj1[key] = obj2[key];
- }
- return obj1;
- }
- varArgs.forEach(val => {
- target = deepAssign(target, val);
- });
- return target;
- };
- function Event() {
- this.events = {};
- }
- Event.prototype.addEventListener = function (type, listener) {
- this.events[type] = this.events[type] || [];
- this.events[type].push(listener);
- };
- Event.prototype.trigger = function () {
- for (var _len = arguments.length, args = Array(_len), _key = 0; _key < _len; _key++) {
- args[_key] = arguments[_key];
- }
- var type = args[0];
- var params = args.slice(1);
- if (!!this.events[type]) {
- // console.log("type:",type);
- this.events[type].forEach(function (listener) {
- try {
- listener.apply(null, params);
- } catch (e) {
- console.error(e);
- }
- });
- }
- };
- var EquipmentAction = function EquipmentAction() {
- let opts = {
- //合力计算
- oldResultantDifference: 0,
- resultantDifference: 0,
- bCalResultant: false,
- //最大的差值
- resultantMaxDifference: 0,
- //最大的加速度
- resultantMaxX: 0,
- resultantMaxZ: 0,
- resultantMaxY: 0,
- resultantMaxAddCount: 0,
- resultAddDifferenceCount: 0,
- xA: 0,
- oldxA: 0,
- zA: 0,
- oldzA: 0,
- yA: 0,
- oldyA: 0,
- //初始化
- initX: false,
- initZ: false,
- initY: false,
- mass: 5,
- //是否限制回弹,true 是限制回弹,false 是快速打击
- bLimitRebound: true
- }
- this.opts = opts;
- let runOpts = {
- ValueNum: 4,
- tempValue: [], //用于存放计算阈值的波峰波谷差值
- tempCount: 0,
- //是否上升的标志位
- isDirectionUp: false,
- //持续上升次数
- continueUpCount: 0,
- //上一点的持续上升的次数,为了记录波峰的上升次数
- continueUpFormerCount: 0,
- //上一点的状态,上升还是下降
- lastStatus: false,
- //波峰值
- peakOfWave: 0,
- //波谷值
- valleyOfWave: 0,
- //此次波峰的时间
- timeOfThisPeak: 0,
- //上次波峰的时间
- timeOfLastPeak: 0,
- //当前的时间
- timeOfNow: 0,
- //当前传感器的值
- gravityNew: 0,
- //上次传感器的值
- gravityOld: 0,
- //上传传感器的陀螺仪
- gyroOld: 0,
- //动态阈值需要动态的数据,这个值用于这些动态数据的阈值
- InitialValue: 1.3,
- //初始阈值
- ThreadValue: 2.0,
- //波峰波谷时间差
- TimeInterval: 250,
- //跳高
- jumpStepCount: 0,
- jumpTimeOfLastStep: 0,
- jumpTimeOfThisStep: 0,
- jumpAverageTimeOfEveryStep: 0,
- //跑步
- stepCount: 0,
- timeOfLastStep: 0,
- timeOfThisStep: 0,
- averageTimeOfEveryStep: 0,
- currentState: "idle"
- }
- this.runOpts = runOpts;
- let gyroOpts = {
- ValueNum: 4,
- tempValue: [], //用于存放计算阈值的波峰波谷差值
- tempCount: 0,
- //是否上升的标志位
- isDirectionUp: false,
- //持续上升次数
- continueUpCount: 0,
- //上一点的持续上升的次数,为了记录波峰的上升次数
- continueUpFormerCount: 0,
- //上一点的状态,上升还是下降
- lastStatus: false,
- //波峰值
- peakOfWave: 0,
- //波谷值
- valleyOfWave: 0,
- //此次波峰的时间
- timeOfThisPeak: 0,
- //上次波峰的时间
- timeOfLastPeak: 0,
- //当前的时间
- timeOfNow: 0,
- //当前传感器的值
- gravityNew: 0,
- //上次传感器的值
- gravityOld: 0,
- //动态阈值需要动态的数据,这个值用于这些动态数据的阈值
- InitialValue: 1.3,
- //初始阈值
- ThreadValue: 200.0,
- //波峰波谷时间差
- TimeInterval: 250,
- bJump: false,
- }
- this.gyroOpts = gyroOpts;
- this.event = new Event();
- // console.log("hit instanl:",this.opts);
- }
- EquipmentAction.prototype.addEventListener = function (type, listener) {
- this.event.addEventListener(type, listener);
- };
- /**
- * 更新两轴数据
- */
- EquipmentAction.prototype.updateAcc = function () {
- let data = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : {};
- // this.opts = assign({}, this.opts, data);
- let bLimitRebound = data.bLimitRebound && this.opts.bLimitRebound;
- //使用两个轴的数据,其实就是不计算重力轴的加速度
- this.opts.xA = data.xA;
- this.opts.zA = data.zA;
- // console.log(bLimitRebound,data.bLimitRebound,this.opts.bLimitRebound);
- //这里防止第一次触发调用
- if (!this.opts.initX && this.opts.oldxA === 0) {
- this.opts.oldxA = data.xA;
- this.opts.initX = true;
- console.log("初始化oldxa");
- }
- if (!this.opts.initZ && this.opts.oldzA === 0) {
- this.opts.oldzA = data.zA;
- this.opts.initZ = true;
- console.log("初始化oldza");
- }
- let _differenceX = this.opts.xA - this.opts.oldxA;
- let _differenceZ = this.opts.zA - this.opts.oldzA;
- this.opts.resultantDifference = Math.abs(_differenceX) + Math.abs(_differenceZ);
- if (this.opts.oldResultantDifference != this.opts.resultantDifference && 0 !== this.opts.resultantDifference) {
- //5 默认值是12
- let _limitresultDifference = 12;
- //如果是回弹限制时候,判断值等于5
- if (bLimitRebound)
- _limitresultDifference = 5;
- if (this.opts.resultantDifference > _limitresultDifference) {
- if (!this.opts.bCalResultant) {
- //假如进入了一个计算周期
- this.opts.bCalResultant = true;
- }
- }
- if (this.opts.bCalResultant) {
- if (this.opts.resultantMaxX <= this.opts.xA)
- this.opts.resultantMaxX = this.opts.xA;
- if (this.opts.resultantMaxZ <= this.opts.zA)
- this.opts.resultantMaxZ = this.opts.zA;
- if (this.opts.resultantMaxDifference <= this.opts.resultantDifference) {
- this.opts.resultantMaxDifference = this.opts.resultantDifference;
- this.opts.resultantMaxAddCount = 0;
- } else {
- this.opts.resultantMaxAddCount++;
- //小于最大值的个数判断,超过限制,说明波动下滑
- // > 4
- if (this.opts.resultantMaxAddCount >= 4) {
- //这里区分两个版本,bLimitRebound:true一个是限制回弹版,bLimitRebound:false一个是快速打击版本
- if (bLimitRebound) {
- if (this.opts.resultantDifference <= 3) {
- this.opts.resultAddDifferenceCount++;
- // 当波动值小于3 次数到达5次,判断达到一个平稳状态
- if (this.opts.resultAddDifferenceCount >= 5) {
- let _resultantMaxAcc = Math.abs(this.opts.resultantMaxX) + Math.abs(this.opts.resultantMaxZ);
- this.opts.bCalResultant = false;
- this.opts.resultantMaxAddCount = 0;
- this.opts.resultAddDifferenceCount = 0;
- //成功判断打击直拳 todo return
- this.event.trigger('resultantHit', {
- type: "hit",
- acc: _resultantMaxAcc,
- power: Math.ceil(_resultantMaxAcc * this.opts.mass),
- mass: this.opts.mass
- });
- this.opts.oldResultantDifference = 0;
- this.opts.resultantDifference = 0;
- this.opts.resultantMaxDifference = 0;
- this.opts.resultantMaxX = 0;
- this.opts.resultantMaxZ = 0;
- // this.opts.oldxA = 0;
- // this.opts.oldzA = 0;
- }
- } else {
- this.opts.resultAddDifferenceCount = 0;
- }
- } else {
- let _resultantMaxAcc = Math.abs(this.opts.resultantMaxX) + Math.abs(this.opts.resultantMaxZ);
- this.opts.bCalResultant = false;
- this.opts.resultantMaxAddCount = 0;
- this.opts.resultAddDifferenceCount = 0;
- //成功判断打击直拳 todo return
- this.event.trigger('resultantHit', {
- type: "hit",
- acc: _resultantMaxAcc,
- power: Math.ceil(_resultantMaxAcc * this.opts.mass),
- mass: this.opts.mass
- });
- this.opts.oldResultantDifference = 0;
- this.opts.resultantDifference = 0;
- this.opts.resultantMaxDifference = 0;
- this.opts.resultantMaxX = 0;
- this.opts.resultantMaxZ = 0;
- // this.opts.oldxA = 0;
- // this.opts.oldzA = 0;
- }
- }
- }
- }
- this.opts.oldResultantDifference = this.opts.resultantDifference;
- }
- this.opts.oldxA = this.opts.xA;
- this.opts.oldzA = this.opts.zA;
- };
- /**
- * 更新三轴数据
- */
- EquipmentAction.prototype.updateTriaxialAcc = function () {
- let data = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : {};
- // this.opts = assign({}, this.opts, data);
- let bLimitRebound = data.bLimitRebound && this.opts.bLimitRebound;
- //使用三个轴的数据,计算重力轴的加速度。最后减去重力的加速度值
- this.opts.xA = data.xA;
- this.opts.zA = data.zA;
- this.opts.yA = data.yA;
- // console.log(bLimitRebound,data.bLimitRebound,this.opts.bLimitRebound);
- //这里防止第一次触发调用
- if (!this.opts.initX && this.opts.oldxA === 0) {
- this.opts.oldxA = data.xA;
- this.opts.initX = true;
- console.log("初始化oldxa");
- }
- if (!this.opts.initZ && this.opts.oldzA === 0) {
- this.opts.oldzA = data.zA;
- this.opts.initZ = true;
- console.log("初始化oldza");
- }
- if (!this.opts.initY && this.opts.oldyA === 0) {
- this.opts.oldyA = data.yA;
- this.opts.initY = true;
- console.log("初始化oldyA");
- }
- let _differenceX = this.opts.xA - this.opts.oldxA;
- let _differenceZ = this.opts.zA - this.opts.oldzA;
- let _differenceY = this.opts.yA - this.opts.oldyA;
- // let gravityNew = Math.sqrt(xA * xA + yA * yA + zA * zA);
- // this.opts.resultantDifference = Math.abs(_differenceX) + Math.abs(_differenceZ) + Math.abs(_differenceY);
- this.opts.resultantDifference = Math.sqrt(_differenceX * _differenceX + _differenceZ * _differenceZ + _differenceY *
- _differenceY);
- if (this.opts.oldResultantDifference != this.opts.resultantDifference && 0 !== this.opts.resultantDifference) {
- //5 默认值是12
- let _limitresultDifference = 12;
- //如果是回弹限制时候,判断值等于5
- if (bLimitRebound)
- _limitresultDifference = 5;
- if (this.opts.resultantDifference > _limitresultDifference) {
- if (!this.opts.bCalResultant) {
- //假如进入了一个计算周期
- this.opts.bCalResultant = true;
- }
- }
- if (this.opts.bCalResultant) {
- if (this.opts.resultantMaxDifference <= this.opts.resultantDifference) {
- this.opts.resultantMaxDifference = this.opts.resultantDifference;
- this.opts.resultantMaxAddCount = 0;
- } else {
- this.opts.resultantMaxAddCount++;
- //小于最大值的个数判断,超过限制,说明波动下滑
- // > 4
- if (this.opts.resultantMaxAddCount >= 4) {
- //这里区分两个版本,bLimitRebound:true一个是限制回弹版,bLimitRebound:false一个是快速打击版本
- if (bLimitRebound) {
- if (this.opts.resultantDifference <= 3) {
- this.opts.resultAddDifferenceCount++;
- // 当波动值小于3 次数到达5次,判断达到一个平稳状态
- if (this.opts.resultAddDifferenceCount >= 5) {
- // let _resultantMaxAcc = Math.abs(this.opts.resultantMaxX) + Math.abs(this.opts.resultantMaxZ) + Math.abs(this.opts.resultantMaxY);
- // console.log("this.opts.resultantMaxDifference:",this.opts.resultantMaxDifference);
- this.opts.bCalResultant = false;
- this.opts.resultantMaxAddCount = 0;
- this.opts.resultAddDifferenceCount = 0;
- //成功判断打击直拳 todo return
- this.event.trigger('resultantHit', {
- type: "hit",
- acc: this.opts.resultantMaxDifference,
- power: Math.ceil(this.opts.resultantMaxDifference * this.opts.mass),
- mass: this.opts.mass
- });
- this.opts.oldResultantDifference = 0;
- this.opts.resultantDifference = 0;
- this.opts.resultantMaxDifference = 0;
- this.opts.resultantMaxX = 0;
- this.opts.resultantMaxZ = 0;
- this.opts.resultantMaxY = 0;
- }
- } else {
- this.opts.resultAddDifferenceCount = 0;
- }
- } else {
- this.opts.bCalResultant = false;
- this.opts.resultantMaxAddCount = 0;
- this.opts.resultAddDifferenceCount = 0;
- //成功判断打击直拳 todo return
- this.event.trigger('resultantHit', {
- type: "hit",
- acc: this.opts.resultantMaxDifference,
- power: Math.ceil(this.opts.resultantMaxDifference * this.opts.mass),
- mass: this.opts.mass
- });
- this.opts.oldResultantDifference = 0;
- this.opts.resultantDifference = 0;
- this.opts.resultantMaxDifference = 0;
- this.opts.resultantMaxX = 0;
- this.opts.resultantMaxZ = 0;
- this.opts.resultantMaxY = 0;
- }
- }
- }
- }
- this.opts.oldResultantDifference = this.opts.resultantDifference;
- }
- this.opts.oldxA = this.opts.xA;
- this.opts.oldzA = this.opts.zA;
- this.opts.oldyA = this.opts.yA;
- };
- EquipmentAction.prototype.updateJumpAndRun = function () {
- let data = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : {};
- //使用三个轴的数据,计算重力轴的加速度。最后减去重力的加速度值
- //********加速计********
- let { ax, ay, az } = data.acc;
- ax = ax * 9.80665;
- ay = ay * 9.80665;
- az = az * 9.80665;
- let gravityNew = Math.sqrt(ax * ax + ay * ay + az * az);
- let { gx, gy, gz } = data.gyro;
- let gyroNew = Math.sqrt(gx * gx + gy * gy + gz * gz);
- this.detectorNewStep(gravityNew, gyroNew);
- };
- /*
- * 检测步子,并开始计步
- * 1.传入数据
- * 2.如果检测到了波峰,并且符合时间差以及阈值的条件,则判定为1步
- * 3.符合时间差条件,波峰波谷差值大于initialValue,则将该差值纳入阈值的计算中
- * */
- EquipmentAction.prototype.detectorNewStep = function (values, gyroValue) {
- if (this.gyroOpts.gravityOld == 0) {
- this.gyroOpts.gravityOld = gyroValue;
- } else {
- if (this.gyroDetectorPeak(gyroValue, this.gyroOpts.gravityOld)) {
- let step1 = this.gyroOpts.peakOfWave - this.gyroOpts.valleyOfWave;
- // if(step>10)
- // console.log("Gyro:", step);
- if (step1 > this.gyroOpts.ThreadValue) {
- this.gyroOpts.timeOfThisPeak = this.gyroOpts.timeOfNow;
- this.gyroOpts.bJump = true;
- }
- }
- }
- if (this.runOpts.gravityOld == 0) {
- this.runOpts.gravityOld = values;
- } else {
- if (this.detectorPeak(values, this.runOpts.gravityOld)) {
- this.runOpts.timeOfLastPeak = this.runOpts.timeOfThisPeak;
- this.runOpts.timeOfNow = new Date().getTime();
- let step2 = this.runOpts.peakOfWave - this.runOpts.valleyOfWave;
- if (this.runOpts.timeOfNow - this.runOpts.timeOfLastPeak >= this.runOpts.TimeInterval
- && step2 > this.runOpts.ThreadValue) {
- this.runOpts.timeOfThisPeak = this.runOpts.timeOfNow;
- this.countRunStep();
- }
- // if (this.runOpts.timeOfNow - this.runOpts.timeOfLastPeak >= this.runOpts.TimeInterval
- // && (this.runOpts.peakOfWave - this.runOpts.valleyOfWave >= this.runOpts.InitialValue)) {
- // this.runOpts.timeOfThisPeak = this.runOpts.timeOfNow;
- // this.runOpts.ThreadValue = this.peakValleyThread(this.runOpts.peakOfWave - this.runOpts.valleyOfWave);
- // }
- }
- }
- this.runOpts.gravityOld = values;
- this.gyroOpts.gravityOld = gyroValue;
- }
- EquipmentAction.prototype.countRunStep = function () {
- this.runOpts.timeOfLastStep = this.runOpts.timeOfThisStep;
- this.runOpts.timeOfThisStep = new Date().getTime();
- let diffValue = this.runOpts.timeOfThisStep - this.runOpts.timeOfLastStep;
- if (diffValue <= 2000) {
- if (this.gyroOpts.bJump) {
- let step = this.runOpts.peakOfWave - this.runOpts.valleyOfWave;
- this.event.trigger('resultant', {
- type: "jump",
- acc: step
- });
- this.resetJumpValue();
- // this.resSomeValue();
- }
- // else
- // {
- this.runOpts.averageTimeOfEveryStep += diffValue;
- this.runOpts.stepCount++;
- // if (this.runOpts.stepCount == 2)
- {
- this.runOpts.averageTimeOfEveryStep = this.runOpts.averageTimeOfEveryStep / 2;
- // this.runOpts.currentState = "runing";
- let step = this.runOpts.peakOfWave - this.runOpts.valleyOfWave;
- this.resSomeValue();
- this.event.trigger('resultant', {
- type: "runing",
- acc: step
- });
- }
- // }
- } else { //超时,说明没有运动了
- this.resSomeValue();
- console.log("超时", "averageTimeOfEveryStep: " + this.runOpts.averageTimeOfEveryStep);
- if (this.gyroOpts.bJump) {
- //判断是否跳
- let step = this.runOpts.peakOfWave - this.runOpts.valleyOfWave;
- this.event.trigger('resultant', {
- type: "jump",
- acc: step
- });
- this.resetJumpValue();
- }
- }
- }
- EquipmentAction.prototype.resSomeValue = function () {
- this.runOpts.stepCount = 0;
- this.runOpts.averageTimeOfEveryStep = 0;
- }
- EquipmentAction.prototype.resetJumpValue = function () {
- // this.runOpts.jumpStepCount = 0;
- // this.runOpts.jumpAverageTimeOfEveryStep = 0;
- this.gyroOpts.bJump = false;
- }
- /*
- * 检测波峰
- * 以下四个条件判断为波峰:
- * 1.目前点为下降的趋势:isDirectionUp为false
- * 2.之前的点为上升的趋势:lastStatus为true
- * 3.到波峰为止,持续上升大于等于2次
- * 4.波峰值大于20
- * 记录波谷值
- * 1.观察波形图,可以发现在出现步子的地方,波谷的下一个就是波峰,有比较明显的特征以及差值
- * 2.所以要记录每次的波谷值,为了和下次的波峰做对比
- * */
- EquipmentAction.prototype.detectorPeak = function (newValue, oldValue) {
- this.runOpts.lastStatus = this.runOpts.isDirectionUp;
- if (newValue >= oldValue) {
- this.runOpts.isDirectionUp = true;
- this.runOpts.continueUpCount++;
- } else {
- this.runOpts.continueUpFormerCount = this.runOpts.continueUpCount;
- this.runOpts.continueUpCount = 0;
- this.runOpts.isDirectionUp = false;
- }
- //this.runOpts.continueUpFormerCount >= 2 || oldValue >= 20
- if (!this.runOpts.isDirectionUp && this.runOpts.lastStatus &&
- (this.runOpts.continueUpFormerCount >= 2)) {
- this.runOpts.peakOfWave = oldValue;
- return true;
- } else if (!this.runOpts.lastStatus && this.runOpts.isDirectionUp) {
- this.runOpts.valleyOfWave = oldValue;
- return false;
- } else {
- return false;
- }
- }
- /*
- * 检测波峰
- * 以下四个条件判断为波峰:
- * 1.目前点为下降的趋势:isDirectionUp为false
- * 2.之前的点为上升的趋势:lastStatus为true
- * 3.到波峰为止,持续上升大于等于2次
- * 4.波峰值大于20
- * 记录波谷值
- * 1.观察波形图,可以发现在出现步子的地方,波谷的下一个就是波峰,有比较明显的特征以及差值
- * 2.所以要记录每次的波谷值,为了和下次的波峰做对比
- * */
- EquipmentAction.prototype.gyroDetectorPeak = function (newValue, oldValue) {
- this.gyroOpts.lastStatus = this.gyroOpts.isDirectionUp;
- if (newValue >= oldValue) {
- this.gyroOpts.isDirectionUp = true;
- this.gyroOpts.continueUpCount++;
- } else {
- this.gyroOpts.continueUpFormerCount = this.gyroOpts.continueUpCount;
- this.gyroOpts.continueUpCount = 0;
- this.gyroOpts.isDirectionUp = false;
- }
- //this.runOpts.continueUpFormerCount >= 2 || oldValue >= 20
- if (!this.gyroOpts.isDirectionUp && this.gyroOpts.lastStatus &&
- (this.gyroOpts.continueUpFormerCount >= 2)) {
- this.gyroOpts.peakOfWave = oldValue;
- return true;
- } else if (!this.gyroOpts.lastStatus && this.gyroOpts.isDirectionUp) {
- this.gyroOpts.valleyOfWave = oldValue;
- return false;
- } else {
- return false;
- }
- }
- /*
- * 阈值的计算
- * 1.通过波峰波谷的差值计算阈值
- * 2.记录4个值,存入tempValue[]数组中
- * 3.在将数组传入函数averageValue中计算阈值
- * */
- EquipmentAction.prototype.peakValleyThread = function (value) {
- let tempThread = this.runOpts.ThreadValue;
- if (this.runOpts.tempCount < this.runOpts.ValueNum) {
- this.runOpts.tempValue[this.runOpts.tempCount] = value;
- this.runOpts.tempCount++;
- } else {
- tempThread = this.averageValue(this.runOpts.tempValue, this.runOpts.ValueNum);
- for (let i = 1; i < this.runOpts.ValueNum; i++) {
- this.runOpts.tempValue[i - 1] = this.runOpts.tempValue[i];
- }
- this.runOpts.tempValue[this.runOpts.ValueNum - 1] = value;
- }
- return tempThread;
- }
- /*
- * 梯度化阈值
- * 1.计算数组的均值
- * 2.通过均值将阈值梯度化在一个范围里
- * */
- EquipmentAction.prototype.averageValue = function (value, n) {
- let ave = 0;
- for (let i = 0; i < n; i++) {
- ave += value[i];
- }
- ave = ave / this.runOpts.ValueNum;
- // console.log("ave:", ave);
- if (ave >= 8)
- ave = 4.3;
- else if (ave >= 7 && ave < 8)
- ave = 3.3;
- else if (ave >= 4 && ave < 7)
- ave = 2.3;
- else if (ave >= 3 && ave < 4)
- ave = 2.0;
- else {
- ave = 1.3;
- }
- return ave;
- }
- if (typeof module === "object" && typeof module.exports === "object") {
- module.exports = EquipmentAction;
- //export default EquipmentAction;//建议使用nodejs的module导出方式,如报错请使用export方式导出
- }
|