信标三边测量算法每次给出相同的结果。 iOS Swift

时间:2019-11-23 09:38:35

标签: ios swift swift5 indoor-positioning-system trilateration

我正在尝试在我的应用中创建室内定位功能。所以我确实遵循了

1:拍摄了一张楼层地图图像,并根据仪表,我为图像设置了像素,这样我就可以正确放置地图上的信标位置

2:现在通过信标的RSSI值,我正在获得BLE和iPhone之间的距离(以米为单位)

3:现在,我正在尝试使用Trilateration算法,以便可以正确定位用户。

现在我可以正确地获得设备到手机的距离,但是当我尝试查找手机的位置时,我正在使用Trilateration算法,但是每次我得到相同的响应时,天气距离都是高还是低

这是我的Trilateration算法代码。

func getCoordinateWithBeaconA(_ a: CGPoint, beaconB b: CGPoint, beaconC c: CGPoint, distanceA dA: CGFloat, distanceB dB: CGFloat, distanceC dC: CGFloat) -> CGPoint {
    var W: CGFloat
    var Z: CGFloat
    var x: CGFloat
    var y: CGFloat
    var y2: CGFloat
    W = dA * dA - dB * dB - a.x * a.x - a.y * a.y + b.x * b.x + b.y * b.y
    Z = dB * dB - dC * dC - b.x * b.x - b.y * b.y + c.x * c.x + c.y * c.y

    x = (W * (c.y - b.y) - Z * (b.y - a.y)) / (2 * ((b.x - a.x) * (c.y - b.y) - (c.x - b.x) * (b.y - a.y)))
    y = (W - 2 * x * (b.x - a.x)) / (2 * (b.y - a.y))
    //y2 is a second measure of y to mitigate errors
    y2 = (Z - 2 * x * (c.x - b.x)) / (2 * (c.y - b.y))

    y = (y + y2) / 2

    let roundedX : Float = Float(String(format: "%.6f", x)) ?? 0.0
    let xValue : CGFloat = CGFloat(roundedX)

    let roundedY : Float = Float(String(format: "%.6f", y)) ?? 0.0
    let yValue : CGFloat = CGFloat(roundedY)
    return CGPoint(x: xValue, y: yValue)
}

请让我知道我做错了什么。

0 个答案:

没有答案