コード例 #1
0
ファイル: Form1.cs プロジェクト: murat199/QuadTree
 /// <summary>
 /// Yapılan arama sorgusunda forma eklenen dairenin koordinat ve yarıçapını ArrayList'e ekler
 /// </summary>
 /// <param name="Q">sorgu yapılacak düğüm</param>
 private void AddCircleLineList(QuadNode Q)
 {
     if (DistanceTwoPoints(Q.x, Q.y, numSearchX, numSearchY) < numSearchR)
     {
         if (!qSearch.SearchListX.Contains(Q.x) && !qSearch.SearchListY.Contains(Q.y))
         {
             AddRowDtSearch(Q.x, Q.y);
             qSearch.SearchListX.Add(Q.x);
             qSearch.SearchListY.Add(Q.y);
             qSearch.SearchListStartX.Add(Q.OrX1);
             qSearch.SearchListStartY.Add(Q.OrY1);
             qSearch.SearchListEndX.Add(Q.OrX2);
             qSearch.SearchListEndY.Add(Q.OrY2);
         }
     }
 }
コード例 #2
0
        /// <summary>
        /// Ağaca düğüm eklenmesini sağlar
        /// </summary>
        /// <param name="x">Eklecenek düğümün x koordinatı</param>
        /// <param name="y">Eklecenek düğümün y koordinatı</param>
        public void Add(int x, int y)
        {
            int stateNode = 0;

            if (root == null)
            {
                RGBClear();
                ColorAddList(0);
                totalNode++;
                root = new QuadNode(x, y, 0, 0, 512, 512, (int)(R[0]), (int)(G[0]), (int)(B[0]));
            }
            else
            {
                int colorIndex = 0;
                AddR(ref root, ref root, x, y, ref stateNode, ref colorIndex);
            }
        }
コード例 #3
0
 /// <summary>
 /// Rekürsif olarak ağaçta dolaşılarak düğümün hangi bölgeye yerleştirileceği belirlenir
 /// </summary>
 /// <param name="Q">Rekürsif olarak dolaşılan düğümeleri tutar</param>
 /// <param name="topNode">Eklenecek düğümün bir üst düğümünü tutar</param>
 /// <param name="x">Eklecenek düğümün x koordinatı</param>
 /// <param name="y">Eklecenek düğümün y koordinatı</param>
 /// <param name="stateNode">Eklecenek düğümün kaçıncı bölgede olduğunu tutar</param>
 /// <param name="colorListIndex">Eklecenek düğümün renk index'ini tutar</param>
 public void AddR(ref QuadNode Q, ref QuadNode topNode, int x, int y, ref int stateNode, ref int colorListIndex)
 {
     if (Q == null)
     {
         totalNode++;
         if (stateNode == 1)
         {
             ColorAddList(colorListIndex);
             QuadNode newNode = new QuadNode(x, y, (topNode.x), (topNode.OrY1), (topNode.OrX2), (topNode.y), (int)(R[colorListIndex]), (int)(G[colorListIndex]), (int)(B[colorListIndex]));
             Q        = newNode;
             tempNode = newNode;
             return;
         }
         if (stateNode == 2)
         {
             ColorAddList(colorListIndex);
             QuadNode newNode = new QuadNode(x, y, (topNode.OrX1), (topNode.OrY1), (topNode.x), (topNode.y), (int)(R[colorListIndex]), (int)(G[colorListIndex]), (int)(B[colorListIndex]));
             Q        = newNode;
             tempNode = newNode;
             return;
         }
         if (stateNode == 3)
         {
             ColorAddList(colorListIndex);
             QuadNode newNode = new QuadNode(x, y, (topNode.OrX1), (topNode.y), (topNode.x), (topNode.OrY2), (int)(R[colorListIndex]), (int)(G[colorListIndex]), (int)(B[colorListIndex]));
             Q        = newNode;
             tempNode = newNode;
             return;
         }
         if (stateNode == 4)
         {
             ColorAddList(colorListIndex);
             QuadNode newNode = new QuadNode(x, y, (topNode.x), (topNode.y), (topNode.OrX2), (topNode.OrY2), (int)(R[colorListIndex]), (int)(G[colorListIndex]), Convert.ToInt16(B[colorListIndex]));
             Q        = newNode;
             tempNode = newNode;
             return;
         }
     }
     if (x > Q.x && y < Q.y && x < 512 && y > 0)
     {
         //1.bölge
         //KuzeyDoğu
         stateNode = 1;
         colorListIndex++;
     }
     if (x < Q.x && y < Q.y && x > 0 && y > 0)
     {
         //2.bölge
         //KuzeyBatı
         stateNode = 2;
         colorListIndex++;
         AddR(ref Q.KuzeyBati, ref Q, x, y, ref stateNode, ref colorListIndex);
     }
     if (x < Q.x && y > Q.y && x > 0 && y < 512)
     {
         //3.bölge
         //GüneyBatı
         stateNode = 3;
         colorListIndex++;
         AddR(ref Q.GuneyBati, ref Q, x, y, ref stateNode, ref colorListIndex);
     }
     if (x > Q.x && y > Q.y && x < 512 && y < 512)
     {
         //4.bölge
         //GüneyDoğu
         stateNode = 4;
         colorListIndex++;
         AddR(ref Q.GuneyDogu, ref Q, x, y, ref stateNode, ref colorListIndex);
     }
 }
コード例 #4
0
 /// <summary>
 /// Ağacın root düğümünü oluşturur
 /// </summary>
 /// <param name="initial_x">Ağaca eklenecek root'un x koordinatı</param>
 /// <param name="initial_y">Ağaca eklenecek root'un y koordinatı</param>
 public QuadTree(int initial_x, int initial_y)
 {
     RGBClear();
     ColorAddList(0);
     root = new QuadNode(initial_x, initial_y, 0, 0, 512, 512, (int)(R[0]), (int)(G[0]), (int)(B[0]));
 }
コード例 #5
0
 /// <summary>
 /// Ağacın root düğümüne boş değer atanır
 /// </summary>
 public QuadTree()
 {
     root = null;
 }