public Quadtree(double x, double y, double width, double minWidth) { this.minWidth = minWidth; m_Rect = new Box(x, y, width, width); m_List = new List<Node>(); m_AreaOne = null; m_AreaTwo = null; m_AreaThree = null; m_AreaFour = null; }
void SavesNode(Quadtree quadTree, string idNode, XmlWriter write) { if (quadTree == null) return; if(quadTree.m_List.Count != 0) { write.WriteStartElement("Node"); write.WriteAttributeString("id", idNode); foreach(var item in quadTree.m_List) { write.WriteStartElement("Object"); write.WriteAttributeString("id", item.m_Id.ToString()); write.WriteAttributeString("index", item.m_Index.ToString()); write.WriteAttributeString("x", item.m_X.ToString()); write.WriteAttributeString("y", item.m_Y.ToString()); write.WriteAttributeString("width", item.m_Width.ToString()); write.WriteAttributeString("height", item.m_Height.ToString()); write.WriteEndElement(); } write.WriteEndElement(); } else { double id = int.Parse(idNode) * 10; if(quadTree.m_AreaOne != null) { SavesNode(quadTree.m_AreaOne, (id + 1).ToString(), write); } if (quadTree.m_AreaTwo != null) { SavesNode(quadTree.m_AreaTwo, (id + 2).ToString(), write); } if (quadTree.m_AreaThree != null) { SavesNode(quadTree.m_AreaThree, (id + 3).ToString(), write); } if (quadTree.m_AreaFour != null) { SavesNode(quadTree.m_AreaFour, (id + 4).ToString(), write); } } }
public void CreateQuadTree() { // make real world left = x, right = x + width, top = y + height, bottom = y foreach (var item in m_Temp) item.m_Y += item.m_Height; //for (int i = 0; i < m_ArrayNode.Count; i++) //{ // m_ArrayNode[i].m_Y += m_ArrayNode[i].m_Height; // m_Temp.Add(m_ArrayNode[i]); //} m_QuadTree = new Quadtree(0, 0, m_Bitmap.Width, MainWindow.minWidth); foreach(var item in m_Temp) { item.m_Y = m_Bitmap.Height - item.m_Y; m_QuadTree.Insert(item); } }
public void CreateQuadTree() { // make real world left = x, right = x + width, top = y + height, bottom = y foreach (var item in m_Temp) item.m_Y += item.m_Height; m_QuadTree = new Quadtree(0, 0, m_MapWidth, MainWindow.minWidth); foreach(var item in m_Temp) { item.m_Y = m_MapHeight - item.m_Y; m_QuadTree.Insert(item); } }
void Split() { if(m_AreaOne == null) m_AreaOne = new Quadtree(m_Rect.x + m_Rect.width / 2, m_Rect.y + m_Rect.height / 2, m_Rect.width / 2, minWidth); if(m_AreaTwo == null) m_AreaTwo = new Quadtree(m_Rect.x, m_Rect.y + m_Rect.height / 2, m_Rect.width / 2, minWidth); if(m_AreaThree == null) m_AreaThree = new Quadtree(m_Rect.x, m_Rect.y, m_Rect.width / 2, minWidth); if (m_AreaFour == null) m_AreaFour = new Quadtree(m_Rect.x + m_Rect.width / 2, m_Rect.y, m_Rect.width / 2, minWidth); }