5

グリッド

(隅にある小さな点はノードで、赤い点は追跡されている人です)

座標:

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

ご覧のとおり、私は数学が苦手で、「人物の位置」がかなりずれています。それは問題ではありませんが、人がグリッドの真ん中にいる場合に機能します.

すべてのノードが同じ信号強度を持っている場合、その人はグリッドの真ん中にいるという仮定で作業しています。

誰かがこれで私を助けてくれますか? しばらくの間、グーグルで頭をテーブルにぶつけていました。

4

2 に答える 2