<?xml version="1.0" encoding="UTF-8"?><rss xmlns:dc="http://purl.org/dc/elements/1.1/" xmlns:content="http://purl.org/rss/1.0/modules/content/" xmlns:atom="http://www.w3.org/2005/Atom" version="2.0"><channel><title><![CDATA[Quad - Tree Literatur??]]></title><description><![CDATA[<p>Wo finde ich Literatur zu Quad - Trees vorzugsweise auch mit Beispiel Code. Oder kann mir das jmd kurz erklären?</p>
<p>Danke!</p>
]]></description><link>https://www.c-plusplus.net/forum/topic/171224/quad-tree-literatur</link><generator>RSS for Node</generator><lastBuildDate>Mon, 06 Jul 2026 11:16:29 GMT</lastBuildDate><atom:link href="https://www.c-plusplus.net/forum/topic/171224.rss" rel="self" type="application/rss+xml"/><pubDate>Tue, 23 Jan 2007 15:41:35 GMT</pubDate><ttl>60</ttl><item><title><![CDATA[Reply to Quad - Tree Literatur?? on Tue, 23 Jan 2007 15:41:35 GMT]]></title><description><![CDATA[<p>Wo finde ich Literatur zu Quad - Trees vorzugsweise auch mit Beispiel Code. Oder kann mir das jmd kurz erklären?</p>
<p>Danke!</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1215344</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1215344</guid><dc:creator><![CDATA[T.Jay03]]></dc:creator><pubDate>Tue, 23 Jan 2007 15:41:35 GMT</pubDate></item><item><title><![CDATA[Reply to Quad - Tree Literatur?? on Tue, 23 Jan 2007 15:49:54 GMT]]></title><description><![CDATA[<p>Quad Trees ?</p>
<p>Wofür benutzt man den sowas? Würde mich mal interessieren wenn du die Güte höttest <img
      src="https://www.c-plusplus.net/forum/plugins/nodebb-plugin-emoji/emoji/emoji-one/1f609.png?v=ab1pehoraso"
      class="not-responsive emoji emoji-emoji-one emoji--winking_face"
      title=";)"
      alt="😉"
    /></p>
<p>Mir sind im höchstenfall dreifache bekannt.</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1215353</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1215353</guid><dc:creator><![CDATA[DaRpH]]></dc:creator><pubDate>Tue, 23 Jan 2007 15:49:54 GMT</pubDate></item><item><title><![CDATA[Reply to Quad - Tree Literatur?? on Tue, 23 Jan 2007 18:03:40 GMT]]></title><description><![CDATA[<p>Ich möchte das für eine Wegfindung verwenden.</p>
<p>Grüße</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1215440</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1215440</guid><dc:creator><![CDATA[T.Jay03]]></dc:creator><pubDate>Tue, 23 Jan 2007 18:03:40 GMT</pubDate></item><item><title><![CDATA[Reply to Quad - Tree Literatur?? on Tue, 23 Jan 2007 18:24:11 GMT]]></title><description><![CDATA[<p>Naja in dem Fall würde sich doch schon eher ein Netz anbieten also mit Dynamischer Anzahl an Verbindungspunkten.</p>
<p>Quad würde ja nur was bringen wenns du das wirklich auschliessen könntest das es mehr als 4 Verbindungen sind.</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1215458</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1215458</guid><dc:creator><![CDATA[DaRpH]]></dc:creator><pubDate>Tue, 23 Jan 2007 18:24:11 GMT</pubDate></item><item><title><![CDATA[Reply to Quad - Tree Literatur?? on Tue, 23 Jan 2007 18:44:39 GMT]]></title><description><![CDATA[<p>Wohlgemerkt eine 2D Wegsuche - somit sind es maximal 4 Verbindungen (Wenn ic dich richtig verstanden habe)!</p>
<p>Grüße</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1215473</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1215473</guid><dc:creator><![CDATA[T.Jay03]]></dc:creator><pubDate>Tue, 23 Jan 2007 18:44:39 GMT</pubDate></item><item><title><![CDATA[Reply to Quad - Tree Literatur?? on Tue, 23 Jan 2007 18:55:29 GMT]]></title><description><![CDATA[<p>Wieso sollte es in 2D nur 4 Verbindungen geben?</p>
<pre><code>+---+---+
|\  |  /|
| \ | / |
|  \|/  |
+---+---+
|  /|\  |
| / | \ |
|/  |  \|
+---+---+
</code></pre>
<p>Nun gibt's von der Mitte aus 8 Möglichkeiten, mehr ist auch leicht (nur nicht in ascii-Zeichnung von Hand). Ein Baum isses außerdem auch nicht.</p>
<p>Vielleicht solltest Du mal genauer versuchen zu beschreiben was Du tun willst.</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1215482</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1215482</guid><dc:creator><![CDATA[Jester]]></dc:creator><pubDate>Tue, 23 Jan 2007 18:55:29 GMT</pubDate></item><item><title><![CDATA[Reply to Quad - Tree Literatur?? on Tue, 23 Jan 2007 18:59:19 GMT]]></title><description><![CDATA[<p>Ich denk mal du meinst klassiche Wegpunkte / nodes. Dazu findest du eigentlich in jedem Computerspiele KI/AI Buch was.</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1215487</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1215487</guid><dc:creator><![CDATA[DaRpH]]></dc:creator><pubDate>Tue, 23 Jan 2007 18:59:19 GMT</pubDate></item><item><title><![CDATA[Reply to Quad - Tree Literatur?? on Tue, 23 Jan 2007 22:50:13 GMT]]></title><description><![CDATA[<p>Ich habe da mal was zusammengestümpert. Aber bitte nicht gleich die Hände überm Kopf zusammenschlagen ... ich lerne die Sprache noch ;P und bin über hinweise Dankbar.</p>
<p>Das Buch das mich auf diese Idee gebracht hat, erwähnte einen solchen Algorithmus nur ganz beiläufig.</p>
<p>Ich habe bereits mehrere Varianten von Wegfindungsalgorithmen Programmiert. Alle haben Vor- und Nachteile! (Wie auch der Aktuelle!)</p>
<p>Dieser schein aber für mein Vorhaben am meisten geeignet zu sein. Leider habe ich dafür wie schon gesagt keine/kaum Informationen gefunden und habe das alles mit ein wenig gesunden Menschenverstand programmiert.</p>
<pre><code class="language-cpp">//******************CPUNKT******************************************************
class CPunkt
{
   public:
      int x,y;

      CPunkt() : x(0), y(0)
       {}
      CPunkt(const int &amp;X) : x(X), y(X)
       {}
      CPunkt(const int &amp;X, const int &amp;Y) : x(X), y(Y)
       {}

      Zeichnen(TColor color)
         {
            Form1-&gt;Image1-&gt;Canvas-&gt;Pen-&gt;Color   = clWhite;
            Form1-&gt;Image1-&gt;Canvas-&gt;Brush-&gt;Color = color;
            Form1-&gt;Image1-&gt;Canvas-&gt;Ellipse(x-3, y-3, x+3, y+3);
         }
};

//******************CQUAD*******************************************************
class CQuad
{
   public:
      CQuad  *ChildrenQuads;
      CPunkt Position;
      int    points_in;

      CQuad()
       {
          points_in = 0;
       };

      InsertQuad(const CPunkt &amp;P);
      DeleteQuad(const CPunkt &amp;P);
      bool Search(const CPunkt &amp;P);
};
      CQuad::InsertQuad(const CPunkt &amp;P)
       {
          points_in++;
          if (ChildrenQuads)
           {
              if (P.y &lt; Position.y)
               {
                  if (P.x &lt; Position.x)
                     ChildrenQuads[0].InsertQuad(P);
                  else
                     ChildrenQuads[1].InsertQuad(P);
               }
              else
               {
                  if (P.x &lt; Position.x)
                     ChildrenQuads[2].InsertQuad(P);
                  else
                     ChildrenQuads[3].InsertQuad(P);
               }
           }
       };

      CQuad::DeleteQuad(const CPunkt &amp;P)
       {
          points_in--;
          if (ChildrenQuads)
           {
              if (P.y &lt; Position.y)
               {
                  if (P.x &lt; Position.x)
                     ChildrenQuads[0].DeleteQuad(P);
                  else
                     ChildrenQuads[1].DeleteQuad(P);
               }
              else
               {
                  if (P.x &lt; Position.x)
                     ChildrenQuads[2].DeleteQuad(P);
                  else
                     ChildrenQuads[3].DeleteQuad(P);
               }
           }
       };

      bool CQuad::Search(const CPunkt &amp;P)
       {
          if (ChildrenQuads &amp;&amp; points_in)
           {
              if (P.y &lt; Position.y)
               {
                  if (P.x &lt; Position.x)
                     return ChildrenQuads[0].Search(P);
                  else
                     return ChildrenQuads[1].Search(P);
               }
              else
               {
                  if (P.x &lt; Position.x)
                     return ChildrenQuads[2].Search(P);
                  else
                     return ChildrenQuads[3].Search(P);
               }

           }
          else
             return points_in&gt;0?1:0;
       };

//******************CQUADTREE***************************************************
class CQuadTree
{
   private:
      unsigned int Width;
      CQuad Quad;

      CQuad BuildTree(const unsigned int &amp;X, const unsigned int &amp;Y, const unsigned int &amp;W);
      DrawTree(const CQuad &amp;Quad, const unsigned int &amp;W);

   public:
      CQuadTree();
      ~CQuadTree();

      DrawTree() {Form1-&gt;Image1-&gt;Picture = NULL; DrawTree(Quad, Width);};
      Init(const unsigned int &amp;X);
      InsertQuad(const CPunkt &amp;P) {if (!Quad.Search(P)) Quad.InsertQuad(P);};
      DeleteQuad(const CPunkt &amp;P) {if (Quad.Search(P)) Quad.DeleteQuad(P);};
      bool Search(const CPunkt &amp;P) {return Quad.Search(P);};
};
   CQuadTree::CQuadTree()
    {};
   CQuadTree::~CQuadTree()
    {};

   CQuad CQuadTree::BuildTree(const unsigned int &amp;X, const unsigned int &amp;Y, const unsigned int &amp;W)
    {
       CQuad new_Quad;
       new_Quad.points_in = 0;

       new_Quad.Position      = CPunkt(X - W/2, Y - W/2);
       new_Quad.ChildrenQuads = NULL;

       if (W &gt; 0)
        {
           new_Quad.ChildrenQuads    = new CQuad[4];

           new_Quad.ChildrenQuads[0] = BuildTree(X - W/2, Y - W/2, W/2);
           new_Quad.ChildrenQuads[1] = BuildTree(X      , Y - W/2, W/2);
           new_Quad.ChildrenQuads[2] = BuildTree(X - W/2, Y,       W/2);
           new_Quad.ChildrenQuads[3] = BuildTree(X,       Y,       W/2);
        }
     return new_Quad;
    };

   CQuadTree::DrawTree(const CQuad &amp;Quad, const unsigned int &amp;W)
    {
       if (Quad.ChildrenQuads &amp;&amp; Quad.points_in &gt; 0)
        {
           Form1-&gt;Image1-&gt;Canvas-&gt;MoveTo(Quad.Position.x - W/2, Quad.Position.y - W/2);
           Form1-&gt;Image1-&gt;Canvas-&gt;LineTo(Quad.Position.x + W/2, Quad.Position.y - W/2);
           Form1-&gt;Image1-&gt;Canvas-&gt;LineTo(Quad.Position.x + W/2, Quad.Position.y + W/2);
           Form1-&gt;Image1-&gt;Canvas-&gt;LineTo(Quad.Position.x - W/2, Quad.Position.y + W/2);
           Form1-&gt;Image1-&gt;Canvas-&gt;LineTo(Quad.Position.x - W/2, Quad.Position.y - W/2);

           Form1-&gt;Image1-&gt;Canvas-&gt;MoveTo(Quad.Position.x, Quad.Position.y - W/2);
           Form1-&gt;Image1-&gt;Canvas-&gt;LineTo(Quad.Position.x, Quad.Position.y + W/2);

           Form1-&gt;Image1-&gt;Canvas-&gt;MoveTo(Quad.Position.x - W/2, Quad.Position.y);
           Form1-&gt;Image1-&gt;Canvas-&gt;LineTo(Quad.Position.x + W/2, Quad.Position.y);

           DrawTree(Quad.ChildrenQuads[0], W/2);
           DrawTree(Quad.ChildrenQuads[1], W/2);
           DrawTree(Quad.ChildrenQuads[2], W/2);
           DrawTree(Quad.ChildrenQuads[3], W/2);
        }
    };

   CQuadTree::Init(const unsigned int &amp;X)
    {
       Width = X;
       Quad  = BuildTree(X, X, X);
    };

//---------------------------------------------------------------------------
//---------------------------------------------------------------------------
//---------------------------------------------------------------------------
CQuadTree Welt;
void __fastcall TForm1::FormKeyPress(TObject *Sender, char &amp;Key)
{
 if (Key == 13)
    {
       Welt.Init(Image1-&gt;Width);
    }
 if (Key == 32)
    {

    }
}
//---------------------------------------------------------------------------
//---------------------------------------------------------------------------
//---------------------------------------------------------------------------

int Maus = 0;
void __fastcall TForm1::Image1MouseDown(TObject *Sender,
      TMouseButton Button, TShiftState Shift, int X, int Y)
{
   Maus = (Button == mbLeft)?1:2;
   Image1MouseMove(Sender, Shift, X, Y);
}
//---------------------------------------------------------------------------
void __fastcall TForm1::Image1MouseUp(TObject *Sender, TMouseButton Button,
      TShiftState Shift, int X, int Y)
{
   Maus = 0;
}
//---------------------------------------------------------------------------
void __fastcall TForm1::Image1MouseMove(TObject *Sender, TShiftState Shift,
      int X, int Y)
{
   if (X &lt; 0) X=0;
   if (X &gt;= Image1-&gt;Width) X = Image1-&gt;Width-1;
   if (Y &lt; 0) Y=0;
   if (Y &gt;= Image1-&gt;Height) Y = Image1-&gt;Height-1;

   Form1-&gt;Caption = IntToStr(X) + &quot;:&quot; + IntToStr(Y) + (Welt.Search(CPunkt(X, Y))?&quot; - belegt&quot;:&quot; - frei&quot;);

   if (Maus == 1)
      {
         Welt.InsertQuad(CPunkt(X, Y));
         Welt.DrawTree();
      }

   if (Maus == 2)
      {
         Welt.DeleteQuad(CPunkt(X, Y));
         Welt.DrawTree();
      }
}
//---------------------------------------------------------------------------
</code></pre>
<p>Wenn man nun noch einen Wegfindungsalgorithmus über die Mittelpunkte (=Position) eines jeden Vierecks laufen lässt, so müsste man einen recht kurzen Weg bekommen.</p>
<p><a class="plugin-mentions-user plugin-mentions-a" href="https://www.c-plusplus.net/forum/uid/324">@Jester</a> wie du richtig gesagt hast ... die Anzahl der Nachbarn hängt von dem Winkel ab, denn man erlaubt zu gehen</p>
<p>Grüße</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1215637</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1215637</guid><dc:creator><![CDATA[T.Jay03]]></dc:creator><pubDate>Tue, 23 Jan 2007 22:50:13 GMT</pubDate></item><item><title><![CDATA[Reply to Quad - Tree Literatur?? on Tue, 23 Jan 2007 23:36:02 GMT]]></title><description><![CDATA[<p>T.Jay03 schrieb:</p>
<blockquote>
<p>Ich möchte das für eine Wegfindung verwenden.</p>
<p>Grüße</p>
</blockquote>
<p>fuer wegfindung benutzt man eher selten quadtrees, quadtrees werden eher dazu benutzt um im 2d-raum schnell ein query zu machen, so wie binaertrees in 1D (z.b. std::map) oder octrees in 3d.</p>
<p>fuer wegfindung eignen sich grids besser, weil du dann direct auf einen der 4 nachbaren zugreifen kannst. muestest du das durch einen quadtree machen, wuerdest du O(log n) and zeit brauchen statt O(1) wie beim Grid, und das ist eines der zeitkritischen dinge.</p>
<p>fuer einen guten algorithmus kannst du dir A* anschauen, ist z.b. bei wikipedia eklaert.</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1215644</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1215644</guid><dc:creator><![CDATA[rapso]]></dc:creator><pubDate>Tue, 23 Jan 2007 23:36:02 GMT</pubDate></item><item><title><![CDATA[Reply to Quad - Tree Literatur?? on Wed, 24 Jan 2007 15:18:19 GMT]]></title><description><![CDATA[<p>Kannst du mir bitte das mit den grids genauer erklären oder mir Links mitteilen, wo sowas erklärt wird. Vorzugsweise auf Deutsch.</p>
<p>Danke!</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1216096</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1216096</guid><dc:creator><![CDATA[T.Jay03]]></dc:creator><pubDate>Wed, 24 Jan 2007 15:18:19 GMT</pubDate></item><item><title><![CDATA[Reply to Quad - Tree Literatur?? on Wed, 24 Jan 2007 18:40:30 GMT]]></title><description><![CDATA[<p>rapso schrieb:</p>
<blockquote>
<p>muestest du das durch einen quadtree machen, wuerdest du O(log n) and zeit brauchen statt O(1) wie beim Grid</p>
</blockquote>
<p>Man kann den Quadtree ohne weiteres so implementieren, dass die Nachbarn in O(1) gefunden werden können.</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1216270</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1216270</guid><dc:creator><![CDATA[Jester]]></dc:creator><pubDate>Wed, 24 Jan 2007 18:40:30 GMT</pubDate></item><item><title><![CDATA[Reply to Quad - Tree Literatur?? on Wed, 24 Jan 2007 19:16:53 GMT]]></title><description><![CDATA[<p><a class="plugin-mentions-user plugin-mentions-a" href="https://www.c-plusplus.net/forum/uid/324">@Jester</a></p>
<p>Genau vor dem Problem stehe ich gerade.</p>
<p>Ich weiß nicht, wie ich feststellen kann, wieviele Nachbarn ein Quadrat hat.</p>
<p>Rein theoretisch könnten es doch unendlich viele sein, je feiner die Rasterung ist (Baumtiefe).</p>
<p>Oder sehe ich das flasch?</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1216302</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1216302</guid><dc:creator><![CDATA[T.jay03]]></dc:creator><pubDate>Wed, 24 Jan 2007 19:16:53 GMT</pubDate></item><item><title><![CDATA[Reply to Quad - Tree Literatur?? on Wed, 24 Jan 2007 20:43:16 GMT]]></title><description><![CDATA[<p>T.jay03: Du hast immer noch keine genaueren Angaben zur Problemstellung gemacht. Soweit ich es verstanden habe würde ich wie rapso einfach den A* empfehlen. Ich verstehe nicht wirklich wozu Du nen Quadtree haben willst.</p>
<p>Mein Hinweis war eher theoretischer Natur und hat nichts mit Deiner konkreten Aufgabenstellung (die ich ja nicht kenne) zu tun.</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1216403</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1216403</guid><dc:creator><![CDATA[Jester]]></dc:creator><pubDate>Wed, 24 Jan 2007 20:43:16 GMT</pubDate></item><item><title><![CDATA[Reply to Quad - Tree Literatur?? on Wed, 24 Jan 2007 21:18:33 GMT]]></title><description><![CDATA[<p>Man kann den A* auf ein gerastertes Gitter anwenden. Hierbei werden jedoch nur horizontale/vertikale/diagonale Zick-Zack Wege gefunden. Der 2. Nachteil ist, die extrem lange Rechenzeit. Durch einen QuadTree kann man dieses Feld ebenso Rastern und alle Bereiche indenen kein Hindernis ist, zu einem großen Feld zusammenfassen. Dies sollte doch die Rechenzeit reduzieren. Weiterhin erhoffe ich mir, dass zwar immernoch Zick-Zack Wege entstehen, jedoch diese natürlicher aussehen.</p>
<p>Jetzt habe ich 2 Ansätze. Ich gebe dem A* alle Mittelpunkte der im QuadTree befindlichen Quadrate. Nun muss ich allerdings Wissen, wieviele und welche Nachbarn jedes Quadrat hat. Dies könnte man vorberecnen und zusätzlich Zeit sparen.<br />
Der 2. Ansatz: Ich kombiniere diesen QuadTree mit dem Sichtbarkeitsalgorithmus, was aber wie ich denke zu komplex werden würde.</p>
<p><em><em>Also nochmal ganz konkret:<br />
Wie kann ich prüfen, welche und wieviele Nachbar Quadrate jedes Quadrat hat, damit ich dann z.B. den A</em> damit füttern kann.</em>*</p>
<p>Zwischen zwei benachbarten Quadraten muss immer eine direkte Verbindung existieren.</p>
<p>Ich hoffe das war verständlich <img
      src="https://www.c-plusplus.net/forum/plugins/nodebb-plugin-emoji/emoji/emoji-one/1f615.png?v=ab1pehoraso"
      class="not-responsive emoji emoji-emoji-one emoji--confused_face"
      title=":confused:"
      alt="😕"
    /></p>
]]></description><link>https://www.c-plusplus.net/forum/post/1216437</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1216437</guid><dc:creator><![CDATA[T.jay03]]></dc:creator><pubDate>Wed, 24 Jan 2007 21:18:33 GMT</pubDate></item><item><title><![CDATA[Reply to Quad - Tree Literatur?? on Wed, 24 Jan 2007 21:21:43 GMT]]></title><description><![CDATA[<p>Jester schrieb:</p>
<blockquote>
<p>rapso schrieb:</p>
<blockquote>
<p>muestest du das durch einen quadtree machen, wuerdest du O(log n) and zeit brauchen statt O(1) wie beim Grid</p>
</blockquote>
<p>Man kann den Quadtree ohne weiteres so implementieren, dass die Nachbarn in O(1) gefunden werden können.</p>
</blockquote>
<p>ja, fuer den sonderfall das die unterste eben ein grid ist. das bringt's natuerlich dann einen quadtree drueber zu packen.</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1216444</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1216444</guid><dc:creator><![CDATA[rapso]]></dc:creator><pubDate>Wed, 24 Jan 2007 21:21:43 GMT</pubDate></item><item><title><![CDATA[Reply to Quad - Tree Literatur?? on Wed, 24 Jan 2007 22:13:17 GMT]]></title><description><![CDATA[<p>rapso schrieb:</p>
<blockquote>
<p>ja, fuer den sonderfall das die unterste eben ein grid ist. das bringt's natuerlich dann einen quadtree drueber zu packen.</p>
</blockquote>
<p>nein und ja.</p>
<p>Auch wenn in dem Grid einige Punkte fehlen geht das noch prima.</p>
<p>Den Quadtree drüberzupacken kann Sinn machen, wenn man erst ne grobe und anschließend ne feine Suche macht. Beispielsweise könnte man in nem Vorverarbeitungsschritt einige Quads gleich ganz rauswerfen für bestimmte Suchanfragen.</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1216484</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1216484</guid><dc:creator><![CDATA[Jester]]></dc:creator><pubDate>Wed, 24 Jan 2007 22:13:17 GMT</pubDate></item><item><title><![CDATA[Reply to Quad - Tree Literatur?? on Thu, 25 Jan 2007 10:19:29 GMT]]></title><description><![CDATA[<p>Jester schrieb:</p>
<blockquote>
<p>Auch wenn in dem Grid einige Punkte fehlen geht das noch prima.</p>
</blockquote>
<p>sobald punkte fehlen, musst du ueber die node darueber nehmen, oder noch eine darueber, aber um ueberhaupt festzustellen wie weit du runtergehen kannst bis keine nodes mehr da sind muesstest du von der root ausgehen.</p>
<p>somit hast du O(log n) sobald kein prefektes grid drunter liegt.</p>
<blockquote>
<p>Den Quadtree drüberzupacken kann Sinn machen, wenn man erst ne grobe und anschließend ne feine Suche macht. Beispielsweise könnte man in nem Vorverarbeitungsschritt einige Quads gleich ganz rauswerfen für bestimmte Suchanfragen.</p>
</blockquote>
<p>Dafuer benutzt man multi-resolution-grids (ist glaub ich in irgendeinem gem programming games zu beschrieben). hat viel weniger verwaltungsaufwand als ein tree.</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1216722</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1216722</guid><dc:creator><![CDATA[rapso]]></dc:creator><pubDate>Thu, 25 Jan 2007 10:19:29 GMT</pubDate></item><item><title><![CDATA[Reply to Quad - Tree Literatur?? on Fri, 26 Jan 2007 10:03:43 GMT]]></title><description><![CDATA[<p>rapso schrieb:</p>
<blockquote>
<p>Jester schrieb:</p>
<blockquote>
<p>Auch wenn in dem Grid einige Punkte fehlen geht das noch prima.</p>
</blockquote>
<p>sobald punkte fehlen, musst du ueber die node darueber nehmen, oder noch eine darueber, aber um ueberhaupt festzustellen wie weit du runtergehen kannst bis keine nodes mehr da sind muesstest du von der root ausgehen.</p>
<p>somit hast du O(log n) sobald kein prefektes grid drunter liegt.</p>
</blockquote>
<p>Ich erklär's einfach mal am 1D-Beispiel:</p>
<p>Du hast eine gerasterte Linie und einige Punkte fehlen. Die sortierste in nen (balancierten) binären Baum ein. Nun willste den Nachbarn eines gegebenen Punktes finden. Das kostet O(log n).</p>
<p>Führst Du aber gleichzeitig die Blätter geordnet in einer doppelt verketten Liste mit (das kann man beim Einfügen/Löschen miterledigen), dann kannste die Nachbarn in O(1) finden, indem Du Deiner Liste einfach nach links/rechts folgst.</p>
<p>Allerdings ist natürlich klar, dass im 2D-Fall logarithmisch viele Nachbarn haben kann. Die alle zu betrachten braucht also Zeit. Finden geht aber trotzdem schnell.</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1217422</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1217422</guid><dc:creator><![CDATA[Jester]]></dc:creator><pubDate>Fri, 26 Jan 2007 10:03:43 GMT</pubDate></item><item><title><![CDATA[Reply to Quad - Tree Literatur?? on Fri, 26 Jan 2007 13:10:04 GMT]]></title><description><![CDATA[<p>Jester schrieb:</p>
<blockquote>
<p>Führst Du aber gleichzeitig die Blätter geordnet in einer doppelt verketten Liste mit (das kann man beim Einfügen/Löschen miterledigen), dann kannste die Nachbarn in O(1) finden, indem Du Deiner Liste einfach nach links/rechts folgst.</p>
</blockquote>
<p>Wie ich schon sagte,</p>
<p>wenn die ganze unterste ebene vorhanden ist, hast du nicht mehr als ein sehr aufwendiges (multiresolution) grid.</p>
<p>wenn die unterste ebene nicht komplett vorhanden ist, kannst du nicht einfach einen nachbarn nehmen, da eine node dann mehrere nachbarn an einer seite haben kann</p>
<pre><code>+---+++-+
|   +++ |
|   +++-+
|   | | |
+---+-+-+
</code></pre>
<p>wie findest du nun von der linken Node ausgehend in O(1) den richtigen rechten nachbarn?</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1217573</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1217573</guid><dc:creator><![CDATA[rapso@work]]></dc:creator><pubDate>Fri, 26 Jan 2007 13:10:04 GMT</pubDate></item></channel></rss>