GetConnectedNodeNum() public method

public GetConnectedNodeNum ( ) : int
return int
Esempio n. 1
0
        private void SetNodeTypeRec(DendriteNode node, DendriteNode parent)
        {
            //連結しているノードの数でノードのタイプを判定
            if (node.GetConnectedNodeNum() == 1) // 他の一つのクラスターにしか繋がっていないクラスターはEdgeクラスターである
            {
                node.NodeType = DendriteNodeType.EDGE;
                edge++;
            }
            else if (node.GetConnectedNodeNum() >= 3) // 他の3つのクラスターに繋がっているクラスターはBranchクラスターである
            {
                node.NodeType = DendriteNodeType.BRANCH;
                branch++;
            }
            else
            {
                node.NodeType = DendriteNodeType.CONNECT; // 他の2つのクラスターに繋がっているクラスターはEdgeクラスターでもBranchクラスターでもない
            }

            foreach (var child in node.ConnectedNodes)
            {
                if (child != parent)
                {
                    SetNodeTypeRec(child, node);
                }
            }
        }
Esempio n. 2
0
        private bool ShavingNodeChecker(DendriteNode node, DendriteNode parent, int level)
        {
            if (level > 0)
            {
                if (node.NodeType == DendriteNodeType.EDGE && node != root)
                {
                    // 端点が見つかればそこからノードを削除
                    // ConnectedNodes[0]はnodeのparent??? ← その通り
                    // 基本的にはそうだが、補間によって接続されると、そうとも限らないかもしれない
                    // ChangeRootNodeしたときにうまく動いているかもしれないけど
                    ShavingRec(node.ConnectedNodes[0], node);
                    return(true);
                }
                else if (node.NodeType == DendriteNodeType.CONNECT)
                {
                    // 通過点の場合 探索続行
                    // foreachを使うと動かない (ShavingRecの中でConnectedNodesが削除されるから
                    //
                    // removeされたものが1つでもあったらi--しないといけないかも??
                    for (int i = 0; i < node.GetConnectedNodeNum(); i++)
                    {
                        var next = node.ConnectedNodes[i];
                        if (next != parent)
                        {
                            if (ShavingNodeChecker(next, node, level - 1))
                            {
                                i--;
                            }
                        }
                    }
                }
            }

            return(false);
        }
Esempio n. 3
0
        //径の平滑化
        private static void SmoothRadius(DendriteNode node, DendriteNode parent)
        {
            node.tmpr = node.Radius + node.ConnectedNodes.Sum(cobj => cobj.Radius);

            int count = node.GetConnectedNodeNum() + 1;

            node.tmpr /= count;

            foreach (var next in node.ConnectedNodes)
            {
                if (next != parent)
                {
                    SmoothRadius(next, node);
                }
            }
        }
Esempio n. 4
0
        //重心座標の平滑化
        private static void SmoothGravityLine(DendriteNode node, DendriteNode parent)
        {
            //接続ノードの重心座標の平均をとる
            node.tmpx = node.gx + node.ConnectedNodes.Sum(cobj => cobj.gx);
            node.tmpy = node.gy + node.ConnectedNodes.Sum(cobj => cobj.gy);
            node.tmpz = node.gz + node.ConnectedNodes.Sum(cobj => cobj.gz);

            int count = node.GetConnectedNodeNum() + 1;

            node.tmpx /= count;
            node.tmpy /= count;
            node.tmpz /= count;

            /*
             * else if(node.nodetype == DendriteNodeType.BRANCH)
             * {
             *  for(int i=0;i<node.GetConnectedNodeNum();i++)
             *  {
             *      if(node.cnodes[i] != parent)
             *      {
             *          double tx,ty,tz;
             *
             *          tx = parent.gx+node.gx+node.cnodes[i].gx;
             *          ty = parent.gy+node.gy+node.cnodes[i].gy;
             *          tz = parent.gz+node.gz+node.cnodes[i].gz;
             *
             *          node.gx = tx/3.0;
             *          node.gy = ty/3.0;
             *          node.gz = tz/3.0;
             *      }
             *  }
             * }
             */
            //node.CalcRadius0(resox,resoz);
            //node.CalcRadius(this.volunit);

            foreach (var next in node.ConnectedNodes)
            {
                if (next != parent)
                {
                    SmoothGravityLine(next, node);
                }
            }
        }
Esempio n. 5
0
        //径の平滑化
        private static void SmoothRadius(DendriteNode node, DendriteNode parent)
        {
            node.tmpr = node.Radius + node.ConnectedNodes.Sum(cobj => cobj.Radius);

            int count = node.GetConnectedNodeNum() + 1;
            node.tmpr /= count;

            foreach (var next in node.ConnectedNodes)
            {
                if (next != parent)
                {
                    SmoothRadius(next, node);
                }
            }
        }
Esempio n. 6
0
        //重心座標の平滑化
        private static void SmoothGravityLine(DendriteNode node, DendriteNode parent)
        {
            //接続ノードの重心座標の平均をとる
            node.tmpx = node.gx + node.ConnectedNodes.Sum(cobj => cobj.gx);
            node.tmpy = node.gy + node.ConnectedNodes.Sum(cobj => cobj.gy);
            node.tmpz = node.gz + node.ConnectedNodes.Sum(cobj => cobj.gz);

            int count = node.GetConnectedNodeNum() + 1;

            node.tmpx /= count;
            node.tmpy /= count;
            node.tmpz /= count;

            /*
            else if(node.nodetype == DendriteNodeType.BRANCH)
            {
                for(int i=0;i<node.GetConnectedNodeNum();i++)
                {
                    if(node.cnodes[i] != parent)
                    {
                        double tx,ty,tz;

                        tx = parent.gx+node.gx+node.cnodes[i].gx;
                        ty = parent.gy+node.gy+node.cnodes[i].gy;
                        tz = parent.gz+node.gz+node.cnodes[i].gz;

                        node.gx = tx/3.0;
                        node.gy = ty/3.0;
                        node.gz = tz/3.0;
                    }
                }
            }
            */
            //node.CalcRadius0(resox,resoz);
            //node.CalcRadius(this.volunit);

            foreach (var next in node.ConnectedNodes)
            {
                if (next != parent)
                {
                    SmoothGravityLine(next, node);
                }
            }
        }
Esempio n. 7
0
        private bool ShavingNodeChecker(DendriteNode node, DendriteNode parent, int level)
        {
            if (level > 0)
            {
                if (node.NodeType == DendriteNodeType.EDGE && node != root)
                {
                    // 端点が見つかればそこからノードを削除
                    // ConnectedNodes[0]はnodeのparent??? ← その通り
                    // 基本的にはそうだが、補間によって接続されると、そうとも限らないかもしれない
                    // ChangeRootNodeしたときにうまく動いているかもしれないけど
                    ShavingRec(node.ConnectedNodes[0], node);
                    return true;
                }
                else if (node.NodeType == DendriteNodeType.CONNECT)
                {
                    // 通過点の場合 探索続行
                    // foreachを使うと動かない (ShavingRecの中でConnectedNodesが削除されるから
                    // 
                    // removeされたものが1つでもあったらi--しないといけないかも??
                    for (int i = 0; i < node.GetConnectedNodeNum(); i++)
                    {
                        var next = node.ConnectedNodes[i];
                        if (next != parent)
                        {
                            if (ShavingNodeChecker(next, node, level - 1))
                            {
                                i--;
                            }
                        }
                    }
                }
            }

            return false;
        }
Esempio n. 8
0
        private void SetNodeTypeRec(DendriteNode node, DendriteNode parent)
        {
            //連結しているノードの数でノードのタイプを判定
            if (node.GetConnectedNodeNum() == 1) // 他の一つのクラスターにしか繋がっていないクラスターはEdgeクラスターである
            {
                node.NodeType = DendriteNodeType.EDGE;
                edge++;
            }
            else if (node.GetConnectedNodeNum() >= 3) // 他の3つのクラスターに繋がっているクラスターはBranchクラスターである
            {
                node.NodeType = DendriteNodeType.BRANCH;
                branch++;
            }
            else
            {
                node.NodeType = DendriteNodeType.CONNECT; // 他の2つのクラスターに繋がっているクラスターはEdgeクラスターでもBranchクラスターでもない
            }

            foreach (var child in node.ConnectedNodes)
            {
                if (child != parent)
                {
                    SetNodeTypeRec(child, node);
                }
            }
        }