战术计算优化

This commit is contained in:
takeshita
2025-11-27 09:57:10 +08:00
parent 442c97136a
commit 6d0107cd50

View File

@ -16,7 +16,7 @@
<el-form-item label="我方距堵击点">
<div class="input-number input-number-unit-3">
<input class="input" type="number" title="" placeholder="请输入我方距堵击点" min="0" max="99999999"
v-model="blockade.weDistance" />
v-model="blockade.weDistance" @input="checkBlockadeWeDistance" />
<span class="unit">km</span>
<span class="arrow"></span>
</div>
@ -24,7 +24,7 @@
<el-form-item label="敌方距堵击点">
<div class="input-number input-number-unit-3">
<input class="input" type="number" title="" placeholder="请输入敌方距堵击点" min="0" max="99999999"
v-model="blockade.enemyDistance" />
v-model="blockade.enemyDistance" @input="checkBlockadeEnemyDistance" />
<span class="unit">km</span>
<span class="arrow"></span>
</div>
@ -32,7 +32,7 @@
<el-form-item label="敌方平均速度">
<div class="input-number input-number-unit-3">
<input class="input" type="number" title="" placeholder="请输入敌方平均速度" min="0" max="99999999"
v-model="blockade.enemySpeed" />
v-model="blockade.enemySpeed" @input="checkBlockadeEnemySpeed" />
<span class="unit">km/h</span>
<span class="arrow"></span>
</div>
@ -51,9 +51,12 @@
<div>
<span>所需追击时间</span>
<span v-show="blockade.time === null">_</span>
<span v-show="blockade.time !== null">
<span v-show="blockade.formatTime.integerPart >= 1"><span class="data">{{blockade.formatTime.integerPart }}</span>h</span>
<span v-show="blockade.formatTime.fractionalPart > 0 ||(blockade.formatTime.integerPart === 0 && blockade.formatTime.fractionalPart === 0)"><span class="data">{{ Math.round(blockade.formatTime.fractionalPart * 60)}}</span>min</span>
<span v-show="blockade.time !== null">
<span v-show="blockade.formatTime.integerPart >= 1"><span class="data">{{ blockade.formatTime.integerPart
}}</span>h</span>
<span
v-show="blockade.formatTime.fractionalPart > 0 || (blockade.formatTime.integerPart === 0 && blockade.formatTime.fractionalPart === 0)"><span
class="data">{{ Math.round(blockade.formatTime.fractionalPart * 60) }}</span>min</span>
</span>
</div>
</div>
@ -63,7 +66,7 @@
<el-form-item label="与敌人的距离">
<div class="input-number input-number-unit-3">
<input class="input" type="number" title="" placeholder="请输入与敌人距离" min="0" max="99999999"
v-model="pursuit.distance" />
v-model="pursuit.distance" @input="checkPursuitDistance" />
<span class="unit">km</span>
<span class="arrow"></span>
</div>
@ -71,7 +74,7 @@
<el-form-item label="敌运动速度">
<div class="input-number input-number-unit-3">
<input class="input" type="number" title="" placeholder="请输入敌运动速度" min="0" max="99999999"
v-model="pursuit.enemySpeed" />
v-model="pursuit.enemySpeed" @input="checkPursuitEnemySpeed" />
<span class="unit">km/h</span>
<span class="arrow"></span>
</div>
@ -79,7 +82,7 @@
<el-form-item label="追击速度">
<div class="input-number input-number-unit-3">
<input class="input" type="number" title="" placeholder="请输入追击速度" min="0" max="99999999"
v-model="pursuit.speed" />
v-model="pursuit.speed" @input="checkPursuitSpeed" />
<span class="unit">km/h</span>
<span class="arrow"></span>
</div>
@ -93,9 +96,12 @@
<div>
<span>追上敌方的时间</span>
<span v-show="pursuit.time == null">_</span>
<span v-show="pursuit.time !== null">
<span v-show="pursuit.formatTime.integerPart >= 1"><span class="data">{{pursuit.formatTime.integerPart }}</span>h</span>
<span v-show="pursuit.formatTime.fractionalPart > 0 ||(pursuit.formatTime.integerPart === 0 && pursuit.formatTime.fractionalPart === 0)"><span class="data">{{ Math.round(pursuit.formatTime.fractionalPart * 60)}}</span>min</span>
<span v-show="pursuit.time !== null">
<span v-show="pursuit.formatTime.integerPart >= 1"><span class="data">{{ pursuit.formatTime.integerPart
}}</span>h</span>
<span
v-show="pursuit.formatTime.fractionalPart > 0 || (pursuit.formatTime.integerPart === 0 && pursuit.formatTime.fractionalPart === 0)"><span
class="data">{{ Math.round(pursuit.formatTime.fractionalPart * 60) }}</span>min</span>
</span>
</div>
</div>
@ -105,7 +111,7 @@
<el-form-item label="敌我间距离">
<div class="input-number input-number-unit-3">
<input class="input" type="number" title="" placeholder="请输入敌我间距离" min="0" max="99999999"
v-model="encounter.distance" />
v-model="encounter.distance" @input="checkEncounterDistance" />
<span class="unit">km</span>
<span class="arrow"></span>
</div>
@ -113,7 +119,7 @@
<el-form-item label="我运动时速">
<div class="input-number input-number-unit-3">
<input class="input" type="number" title="" placeholder="请输入我运动时速" min="0" max="99999999"
v-model="encounter.weSpeed" />
v-model="encounter.weSpeed" @input="checkEncounterWeSpeed" />
<span class="unit">km/h</span>
<span class="arrow"></span>
</div>
@ -121,7 +127,7 @@
<el-form-item label="敌运动速度">
<div class="input-number input-number-unit-3">
<input class="input" type="number" title="" placeholder="请输入敌运动速度" min="0" max="99999999"
v-model="encounter.enemySpeed" />
v-model="encounter.enemySpeed" @input="checkEncounterEnemySpeed" />
<span class="unit">km/h</span>
<span class="arrow"></span>
</div>
@ -135,16 +141,19 @@
<div>
<span>与敌遭遇的时间</span>
<span v-show="encounter.time === null">_</span>
<span v-show="encounter.time !== null">
<span v-show="encounter.formatTime.integerPart >= 1"><span class="data">{{encounter.formatTime.integerPart }}</span>h</span>
<span v-show="encounter.formatTime.fractionalPart > 0 ||(encounter.formatTime.integerPart === 0 && encounter.formatTime.fractionalPart === 0)"><span class="data">{{ Math.round(encounter.formatTime.fractionalPart * 60)}}</span>min</span>
<span v-show="encounter.time !== null">
<span v-show="encounter.formatTime.integerPart >= 1"><span
class="data">{{ encounter.formatTime.integerPart }}</span>h</span>
<span
v-show="encounter.formatTime.fractionalPart > 0 || (encounter.formatTime.integerPart === 0 && encounter.formatTime.fractionalPart === 0)"><span
class="data">{{ Math.round(encounter.formatTime.fractionalPart * 60) }}</span>min</span>
</span>
</div>
<div>
<span>与敌遭遇的距离</span>
<span v-show="!encounter.meetingDistance && encounter.meetingDistance !== 0">_</span>
<span v-show="encounter.meetingDistance || encounter.meetingDistance === 0"> <span class="data">{{
encounter.meetingDistance }}</span>km</span>
encounter.meetingDistance }}</span>km</span>
</div>
</div>
</el-tab-pane>
@ -153,7 +162,7 @@
<el-form-item label="河宽或潜渡路线长度">
<div class="input-number input-number-unit-1" style="width: 190px;">
<input class="input" type="number" title="" placeholder="请输入河宽或潜渡路线长度" min="0" max="99999999"
v-model="dive.distance" />
v-model="dive.distance" @input="checkDiveDistance" />
<span class="unit">m</span>
<span class="arrow"></span>
</div>
@ -161,23 +170,23 @@
<el-form-item label="潜渡中坦克间距">
<div class="input-number input-number-unit-3" style="width: 190px;">
<input class="input" type="number" title="" placeholder="请输入潜渡中坦克间距" min="0" max="99999999"
v-model="dive.spacing" />
v-model="dive.spacing" @input="checkDiveSpacing" />
<span class="unit">m</span>
<span class="arrow"></span>
</div>
</el-form-item>
<el-form-item label="潜渡坦克数量">
<div class="input-number input-number-unit-3" style="width: 190px;">
<input class="input" type="number" title="" placeholder="请输入潜渡坦克数量" min="0" max="99999999"
v-model="dive.tank" />
<input class="input" type="number" title="" placeholder="请输入潜渡坦克数量" min="1" max="99999999"
v-model="dive.tank" @input="checkDiveTank" />
<span class="unit"></span>
<span class="arrow"></span>
</div>
</el-form-item>
<el-form-item label="潜渡路线数量">
<div class="input-number input-number-unit-3" style="width: 190px;">
<input class="input" type="number" title="" placeholder="请输入潜渡路线数量" min="0" max="99999999"
v-model="dive.route" />
<input class="input" type="number" title="" placeholder="请输入潜渡路线数量" min="1" max="99999999"
v-model="dive.route" @input="checkDiveRoute" />
<span class="unit"></span>
<span class="arrow"></span>
</div>
@ -185,7 +194,7 @@
<el-form-item label="潜渡速度">
<div class="input-number input-number-unit-3" style="width: 190px;">
<input class="input" type="number" title="" placeholder="请输入潜渡速度" min="0" max="99999999"
v-model="dive.speed" />
v-model="dive.speed" @input="checkDiveSpeed" />
<span class="unit">m/min</span>
<span class="arrow"></span>
</div>
@ -199,9 +208,12 @@
<div>
<span>潜渡时间</span>
<span v-show="dive.time === null">_</span>
<span v-show="dive.time !== null">
<span v-show="dive.formatTime.integerPart >= 1"><span class="data">{{dive.formatTime.integerPart }}</span>h</span>
<span v-show="dive.formatTime.fractionalPart > 0 ||(dive.formatTime.integerPart === 0 && dive.formatTime.fractionalPart === 0)"><span class="data">{{ Math.round(dive.formatTime.fractionalPart * 60)}}</span>min</span>
<span v-show="dive.time !== null">
<span v-show="dive.formatTime.integerPart >= 1"><span class="data">{{ dive.formatTime.integerPart
}}</span>h</span>
<span
v-show="dive.formatTime.fractionalPart > 0 || (dive.formatTime.integerPart === 0 && dive.formatTime.fractionalPart === 0)"><span
class="data">{{ Math.round(dive.formatTime.fractionalPart * 60) }}</span>min</span>
</span>
</div>
</div>
@ -352,10 +364,7 @@ export default {
},
pursuitCalculate() {
let num = Number(this.pursuit.distance)
let num2 = Number(this.pursuit.enemySpeed)
let num3 = Number(this.pursuit.speed)
if (!num || !num2 || !num3) {
if (!this.pursuit.distance || !this.pursuit.enemySpeed || !this.pursuit.speed) {
this.pursuit.time = null
this.pursuit.formatTime = {
integerPart: null,
@ -364,9 +373,16 @@ export default {
return;
}
let num = Number(this.pursuit.distance)
let num2 = Number(this.pursuit.enemySpeed)
let num3 = Number(this.pursuit.speed)
// 如果初始距离为0已经追上
if (num === 0) {
this.pursuit.time = 0
this.pursuit.formatTime = {
integerPart: 0,
fractionalPart: 0,
}
}
else {
const relativeSpeed = num3 - num2;
@ -387,10 +403,7 @@ export default {
},
encounterCalculate() {
let num = Number(this.encounter.distance)
let num2 = Number(this.encounter.weSpeed)
let num3 = Number(this.encounter.enemySpeed)
if (!num || !num2 || !num3) {
if (!this.encounter.distance || !this.encounter.weSpeed || !this.encounter.enemySpeed) {
this.encounter.time = null
this.encounter.meetingDistance = null
this.encounter.formatTime = {
@ -399,6 +412,13 @@ export default {
}
return;
}
let num = Number(this.encounter.distance)
let num2 = Number(this.encounter.weSpeed)
let num3 = Number(this.encounter.enemySpeed)
if(num2 == 0 && num3 == 0) {
this.$message.warning("敌我双方运动时速皆为0不会遭遇");
return
}
const relativeSpeed = num2 + num3;
this.encounter.time = Math.round((num / relativeSpeed) * 100) / 100;
this.encounter.meetingDistance = Math.round((num2 * this.encounter.time) * 100) / 100
@ -422,7 +442,7 @@ export default {
// let time = ((distance + ((tank / route) * spacing)) / speed)
let num = Math.ceil(tank / route) //路径上坦克最多数量
let actualDistance = distance
if(num > 1) {
if (num > 1) {
actualDistance = distance + ((num - 1) * spacing)
}
let time = actualDistance / speed
@ -459,7 +479,92 @@ export default {
data = { integerPart, fractionalPart };
}
return data
}
},
checkBlockadeWeDistance(e) {
let value = Number(e.target.value)
if (value < 0.01) {
this.blockade.weDistance = 0.01
}
},
checkBlockadeEnemyDistance(e) {
let value = Number(e.target.value)
if (value < 0.01) {
this.blockade.enemyDistance = 0.01
}
},
checkBlockadeEnemySpeed(e) {
let value = Number(e.target.value)
if (value < 0.01) {
this.blockade.enemySpeed = 0.01
}
},
checkPursuitDistance(e) {
let value = Number(e.target.value)
if (value < 0.01) {
this.pursuit.distance = 0.01
}
},
checkPursuitEnemySpeed(e) {
let value = Number(e.target.value)
if (value < 0) {
this.pursuit.enemySpeed = 0
}
},
checkPursuitSpeed(e) {
let value = Number(e.target.value)
if (value < 0.01) {
this.pursuit.speed = 0.01
}
},
checkEncounterDistance(e) {
let value = Number(e.target.value)
if (value < 0.01) {
this.encounter.distance = 0.01
}
},
checkEncounterWeSpeed(e) {
let value = Number(e.target.value)
if (value < 0) {
this.encounter.weSpeed = 0
}
},
checkEncounterEnemySpeed(e) {
let value = Number(e.target.value)
if (value < 0) {
this.encounter.enemySpeed = 0
}
},
checkDiveDistance(e) {
let value = Number(e.target.value)
if (value < 0.01) {
this.dive.distance = 0.01
}
},
checkDiveSpacing(e) {
let value = Number(e.target.value)
if (value < 0.01) {
this.dive.spacing = 0.01
}
},
checkDiveTank(e) {
let value = Number(e.target.value)
if (value < 1) {
this.dive.tank = 1
}
},
checkDiveRoute(e) {
let value = Number(e.target.value)
if (value < 1) {
this.dive.route = 1
}
},
checkDiveSpeed(e) {
let value = Number(e.target.value)
if (value < 0.01) {
this.dive.speed = 0.01
}
},
},
mounted() {
},
@ -664,5 +769,4 @@ export default {
}
}
}
}
</style>
}</style>