Я пытаюсь использовать несколько iBeacons для отслеживания местоположения пользователя в iOS. Я знаю, что это можно сделать (в некоторой степени), используя 3 маяка и трилатерацию, но я хотел бы сделать это с двумя (билатерация). Я знаю, что, скорее всего, у меня будет два ответа. Кто-нибудь знает простой способ сделать это, учитывая (x, y) расположение маяков (относительно комнаты) и усредненный RSSI от каждого маяка?
У меня есть этот код для трилатерации, который я изменил на target-c из javascript:
- (CGPoint)getTrilaterationWithBeacon1:(BBBeacon *)beacon1 Beacon2:(BBBeacon *)beacon2 Beacon3:(BBBeacon *)beacon3 {
float xa = beacon1.x;
float ya = beacon1.y;
float xb = beacon2.x;
float yb = beacon2.y;
float xc = beacon3.x;
float yc = beacon3.y;
float ra = beacon1.distance;
float rb = beacon2.distance;
float rc = beacon3.distance;
float S = (pow(xc, 2.) - pow(xb, 2.) + pow(yc, 2.) - pow(yb, 2.) + pow(rb, 2.) - pow(rc, 2.)) / 2.0;
float T = (pow(xa, 2.) - pow(xb, 2.) + pow(ya, 2.) - pow(yb, 2.) + pow(rb, 2.) - pow(ra, 2.)) / 2.0;
float y = ((T * (xb - xc)) - (S * (xb - xa))) / (((ya - yb) * (xb - xc)) - ((yc - yb) * (xb - xa)));
float x = ((y * (ya - yb)) - T) / (xb - xa);
CGPoint point = CGPointMake(x, y);
return point;
}