AGB  ·  Datenschutz  ·  Impressum  







Anmelden
Nützliche Links
Registrieren
Zurück Delphi-PRAXiS Programmierung allgemein Multimedia Delphi Geometrie, Logik & Wohnen: Ein Verbindungsproblem
Thema durchsuchen
Ansicht
Themen-Optionen

Geometrie, Logik & Wohnen: Ein Verbindungsproblem

Ein Thema von Jazzman_Marburg · begonnen am 19. Feb 2010 · letzter Beitrag vom 19. Feb 2010
Antwort Antwort
Benutzerbild von Jazzman_Marburg
Jazzman_Marburg

Registriert seit: 2. Aug 2004
359 Beiträge
 
#1

Geometrie, Logik & Wohnen: Ein Verbindungsproblem

  Alt 19. Feb 2010, 16:13
Liebe Gemeinde!

Für ein Spiel generiere ich Grundrisse von Wohnungen mit verschieden vielen Räumen, die im gewissen Rahmen zufällig angeordnet sind.
Nun möchte ich die einzelnen Räume mit Türen/Durchgängen verbinden (3 verschiedene Grundrisse Attachment 1). Fragt sich nur wie?
Ich habe nach der Wohnungs-Generierung folgendes Array zur Hand:

Delphi-Quellcode:
TRaum = RECORD
  Flaeche : REAL;
  Hoehe : REAL;
  Breite : REAL;
  XOrigin : INTEGER;
  YOrigin : INTEGER;
END;

Wohnung: ARRAY OF TRaum;
D.h. im Array Wohnung finde ich zu jedem Raum seine Fläche, Höhe, Breite und die X- und Y-Koordinate für die obere linke Ecke des rechteckigen Raumes (brauchte ich ja auch für die Zeichnerei).
Nun konnte ich beim Zeichnen des Grundrisses aufgrund des Generierungs-Algorithums nicht einfach jede Wand z.B. in der Mitte mit eienem Durchgang versehen, da zu diesem Zeitpunkt nicht feststeht ob diese Wand nicht zufällig noch durch weitere Wände geteilt wird.
D.h. ich gehe jetzt erstmal davon aus, dass ich nur mit dem Array of TRaum arbeiten muß.

Hat irgendjemand eine Idee, wie man den Räumen mit diesen Angaben Durchgänge/Türen verpassen kann? Es ist nicht notwendig, dass die Tür in der Mitte der Wand ist -- hauptsache man kommt von einem Raum in alle benachbarten Räume (So solls aussehen Attachment2).

Ist sicher nicht einfach -- aber wenn ihr eine Idee habt -- immer her damit!

Vielen Dank & Gruß
Jazzman
Miniaturansicht angehängter Grafiken
ziel_740.jpg   raeume_940.jpg  
--- Delphi XE Starter, Windows 8 ---
  Mit Zitat antworten Zitat
Benutzerbild von jfheins
jfheins

Registriert seit: 10. Jun 2004
Ort: Garching (TUM)
4.579 Beiträge
 
#2

Re: Geometrie, Logik & Wohnen: Ein Verbindungsproblem

  Alt 19. Feb 2010, 16:23
Grundansatz:
Gehe das Array von vorne nach hinten durch und prüfe für jedes Element das noch weiter hinten liegt, ob die Räume benachbart sind. Wenn ja, baue eine Tür ein.

In dem Bild aind immer Wände eingezeichnet - aber in dem Array finden die sich nicht wieder. Sind die Wände in den Raumkoordinaten schon mit drin, oder gibt es eine definierte Wanddicke?
  Mit Zitat antworten Zitat
Benutzerbild von Jazzman_Marburg
Jazzman_Marburg

Registriert seit: 2. Aug 2004
359 Beiträge
 
#3

Re: Geometrie, Logik & Wohnen: Ein Verbindungsproblem

  Alt 19. Feb 2010, 16:43
Hallo!

Zitat von jfheins:
Grundansatz:
Gehe das Array von vorne nach hinten durch und prüfe für jedes Element das noch weiter hinten liegt, ob die Räume benachbart sind. Wenn ja, baue eine Tür ein.
Muß ich nochmal drüber nachdenken.

Zitat:
In dem Bild aind immer Wände eingezeichnet - aber in dem Array finden die sich nicht wieder. Sind die Wände in den Raumkoordinaten schon mit drin, oder gibt es eine definierte Wanddicke?
Die Wanddicke ist beliebig. In der Generierungs-Routine zeichne ich einfach eine Linie mit:

Delphi-Quellcode:
MoveTo(XOrigin, YOrigin);
LineTo(Breite, YOrigin)); // horizontale Linie
Danke & Gruß
Jazzman
--- Delphi XE Starter, Windows 8 ---
  Mit Zitat antworten Zitat
Benutzerbild von Jazzman_Marburg
Jazzman_Marburg

Registriert seit: 2. Aug 2004
359 Beiträge
 
#4

Re: Geometrie, Logik & Wohnen: Ein Verbindungsproblem

  Alt 19. Feb 2010, 19:25
Ich nochmal.

Zitat von jfheins:
In dem Bild aind immer Wände eingezeichnet - aber in dem Array finden die sich nicht wieder. Sind die Wände in den Raumkoordinaten schon mit drin, oder gibt es eine definierte Wanddicke?
Jetzt habe ich die Nachfrage verstanden:
Tatsächlich sind die Wände nicht im Array enthalten. Die Wände muß man sich als Umriß um das Rechteck, was von der linken oberen Ecke (Wohnung[1].XOrigin, Wohnung[1].YOrigin) und der unteren rechten Ecke (Wohnung[1].Breite, Wohnung[1].Hoehe) des Raumes [1] vorstellen.

Aber Dein Grundansatz, der im Prinzip verlockend aussieht, verwirrt noch etwas:

Zitat von jfheins:
Grundansatz:
Gehe das Array von vorne nach hinten durch und prüfe für jedes Element das noch weiter hinten liegt, ob die Räume benachbart sind. Wenn ja, baue eine Tür ein.
Wie erkenne ich, das Räume benachbart sind?

Dankeschöön
Jazzman
--- Delphi XE Starter, Windows 8 ---
  Mit Zitat antworten Zitat
Benutzerbild von jfheins
jfheins

Registriert seit: 10. Jun 2004
Ort: Garching (TUM)
4.579 Beiträge
 
#5

Re: Geometrie, Logik & Wohnen: Ein Verbindungsproblem

  Alt 19. Feb 2010, 19:35
Aber die Wanddicke ist doch konstant oder? Zumindest ist sie es in deinen Beispielen

Wenn die Wanddicke bekannt ist, lassen sich benachbarte Räume finden, indem man Die Koordinaten vergleicht (Der Code ist etwas länglich, aber da kann man nicht viel machen) aber dabei muss man die Wanddicke mit berücksichtigen.
Das läuft dann darauf hinaus, dann man jeweils gesondert prüft ob der Raum X über dem aktuellen ist, rechts davon, links davon oder darunter. Und das geht dann wiederum indem man (am Beispiel "rechts") prüft:
X.Origin.x is between this.Origin.x and this.Origin.x + this.width + Wall
and
(
X.Origin.y is between this.Origin.y and this.Origin.y+this.height
or
this.Origin.y is between x.Origin.y and x.Origin.y+x.height
)

Ist jetzt Pseudocode, aber die Idee sollte rüberkommen
  Mit Zitat antworten Zitat
Antwort Antwort


Forumregeln

Es ist dir nicht erlaubt, neue Themen zu verfassen.
Es ist dir nicht erlaubt, auf Beiträge zu antworten.
Es ist dir nicht erlaubt, Anhänge hochzuladen.
Es ist dir nicht erlaubt, deine Beiträge zu bearbeiten.

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

Gehe zu:

Impressum · AGB · Datenschutz · Nach oben
Alle Zeitangaben in WEZ +1. Es ist jetzt 05:56 Uhr.
Powered by vBulletin® Copyright ©2000 - 2024, Jelsoft Enterprises Ltd.
LinkBacks Enabled by vBSEO © 2011, Crawlability, Inc.
Delphi-PRAXiS (c) 2002 - 2023 by Daniel R. Wolf, 2024 by Thomas Breitkreuz