我正在尝试在我的应用程序中创建室内定位功能。所以我做了以下事情
1:拍摄一张楼层地图图像并根据米我为图像设置像素,以便我可以获得放置在地图上的信标的正确位置
2:现在通过信标的 RSSI 值,我得到了 BLE 和 iPhone 之间的距离(以米为单位)
3:现在我正在尝试使用三边测量算法,这样我就可以获得用户的正确位置。
现在我从设备到手机的距离正确,但是当我尝试找到手机的位置时,我正在使用三边测量算法,但每次我得到相同的响应时,天气距离是高还是低
所以这是我的三边测量算法代码。
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)
}
如果我做错了什么,请告诉我。