Alt 21.05.2006, 11:52:53   #1 (permalink)
BartTheDevil89
Devilution Media
Benutzerbild von BartTheDevil89

ID: 87739
Lose senden

BartTheDevil89 eine Nachricht über ICQ schicken
Reg: 02.05.2006
Beiträge: 3.963
Standard [PHP] Komplizierte Belegung eines Planquadrates mit Punkten?

Hallo,

diesmal ist meine Aufgabe etwas komplex. Ich habe ein System mit x und y-Werten. Diese ordnen sich nach folgendem System an:

http://www.myimg.de/?img=island3ff.jpg

X ist dabei immer der obere und Y immer der Wert nach unten. Also wären diese Inseln in der oberen Zeile x=3 und y=1 und die ganz hinten wäre dann x=12 und y=1! Das ganze System geht natürlich nach unten weiter. Also es ist ein komplexes System, was nach rechts und nach unten erweitert wird.

Wichtig ist, dass die Punkte eigentlich nie nebeneinander liegen sollten.

Jetzt muss ich diese blauen Punkte bestimmen. Es sollen also diese blauen Punkte erstellt werden. Jeweils x und y-Wert muss einzeln am Ende rauskommen.

Gibt es eine Möglichkeit das zu automatisieren? Ich gebe beispielsweise den minimalen x , maximalen x und minimalen y , maximalen y-Wert an und das System errechnet mir dann ein Anzahl an x und y-Werten für diesen Bereich?

Wenn dieses Problem von jemandem gelöst werden würde, könnte auch etwas Geld für die Lösung bei rauskommen. Eventuell auch in anderen sprachen als php, aber ich brauche irgendwie ne Lösung!
Rabatt-Gutscheine-Kostenlos.de - Rabattgutscheine für diverse Onlineshops. Immer kostenlos..

Grillmatten - Grillmatte.de zeigt dir alle Infos
BartTheDevil89 ist offline   Mit Zitat antworten
Alt 21.05.2006, 12:07:53   #2 (permalink)
theHacker PREMIUM-User
sieht vor lauter Ads
den Content nicht mehr
Benutzerbild von theHacker

ID: 69505
Lose senden

theHacker eine Nachricht über ICQ schicken theHacker eine Nachricht über Skype™ schicken
Reg: 20.04.2006
Beiträge: 22.684
Standard

Ich versteh nicht, was an dem System kompliziert is: Sind halt 2 for-Schleifen

Du willst einfach nur Punkte erstellen, die nicht nebeneinander liegen ? Dann ist wohl das einfachste Muster das hier:
x∊{n|2n+1; nN0} ∧ y∊{n|2n+1; nN0}

In PHP:
PHP-Code:
1:
2:
3:
4:
$max_y=1000$max_x=1000;
for(
$y=1;$y<$max_y;$y+=2)
  for(
$x=1;$x<$max_x;$x+=2)
    echo 
"($x | $y)\n"
NEU theHacker.blog NEU
– It's just a glitch in the Matrix –

OpenIsles - das freie Insel-Aufbauspiel | www.theHacker.ws v3 | WhatPulse-Team
theHacker ist offline   Mit Zitat antworten
Alt 21.05.2006, 12:12:35   #3 (permalink)
BartTheDevil89
Devilution Media
Benutzerbild von BartTheDevil89

ID: 87739
Lose senden

BartTheDevil89 eine Nachricht über ICQ schicken
Reg: 02.05.2006
Beiträge: 3.963
Standard

Zitat:
Zitat von theHacker
Ich versteh nicht, was an dem System kompliziert is: Sind halt 2 for-Schleifen

Du willst einfach nur Punkte erstellen, die nicht nebeneinander liegen ? Dann ist wohl das einfachste Muster das hier:
x∊{n|2n+1; nN0} ∧ y∊{n|2n+1; nN0}

In PHP:
PHP-Code:
1:
2:
3:
4:
$max_y=1000$max_x=1000;
for(
$y=1;$y<$max_y;$y+=2)
  for(
$x=1;$x<$max_x;$x+=2)
    echo 
"($x | $y)\n"
Naja, es soll nicht symetrisch sein. Er sollen unterschiedlich viele Freiräume zwischen den Punkten sein.

Außerdem müsste ich noch einen minimalen wert angeben können. Also wenn ich beispielsweise schon von x 1 bis x 12 schon welche habe und dann ab x 12 erst anfangen will.
Rabatt-Gutscheine-Kostenlos.de - Rabattgutscheine für diverse Onlineshops. Immer kostenlos..

Grillmatten - Grillmatte.de zeigt dir alle Infos
BartTheDevil89 ist offline Threadstarter   Mit Zitat antworten
Alt 21.05.2006, 12:21:51   #4 (permalink)
theHacker PREMIUM-User
sieht vor lauter Ads
den Content nicht mehr
Benutzerbild von theHacker

ID: 69505
Lose senden

theHacker eine Nachricht über ICQ schicken theHacker eine Nachricht über Skype™ schicken
Reg: 20.04.2006
Beiträge: 22.684
Standard

Zitat:
Zitat von BartTheDevil89
Außerdem müsste ich noch einen minimalen wert angeben können. Also wenn ich beispielsweise schon von x 1 bis x 12 schon welche habe und dann ab x 12 erst anfangen will.
Wie meinst du das "x n" ?
Zitat:
Zitat von BartTheDevil89
Naja, es soll nicht symetrisch sein. Er sollen unterschiedlich viele Freiräume zwischen den Punkten sein.
Mach ne Schleife, die per Zufall Koordinaten erzeugt.
Überprüfe, ob der Punkt den nötigen Freiraum (im Bereich x-s<x<x+sy-s<y<y+s) hat und trage ihn ein oder nicht.

PHP-Code:
1:
2:
3:
4:
5:
6:
7:
8:
9:
for($i=0;$i<max_points;$i++)
{
  do
  {
    
$x=rand()%1000;
    
$y=rand()%1000;
  } while(!
check_point($x,$y));
  
add_point($x,$y);

NEU theHacker.blog NEU
– It's just a glitch in the Matrix –

OpenIsles - das freie Insel-Aufbauspiel | www.theHacker.ws v3 | WhatPulse-Team
theHacker ist offline   Mit Zitat antworten
Alt 21.05.2006, 12:29:42   #5 (permalink)
TAKAGAMES
Browsergamer
Benutzerbild von TAKAGAMES

ID: 103338
Lose senden

TAKAGAMES eine Nachricht über Skype™ schicken
Reg: 02.05.2006
Beiträge: 630
Standard

Lösungsansatz von mir haste im ICQ,

@Hacker: iss bissl komplizierter
 
TAKAGAMES ist offline   Mit Zitat antworten
Alt 21.05.2006, 12:33:07   #6 (permalink)
BartTheDevil89
Devilution Media
Benutzerbild von BartTheDevil89

ID: 87739
Lose senden

BartTheDevil89 eine Nachricht über ICQ schicken
Reg: 02.05.2006
Beiträge: 3.963
Standard

Zitat:
Zitat von theHacker
Wie meinst du das "x n" ?
Mach ne Schleife, die per Zufall Koordinaten erzeugt.
Überprüfe, ob der Punkt den nötigen Freiraum (im Bereich x-s<x<x+sy-s<y<y+s) hat und trage ihn ein oder nicht.

PHP-Code:
1:
2:
3:
4:
5:
6:
7:
8:
9:
for($i=0;$i<max_points;$i++)
{
  do
  {
    
$x=rand()%1000;
    
$y=rand()%1000;
  } while(!
check_point($x,$y));
  
add_point($x,$y);

Bei der letzten Version kommt leider garnichts raus. Aber die Idee scheint gut zu sein. Ich geh also jede einzelne x-Reihe ab und füge dort in einem zufälligen Abstand diese Punkte ein. Durch diese zufälligen Abstände wird das ganze auch nicht symetrisch, sondern eben schön unterschiedlich.

Das mit x1 und so meine ich, dass $i nichnur <max_points, sondern auch >min_points sein sollte.
Rabatt-Gutscheine-Kostenlos.de - Rabattgutscheine für diverse Onlineshops. Immer kostenlos..

Grillmatten - Grillmatte.de zeigt dir alle Infos
BartTheDevil89 ist offline Threadstarter   Mit Zitat antworten
Alt 21.05.2006, 12:58:16   #7 (permalink)
theHacker PREMIUM-User
sieht vor lauter Ads
den Content nicht mehr
Benutzerbild von theHacker

ID: 69505
Lose senden

theHacker eine Nachricht über ICQ schicken theHacker eine Nachricht über Skype™ schicken
Reg: 20.04.2006
Beiträge: 22.684
Standard

Zitat:
Zitat von KussMar
Lösungsansatz von mir haste im ICQ,
Krieg ich den auch hier im Thread, damit ich mitreden kann ?
Zitat:
Zitat von KussMar
@Hacker: iss bissl komplizierter
Deiner oder meiner ?
Zitat:
Zitat von BartTheDevil89
Aber die Idee scheint gut zu sein. Ich geh also jede einzelne x-Reihe ab und füge dort in einem zufälligen Abstand diese Punkte ein.
Falsch verstanden.
Du gibts vor, wieviele Punkte du haben willst ($max_points). Die Schleife geht nun solange durch, bis alle Punkte in einem gewünschten Abstand/Kritieren erfüllt sind.
Zitat:
Zitat von BartTheDevil89
Das mit x1 und so meine ich, dass $i nichnur <max_points, sondern auch >min_points sein sollte.
Versteh ich immer noch ned, weil du ja meine $max_points-Variable falsch verstanden hast.
NEU theHacker.blog NEU
– It's just a glitch in the Matrix –

OpenIsles - das freie Insel-Aufbauspiel | www.theHacker.ws v3 | WhatPulse-Team
theHacker ist offline   Mit Zitat antworten
Alt 21.05.2006, 13:11:11   #8 (permalink)
BartTheDevil89
Devilution Media
Benutzerbild von BartTheDevil89

ID: 87739
Lose senden

BartTheDevil89 eine Nachricht über ICQ schicken
Reg: 02.05.2006
Beiträge: 3.963
Standard

Zitat:
Zitat von theHacker
Krieg ich den auch hier im Thread, damit ich mitreden kann ? Deiner oder meiner ?
Falsch verstanden.
Du gibts vor, wieviele Punkte du haben willst ($max_points). Die Schleife geht nun solange durch, bis alle Punkte in einem gewünschten Abstand/Kritieren erfüllt sind.
Versteh ich immer noch ned, weil du ja meine $max_points-Variable falsch verstanden hast.
Achso,

also, das mit dem max_points hab ich leider falsch formuliert. Das bezieht sich auf die Version hier:

PHP-Code:
1:
2:
3:
4:
$max_y=1000$max_x=1000
for(
$y=1;$y<$max_y;$y+=2
  for(
$x=1;$x<$max_x;$x+=2
    echo 
"($x | $y)\n"
Aslso $y eben nichtnur $max_y, sondern auch $min_y. Bzw. dass ich eben nicht bei $y=1 anfange, sondern bei $y=10 oder so.

Jetzt müsste ich in diese obere Verison aber noch einarbeiten, dass es nicht immer +2 sein soll, sondern $y immer +1, dass er also jede y-Reihe durchgeht und bei x müsst es nicht +2, sondern +$zahl sein und $zahl muss beispielsweise eine Zahl zwischen 3 und 5 sein. Also irgendwie so muss das doch dann sein:

PHP-Code:
1:
2:
3:
4:
5:
$max_y=1000$max_x=1000
for(
$y=1;$y<$max_y;$y+=1
$zahl rand(3,5); 
  for(
$x=1;$x<$max_x;$x+=$zahl
    echo 
"($x | $y)\n"
oder wie müsste das richtig lauten?
Rabatt-Gutscheine-Kostenlos.de - Rabattgutscheine für diverse Onlineshops. Immer kostenlos..

Grillmatten - Grillmatte.de zeigt dir alle Infos
BartTheDevil89 ist offline Threadstarter   Mit Zitat antworten
Alt 21.05.2006, 13:20:23   #9 (permalink)
theHacker PREMIUM-User
sieht vor lauter Ads
den Content nicht mehr
Benutzerbild von theHacker

ID: 69505
Lose senden

theHacker eine Nachricht über ICQ schicken theHacker eine Nachricht über Skype™ schicken
Reg: 20.04.2006
Beiträge: 22.684
Standard

Zitat:
Zitat von BartTheDevil89
Jetzt müsste ich in diese obere Verison aber noch einarbeiten, dass es nicht immer +2 sein soll, sondern $y immer +1, dass er also jede y-Reihe durchgeht und bei x müsst es nicht +2, sondern +$zahl sein und $zahl muss beispielsweise eine Zahl zwischen 3 und 5 sein.
[...]
oder wie müsste das richtig lauten?
Wenn du Klammern setzt, würde deine Version schon funktionieren, allerdings klappt das nicht, weil du nicht ausschließen kannst, dass 2 Punkte nebeneinander sind.
Kommt es dir darauf an, würde ich die obere Variante sofort vergessen und mir meine zweite Variante mal genauer ansehen.


btw. Quote bitte mal richtig
NEU theHacker.blog NEU
– It's just a glitch in the Matrix –

OpenIsles - das freie Insel-Aufbauspiel | www.theHacker.ws v3 | WhatPulse-Team
theHacker ist offline   Mit Zitat antworten
Alt 21.05.2006, 13:25:45   #10 (permalink)
BartTheDevil89
Devilution Media
Benutzerbild von BartTheDevil89

ID: 87739
Lose senden

BartTheDevil89 eine Nachricht über ICQ schicken
Reg: 02.05.2006
Beiträge: 3.963
Standard

Zitat:
Zitat von theHacker
btw. Quote bitte mal richtig
Ich glaub, ich gewöhn es mir wohl eher an das ganze komplett wegzulassen.

Wenn 2 Punkte untereinander vielleicht sind, kann man zwar nichts machen, aber das wäre jetzt erstmal nicht so schlimm. Kann ja nachher mit der Hand nochmal drüber gehen und diese dann löschen.

Wichtig wäre, dass diese Version hier laufen würde. Also, was meinst du mit Klammern? Und als letztes Vielleicht, wie könnte ich noch hinzufügen, dass er bei der x-Zahl nicht bei 1 beginnt(denn dann wäre ja immer bei x=1 eines), sondern er dort auch $x = 1 + $zahl macht? Also er diese $zahl auch dort einfügt?

PHP-Code:
1:
2:
3:
4:
5:
$max_y=1000$max_x=1000
for(
$y=1;$y<$max_y;$y+=1
$zahl rand(3,5); 
  for(
$x=1;$x<$max_x;$x+=$zahl
    echo 
"($x | $y)\n"
Rabatt-Gutscheine-Kostenlos.de - Rabattgutscheine für diverse Onlineshops. Immer kostenlos..

Grillmatten - Grillmatte.de zeigt dir alle Infos
BartTheDevil89 ist offline Threadstarter   Mit Zitat antworten
Alt 21.05.2006, 14:34:33   #11 (permalink)
respawner
Erfahrener Benutzer

ID: 12494
Lose senden

Reg: 26.04.2006
Beiträge: 388
Standard

soll das jetzt für ein Browsergame sein? Ob 2 Punkte jetzt zu nah aneinander sind kannst du ja mit (x_i-x)²+(y_i-y)² < minentfernung² für alle Punkte i die vorher schon gelegt wurden. x und y kannst du ja mit rand(xmin,xmax) und rand(ymin,ymax) vorbelegen, so hast du eine recht zufällige Verteilung. Wenn du aber lieber sowas haben willst, dass sich z.B. Ringe bilden wie bei die-staemme, dann würde ich mit Polarkoordinaten arbeiten.
Also z.B.
PHP-Code:
1:
2:
3:
4:
$phi mt_rand(0,10000)/10000*atan(1)*8//Zahl zwischen 0 und 2 Pi
$r mt_rand($min_radius$max_radius);
$x $r cos($phi);
$y $r sin($phi); 
und testen halt wie es theHacker gemeint hat in einer eigenen Funktion
z.b. mit den (x_i-x)²+(y_i-y)² < min_entfernung²
Aber ich glaube eher ich habe nicht ganz verstanden was du genau willst.

MfG respawner
 
respawner ist offline   Mit Zitat antworten
Alt 21.05.2006, 15:08:27   #12 (permalink)
theHacker PREMIUM-User
sieht vor lauter Ads
den Content nicht mehr
Benutzerbild von theHacker

ID: 69505
Lose senden

theHacker eine Nachricht über ICQ schicken theHacker eine Nachricht über Skype™ schicken
Reg: 20.04.2006
Beiträge: 22.684
Standard

Zitat:
Zitat von BartTheDevil89
Und als letztes Vielleicht, wie könnte ich noch hinzufügen, dass er bei der x-Zahl nicht bei 1 beginnt(denn dann wäre ja immer bei x=1 eines), sondern er dort auch $x = 1 + $zahl macht? Also er diese $zahl auch dort einfügt?
Hierzu: <- Faule klicken einfach den Smilie an (und meine Änderung unten)
Zitat:
Zitat von BartTheDevil89
Also, was meinst du mit Klammern?
Dass du erst nachdenken sollst, was du tust und es dann machen solltest:
Zitat:
$max_y=1000; $max_x=1000;
for(
$y=1;$y<$max_y;$y+=1)
{

$zahl
= rand(3,5);
for(
$x=1+$zahl;$x<$max_x;$x+=$zahl)
echo
"($x | $y)\n";
}
Ist mehr als eine Zeile in der Schleife, muss geklammert sein
NEU theHacker.blog NEU
– It's just a glitch in the Matrix –

OpenIsles - das freie Insel-Aufbauspiel | www.theHacker.ws v3 | WhatPulse-Team
theHacker ist offline   Mit Zitat antworten
Alt 21.05.2006, 15:21:21   #13 (permalink)
BartTheDevil89
Devilution Media
Benutzerbild von BartTheDevil89

ID: 87739
Lose senden

BartTheDevil89 eine Nachricht über ICQ schicken
Reg: 02.05.2006
Beiträge: 3.963
Standard

Ja, es tut mir Leid

Darf ich aber noch was letztes Fragen? Denn so, wie es im Moment ist, macht der ja für jede y-Zeile immer nur ein Zahl, beispielsweise 3 und setzt die ein. Dann sind allso alle Inseln bei y=1 für x=3, x=6, x=9......

Er soll bei jedem x noch eine neue Zahl erstellen!
Rabatt-Gutscheine-Kostenlos.de - Rabattgutscheine für diverse Onlineshops. Immer kostenlos..

Grillmatten - Grillmatte.de zeigt dir alle Infos
BartTheDevil89 ist offline Threadstarter   Mit Zitat antworten
Alt 21.05.2006, 15:23:34   #14 (permalink)
theHacker PREMIUM-User
sieht vor lauter Ads
den Content nicht mehr
Benutzerbild von theHacker

ID: 69505
Lose senden

theHacker eine Nachricht über ICQ schicken theHacker eine Nachricht über Skype™ schicken
Reg: 20.04.2006
Beiträge: 22.684
Standard

Zitat:
Zitat von BartTheDevil89
Er soll bei jedem x noch eine neue Zahl erstellen!
PHP-Code:
1:
2:
3:
4:
5:
6:
$max_y=1000$max_x=1000;  
for(
$y=1;$y<$max_y;$y+=1)  
{
  for(
$x=1+rand(3,5);$x<$max_x;$x+=rand(3,5))  
    echo 
"($x | $y)\n";

Meinst du das ?
NEU theHacker.blog NEU
– It's just a glitch in the Matrix –

OpenIsles - das freie Insel-Aufbauspiel | www.theHacker.ws v3 | WhatPulse-Team
theHacker ist offline   Mit Zitat antworten
Alt 21.05.2006, 22:37:51   #15 (permalink)
BartTheDevil89
Devilution Media
Benutzerbild von BartTheDevil89

ID: 87739
Lose senden

BartTheDevil89 eine Nachricht über ICQ schicken
Reg: 02.05.2006
Beiträge: 3.963
Standard

Zitat:
Zitat von theHacker
PHP-Code:
1:
2:
3:
4:
5:
6:
$max_y=1000$max_x=1000;  
for(
$y=1;$y<$max_y;$y+=1)  
{
  for(
$x=1+rand(3,5);$x<$max_x;$x+=rand(3,5))  
    echo 
"($x | $y)\n";

Meinst du das ?
Hey, genau so mein ich das!

Perfekt, vielen Dank!

Ps.: Das mit dem Threadtitel und dem [] davor hab ich auch gelernt von dir, das heißt das mit QUOTE und mit dem besser nachschauen schaff ich auch noch.
Rabatt-Gutscheine-Kostenlos.de - Rabattgutscheine für diverse Onlineshops. Immer kostenlos..

Grillmatten - Grillmatte.de zeigt dir alle Infos
BartTheDevil89 ist offline Threadstarter   Mit Zitat antworten
Antwort

Anzeige


Aktive Benutzer in diesem Thema: 1 (Registrierte Benutzer: 0, Gäste: 1)
 
Themen-Optionen
Ansicht

Forumregeln
Es ist Ihnen nicht erlaubt, neue Themen zu verfassen.
Es ist Ihnen nicht erlaubt, auf Beiträge zu antworten.
Es ist Ihnen nicht erlaubt, Anhänge hochzuladen.
Es ist Ihnen nicht erlaubt, Ihre Beiträge zu bearbeiten.

BB-Code ist an.
Smileys sind an.
[IMG] Code ist an.
HTML-Code ist aus.
Trackbacks sind an
Pingbacks sind an
Refbacks sind aus


Ähnliche Themen
Thema Autor Forum Antworten Letzter Beitrag
[MySQL+PHP] Abfrage der Belegung mkk-network Programmierung 3 20.12.2007 17:41:57
Komplizierte Frauenwelt web2null Das wahre Leben 87 04.10.2007 12:32:46
[SQL] Komplizierte sql? resoucer Programmierung 3 02.09.2007 12:56:38
[MySql] komplizierte Abfrage einiger Einträge CrazySash Programmierung 5 04.06.2006 22:22:08


Alle Zeitangaben in WEZ +1. Es ist jetzt 05:32:29 Uhr.