Laden...

Algo: Maximale größe x Felder berechnen

Letzter Beitrag vor 21 Jahren 4 Posts 3.713 Views
Algo: Maximale größe x Felder berechnen

Hallo!

Ich habe gelesen das jemand für ein Memory-Spiel einen Algo brauchte der ihm die maximale größe einer Karte berechnet, dabei gelten folgende Bedingung:

Habe:
Fenster:
x = Breite
y = Höhe
Karten:
z = Anzahl

Suche:
Karte:
x = Breite
y = Höhe, diese muss doppelt so hoch wie die Breite (x) sein!

Hier wie man es berechnet, habe den Algo heute während einer Vorlesung aufgschrieben:

Fensterfläche = A
Quadratseite = a
y = Höhe
x = Breite

1. Fenster.x * Fenster.y = A
2. Wurzel(A / z) = a
3. a * 1/3 = help
4. a - help = Karte.x
5. a + help = Karte.y

Hier ein Test:
Gegeben x = 600 y = 800 z = 20

  1. 600x800 = 480000
  2. sqr(480000/20) ~= 154
  3. 154/3 ~= 51
  4. 154+51 = 205
  5. 154-51 = 103

Man müsste ggf. anders, am Besten denke ich am Ende runden.
Ich denke mal diesen Algo kann man ganz gut gebrauchen. Natürlich ist dabei nur die Berechnung drin das setzen müst ihr schon selbst machen 😉
Ich habe es in 5 Schritte gegliedert nur zur besseren Übersicht.

Code-Hacker

600/103 = 5
800/205 = 3

5*3 = 15 != 20 -> Fehler

Mathematisch:

A Kartenbreite
a Fensterbreite
b Fensterhöhe

Gleichung: floor(b/(2*A)) * floor(a/A) ≥ z

Die Vereinfachung (b/(2A)) * (a/A) = z
fürht zu A^2 = a
b/(2*z)

damit kommt man bei deinem Beispiel auf ~ 109, also (abgesehen vom Runden) auf das selbe (~103) ... das Problem ist nur, dass die Vereinfachung zu stark ist und den obigen Fehler (15 statt den geforderen 20) verursacht ...

Original von cdr

600/103 = 5
800/205 = 3

5*3 = 15 != 20 -> Fehler

Das beispiel ist von jemand anderem. Ich habe es nur kopiert. Bei meiner Berechnung klappt es einigermaßen (runde anders, am Ende), aber auch nicht perfekt, habe diese Probe vergessen. Werde ihn nochmal überarbeiten.

Außerdem sind da Fehler in meinem letzten Beitrag. Da stimmt einiges nicht. Da sind Sachen verdreht, weil ich die geändert habe. Die sind auch bei dir deswegen. Ich überarbeite das nochmal.

Code-Hacker

Also die Berechnung ist zugegeben nicht perfekt, aber das werde ich mir nochmal ansehen um es so genau wie möglich zu bekommen, hier jetzt erst einmal die korrigierte Form:

Algo nochmal:


Fensterfläche = A 
Quadratseite = a 
y = Höhe 
x = Breite 

1. Fenster.x * Fenster.y = A 
2. Wurzel(A / z) = a 
3. a * 1/3 = help 
4. a - help = Karte.x 
5. a + help = Karte.y

Hier der Test, richtig(!):
Gegeben y = 600 x = 800 z = 20

  1. 600x800 = 480000
  2. sqr(480000/20) ~= 155
  3. 155/3 ~= 5,7
  4. 155-51,7 = 103,3
  5. 155+51,7 = 206,7

Jetzt ist es auch richtiger:
600/206,7 ~= 2,9
800/103,3 ~= 7,7
2,9*7,7 = 22,03

Allerdings noch nicht ganz so wie es soll, allerdings für 5 minuten überlegen und rechnen relativ ok (mehr Zeit hatte ich in der Vorlesung nicht und war der einzige von 5 der überhaupt eine Lösung hatte).

Code-Hacker