| | |
| | | package com.flightfeather.uav.model.epw |
| | | |
| | | import com.flightfeather.uav.lightshare.bean.CompanySOP |
| | | import com.flightfeather.uav.lightshare.bean.DataVo |
| | | import com.flightfeather.uav.model.BaseSOP |
| | | import com.flightfeather.uav.model.BaseWeight |
| | | import com.flightfeather.uav.socket.eunm.FactorType |
| | | import kotlin.math.PI |
| | | import kotlin.math.abs |
| | | import kotlin.math.atan2 |
| | | import kotlin.math.sqrt |
| | | |
| | | /** |
| | | * |
| | | * 风向权重 |
| | | */ |
| | | class WindDirWeight : BaseWeight() { |
| | | class WindDirWeight(var defaultLocation: Pair<Double, Double>?) : BaseWeight<DataVo, BaseSOP>() { |
| | | |
| | | override val tag: String = "风向权重" |
| | | |
| | | override val sectionValues: List<Double> = listOf(22.5, 67.5, 112.5, 157.5, 180.0) |
| | | |
| | | override val weights: List<Double> = listOf(1.0, 0.8, 0.5, 0.2, 0.1) |
| | | |
| | | fun getWeight(deg: Double):Double { |
| | | return weightCal(deg) |
| | | override fun onWeightFactor(mData: DataVo, sop: BaseSOP): Double { |
| | | val p1 = if (mData.lng == null || mData.lat == null || mData.lng == .0 || mData.lat == .0) defaultLocation else Pair(mData.lng!!, mData.lat!!) |
| | | p1 ?: return .0 |
| | | val p2 = Pair(sop.ciLongitude!!.toDouble(), sop.ciLatitude!!.toDouble()) |
| | | val wd = mData.getFactorData(FactorType.WIND_DIRECTION) ?: 0.0 |
| | | return getAngle(p1, p2, wd) |
| | | } |
| | | |
| | | fun getWeight(p1: Pair<Double, Double>, p2: Pair<Double, Double>, wd: Int): Double { |
| | | |
| | | private fun getAngle(p1: Pair<Double, Double>, p2: Pair<Double, Double>, wd: Double): Double { |
| | | val dx = p2.first - p1.first |
| | | val dy = p2.second - p1.second |
| | | var x1 = atan2(dy, dx) * 180 / PI |
| | |
| | | var x2 = 270 - wd |
| | | if (x2 < 0) x2 += 360 |
| | | x1 = abs(x2 - x1) |
| | | if (x1>180) x1 = 360 - x1 |
| | | |
| | | return weightCal(x1) |
| | | if (x1 > 180) x1 = 360 - x1 |
| | | // println("夹角:$x1") |
| | | x1 = 180 - x1 |
| | | return x1 |
| | | } |
| | | } |