(隅にある小さな点はノードで、赤い点は追跡されている人です)
座標:
Node X Y Position
1 0 0 Top left
2 450 0 Top right
3 0 450 Bottom left
4 450 450 Bottom right
Person X Y
Red dot 84 68
信号強度を取得する方法:
(他のノードと比較した信号強度が必要なだけです。それは達成されているようです。または、ここで間違っていますか?)
public int GetSignalStrength(OvalShape node)
{
int xd = node.Left - this.person.Left;
int yd = node.Top - this.person.Top;
var signalStrength = Math.Sqrt((xd * xd) + (yd * yd));
return Convert.ToInt32(-signalStrength);
}
信号強度:
Node Signal Strength
1 -108
2 -372
3 -391
4 -529
人の座標を取得する方法:
(s1、s2、s3、s4 は上記の信号強度です)
public int[] GetPositionInGrid(int s1, int s2, int s3, int s4)
{
var tx1 = this.node1.Left;
var ty1 = this.node1.Top;
var tx2 = this.node2.Left;
var ty2 = this.node2.Top;
var tx3 = this.node3.Left;
var ty3 = this.node3.Top;
var tx4 = this.node4.Left;
var ty4 = this.node4.Top;
double w1 = ((double)s1) / ((double)(s1 + s2 + s3 + s4));
double w2 = ((double)s2) / ((double)(s1 + s2 + s3 + s4));
double w3 = ((double)s3) / ((double)(s1 + s2 + s3 + s4));
double w4 = ((double)s4) / ((double)(s1 + s2 + s3 + s4));
var px = ((tx1 * w1) + (tx2 * w2) + (tx3 * w3) + (tx4 * w4)) / (w1 + w2 + w3 + w4);
var py = ((ty1 * w1) + (ty2 * w2) + (ty3 * w3) + (ty4 * w4)) / (w1 + w2 + w3 + w4);
return new int[] { Convert.ToInt32(px), Convert.ToInt32(py) };
}
人物の位置:
x: 290
y: 296
ご覧のとおり、私は数学が苦手で、「人物の位置」がかなりずれています。それは問題ではありませんが、人がグリッドの真ん中にいる場合に機能します.
すべてのノードが同じ信号強度を持っている場合、その人はグリッドの真ん中にいるという仮定で作業しています。
誰かがこれで私を助けてくれますか? しばらくの間、グーグルで頭をテーブルにぶつけていました。