Пример #1
0
        public void addNode(StrokeGroup sg)
        {
            /*
             * 1.	如果SKContextDG为空,创建关于s新节点nodeS,算法结束;
             * 2.	创建新节点nodeS,计算笔迹s与前一输入笔迹s’的输入时间差deltTime;
             * 3.	如果deltTime < ThresholdTime,将前一输入笔迹s所对应的节点的tPointer指针指向nodeS;
             * 4.	顺次遍历SKContextDG的历史节点,计算nodeS与历史节点的空间距离dist,根据dist’值判断二者之间的空间关系R;
             * 5.	如果R= ST,在两个节点之间建立空间关联链接,重复步骤4直至遍历完所有节点。
             */

            nodeIndex++;
            SKContextDGNode node = new SKContextDGNode(sg, sg.StartTime, nodeIndex);

            DGNodeList.Add(node);
            node.groupID = sg.groupID;


            double thresholdTime    = 1.2;    //TODO::阈值的确定
            double thresholdSpatial = 1000;   //TODO::阈值的确定


            //空间邻近关系建立
            double dist = -1;

            dist = distance(sg, lastNode.strokeGroup);
            if ((dist > thresholdSpatial) && (!DGHeadList.Contains(node)))
            {
                newHead(node);
            }

            foreach (SKContextDGNode preNode in DGNodeList)
            {
                if (preNode != node)
                {
                    StrokeGroup preSg = null;
                    preSg = preNode.strokeGroup;
                    dist  = distance(sg, preSg);
                    if ((dist < thresholdSpatial) && (!node.sPointer.Contains(preNode)))
                    {
                        node.sPointer.Add(preNode);
                    }
                }
            }


            //时间邻近关系建立
            double delta = (long)((TimeSpan)(sg.StartTime - lastNode.timeStamp)).TotalSeconds;

            if (delta < thresholdTime)
            {
                //时间邻近
                lastNode.tPointer = node;
            }
            else if (!DGHeadList.Contains(node))
            {
                newHead(node);
            }

            lastNode = node;
        }
Пример #2
0
 public void newHead(SKContextDGNode node)
 {
     DGHeadList.Add(node);
     DGNodeList.Add(node);
 }