Von Zeit zu Zeit muss ich ein Kartenbuch erstellen, um Sehenswürdigkeiten zu zeigen. Erster Schritt zum Erstellen von Seiten mit regulären Maschen:
Die Lösung gefällt mir nicht, weil a) einige Seiten mit einzelnen Punkten (z. B. Seite 25) am Rand sitzen und b) zu viele Seiten.
Das erste Problem lässt sich einfach mit Code beheben. - Verschieben Sie das Rechteck der Seitenausdehnung in die Mitte der relevanten Punktausdehnung:
Ich mag es immer noch nicht, es sieht sehr voll aus, weil die Anzahl der Seiten gleich bleibt. Denken Sie daran, dass es sich bei allen um tatsächliche A3-Papierseiten in mehreren Kopien des Berichts handelt!
Also habe ich einen Code gekocht, der die Anzahl der Seiten reduziert. In diesem Beispiel von 45 bis 34.
Ich bin mir nicht sicher, ob dies das beste Ergebnis ist, das erzielt werden kann.
Was ist die beste Strategie (Pseudocode, Veröffentlichung, Python-Bibliothek), um durch Punkte zu mischen, um die Anzahl der Rechtecke mit der angegebenen Größe zu minimieren und alle Punkte zu erfassen? Sicherlich hat es jemand in der Spieltheorie, der Militärkunst oder der Fischereiindustrie entdeckt
Dies ist eine Aktualisierung der ursprünglichen Frage:
Dies zeigt den tatsächlichen Umfang und die erforderliche Seitengröße:
Näherer Zoom mit 10 von 164 Seiten:
Die Rechteckgröße kann sich ändern, sobald sie innerhalb der Grenzen bleibt, dh kleiner ist in Ordnung.
Antworten:
Dies ist nicht die Antwort, ich dachte nur, ich poste eine Python-Lösung für diejenigen, die interessiert sind:
hat es kürzlich für die Umfrageplanung angewendet:
AKTUALISIEREN:
Es scheint, dass für einige Muster, die sich zuerst mit Streupunkten befassen, der richtige Weg ist. Ich habe 'Convex Hull'-Peeling verwendet, um sie zu identifizieren, Idee von Whuber, kann keinen Beitrag finden, sorry.
quelle
Dies sieht aus wie eine geometrische Version des Problems der maximalen Abdeckung, die eng mit dem Problem der festgelegten Abdeckung zusammenhängt , und diese beiden sind NP-vollständig.
Um es zu lösen, könnte man eine Annäherung verwenden. Ich würde den folgenden Algorithmus ausprobieren und er scheint perfekt zu funktionieren. Obwohl wir aufgrund der Komplexität des Problems nicht die beste Antwort finden können.
Eine Implementierung dieses Algorithmus nur für Circle finden Sie hier: http://jsfiddle.net/nwvao72r/3/
quelle