Algorithmus gesucht: Automatisches Sprung zum "Most Crowded" area



  • Ich habe ein Control welches mit vielen anderen Controls befüllt sind.
    Diese sind aber über ein sehr großes Areal verteilt. So das ich scrollen kann.
    D.H. es gibt bereiche da sehe ich sehr wenige Controls im aktuellen Viewport. Manchmal ggf gar keine. Aber es gibt sicherlich auch Bereich wo sehr viele Controls sind. Und genau zu so einen möchte ich nun automatisch hinscrollen. Ich möchte herausfinden an welche Stelle ich scrollen muss um die meisten Controls gleichzeitig zu sehen. Ich denke da gibts sicherlich schon sinnvolle Ansätze aber ich weiß nicht wonach ich da am besten Suchen soll. Mir reichen also ein paar Googlebare Stichworte, oder ein paar grundlegende Ideen wie ich das ganze möglichst Effektiv gestalten kann.



  • Da würde ich das Gebiet in Quadrate einteilen, für jedes Quadrat die Controls, die es beinhaltet, ermitteln; dann das Quadrat mit den meisten Controls in kleinere Quadrate unterteilen, wieder die Controls zählen; ... Die Genauigkeit und Laufzeit ist dann abhängig davon, wie die Größe der Quadrate gewählt wird.



  • Ich nehme an, die controls sind alle rechteckig? Als erstes wechelst du den Parameterbereich: angenommen du kannst horizontal und vertikal von 0 bis 1 scrollen. Dann nennen wir diese Werte s und t. In diesen neuen Koordinaten gibt es jetzt für jedes control C einen bereich R_C in dem es sichtbar ist. Dieser ist ein Rechteck. Das einzige was Du jetzt noch machen musst, ist einen (s,t)-Punkt finden, der in möglichst vielen Bereichen R_C enthalten ist. Das geht zum Beispiel mit einem Sweepline-Verfahren. Das Verfahren ist exakt und die Laufzeit ist O(n log n).



  • Was sind Controls? 2D? 3D? Scrollen? In einer Liste? Was hat das Problem ueberhaupt mit Controls zu tun? Ich liebe solche Fragestellungen ...



  • @Jester:
    Dank dir. Das hat mir sehr weiter geholfen. Genau sowas hatte ich mir als recht einfache Lösung vorgestellt. Das ich da nicht selber drauf gekommen bin...



  • Oder Algorithmus DBSCAN und dann zu einem Repräsentanten des größten Clusters.


Anmelden zum Antworten