Exemple #1
0
        static void Main(string[] args)
        {
            bool      bRet = SetConsoleCtrlHandler(newDelegate, true);
            UdpClient x    = new UdpClient(0);

            x.Connect("localhost", 3333);                       //将雷达的数据通过udp的方式传给应用,默认端口为3333

            int          oneRadarMaxnumber = 3000;              //设置单个雷达单次采样的最大点数
            List <Radar> radars            = radarSet(oneRadarMaxnumber);

            Cursor2DManagement management = new Cursor2DManagement();  //管理通过雷达生成的触摸点
            int mergeDistance = 50, maxX = 3560, maxY = 2000;          //maxX和maxY分别为屏幕坐标的最大距离(最终传输数据限制在0到1之间)
                                                                       //mergeDistance为两个点融合为一个点的最小距离
                                                                       //(因为物体有体积,一个物体往往在雷达里会生成多个靠近的点)
            grid pointGrid = new grid(mergeDistance, Math.Max(maxX, maxY), oneRadarMaxnumber * radars.Count);

            Cursor2D.set(maxX, maxY);                                  //设置融合操作

            int frame = 0;

            way.dtime = 1000.0f / 60.0f;                               //雷达数据的更新频率,为60帧每秒
            for (int i = 0; i < radars.Count; i++)
            {
                radars[i].start();                                     //雷达开启扫描
            }
            while (true)                                               //雷达获取数据和数据的操作
            {
                way.operation(ref radars, pointGrid, management, ref x, ref frame, oneRadarMaxnumber);
            }

            for (int i = 0; i < radars.Count; i++)
            {
                radars[i].close();
            }
        }
Exemple #2
0
 public byte[] setCur2DMessage(Cursor2D x)       //根据cursor2D的值设置message为set类型的消息
 {
     return(setCur2DMessage(x.ID(), x.xPos(true), x.yPos(true), x.xSpeed(true), x.ySpeed(true), x.Accel(true)));
 }
        public void update(ref List <XYPoint> currentPoint)    //利用currentPoint里的数据更新Cursor2Dset里的鼠标
        {
            float dTime = getTime();
            int   i, j;

            bool[] if_have_point = new bool[currentPoint.Count];
            bool[] if_have_cursor = new bool[cursor2Dset.Count];
            float  x, y;

            for (i = 0; i < currentPoint.Count; i++)
            {
                if_have_point[i] = false;
            }
            for (i = 0; i < if_have_cursor.Length; i++)
            {
                if_have_cursor[i] = false;
            }


            for (i = 0; i < cursor2Dset.Count; i++)
            {
                x = cursor2Dset[i].xPos() + cursor2Dset[i].xSpeed() * dTime + cursor2Dset[i].xAccel() * dTime * dTime;
                y = cursor2Dset[i].yPos() + cursor2Dset[i].ySpeed() * dTime + cursor2Dset[i].yAccel() * dTime * dTime;
                for (j = 0; j < currentPoint.Count; j++)
                {
                    if ((Math.Abs(x - currentPoint[j].x) < distance) && (Math.Abs(y - currentPoint[j].y) < distance) && (!if_have_point[j]))
                    {
                        if_have_cursor[i] = true;
                        cursor2Dset[i].update(currentPoint[j]);
                        if_have_point[j] = true;
                        break;
                    }
                }
            }//每个cursor2D对象根据当前位置、流逝时间、速度和加速度计算预估位置,公式为pos + speed * dtime + accel * dtime * dtime
             //然后在以这个位置为中心,半径为distance的圆内查找是否存在currentPoint内的点
             //以第一个匹配到的点作为cursor2D最新的位置。如果没有匹配的点,则删除这个cursor2D对象。

            newCursor.Clear();
            for (i = 0; i < cursor2Dset.Count; i++)
            {
                if (!if_have_cursor[i])
                {
                    IDprovide.freeID(cursor2Dset[i].ID());
                }
                else
                {
                    newCursor.Add(cursor2Dset[i]);
                }
            }
            //最后没有与任何cursor2D匹配的currentPoint里的点作为新生成的cursor2D的位置
            cursor2Dset.Clear();
            for (i = 0; i < newCursor.Count; i++)
            {
                cursor2Dset.Add(newCursor[i]);
            }

            newCursor.Clear();
            Cursor2D m;

            for (i = 0; i < currentPoint.Count; i++)
            {
                if (!if_have_point[i])
                {
                    m = new Cursor2D(currentPoint[i].x, currentPoint[i].y, 0.0f, 0.0f, 0.0f, 0.0f);
                    m.setID(IDprovide.getID());
                    cursor2Dset.Add(m);
                    newCursor.Add(m);
                }
            }
        }