Frage

Ok hier ist, was ich versuche zu erreichen. Sprich: Ich habe 100 Artikel. Ich möchte ein „Gitter“ (jedes Element eines x besteht, Y-Punkt) zu schaffen. Ich möchte das Gitter so nah wie möglich an einen Platz sein. Gibt es irgendeine Art von Mathematik die Rasterweite zu bestimmen und Gitterhöhe i durch nur eine einzige Zahl bräuchten? (Von Rasterweite und -höhe ich die Anzahl der x Elemente bedeuten, und die Anzahl der Y Elemente)

Nun, da ich darüber nachdenke wäre es sinnvoll sein, um die Quadratwurzel der Zahl zu nehmen, sagt Vari = sqrt (45), entfernen Sie die Nachkommastelle von Vari ... X = Vari ... dann würde Y Vari sein 1?

War es hilfreich?

Lösung

Die Quadratwurzel ist genau das, was Sie brauchen.

N
x=floor(sqrt(N))
y=raise(N/x)

Dies ist das minimale Rechteck, das mehr als N Orte und ist am nächsten an einen Platz.

Nun ... wenn Sie ein Rechteck finden, die genau N Orte und sind am nächsten an einen Platz ..., das ein anderes Problem.

Sie benötigen einen Faktor von N, x zu finden, das am nächsten

ist

Sie haben durch die Faktoren von N laufen und die Nähe zu sqrt (N) zu finden. Dann ist das Rechteck x von N / X, beiden ganzen Zahlen sind.

Andere Tipps

Es gibt einige Probleme hier zu berücksichtigen. Wenn Sie Ihr Raster möglichst quadratisch sein wollen, für viele Ns wird es leere Zellen in ihm. Ein einfaches Beispiel ist N = 10. Sie können ein 3x4 Raster für sie schaffen, aber es wird zwei leere Zellen haben. Ein 2x5 Gitter, auf der anderen Seite, hat keine leeren Zellen. Einige Ns (Primzahlen) werden immer leere Zellen im Gitter.

Aber wenn Sie nur den Platz wollen und kümmern sich nicht um leere Felder dann in der Regel ja, sollten Sie die Quadratwurzel nehmen. Sagen Sie Ihre Zahl ist N. Dann nehmen R = int(sqrt(N)). Als nächstes tut, um den Quotienten eine Ganzzahl-Division N/R nehmen und 1 bis hinzufügen. Dies ist C. Das Gitter ist RxC. Beachten Sie, dass, wenn N ein Quadrat (wie 100), dies ist ein Sonderfall ist also nicht 1 zu dem Quotienten hinzuzufügen.

Beispiel:

N = 40
R = int(sqrt(N)) = 6
C = int(40 / 6) + 1 = 7
grid is 6x7

Ich war auf der Suche dieses Problem auch für ein Gitter in HTML / CSS zu lösen, die festen Abmessungen hatten und wo N Artikel passen würden. Ich landete dafür mein eigenes Skript erstellen in Javascript.

Wenn Sie in der Methode und Mathematik interessieren ich verwenden, können Sie einen href lesen <= "http://machinesaredigging.com/2013/05/21/jgridder-how-to-fit-elements-in- a-sized-grid /“rel = "nofollow"> http://machinesaredigging.com/2013/05/21/jgridder-how-to-fit-elements-in-a-sized-grid/ , es ist alles dort dokumentiert. Früher habe ich Rekursion und es funktioniert wirklich gut, können Sie das gleiche Verfahren für die eigene Sprache verwenden. Hoffe, das hilft.

erkundete ich Eli Antwort und fand etwas Ich mag würde hinweisen. Aus Gründen der Allgemeinheit, ein mit 1 bis C hinzufügen muß nur dann, wenn R x C (C = int (N / R)) ist nicht genau N. So enthält die Ausnahme beiden Zahlen mit Quadratwurzel und Zahlen, die genau das Produkt sind zwei ganze Zahlen sind.

Zum Beispiel:

N = 12
R = 3
C = 4 (int(N/R))

Hope es hilft.

Lizenziert unter: CC-BY-SA mit Zuschreibung
Nicht verbunden mit StackOverflow
scroll top