Autor Beitrag
F34r0fTh3D4rk
ontopic starontopic starontopic starontopic starontopic starontopic starhalf ontopic starofftopic star
Beiträge: 5285
Erhaltene Danke: 28

Win Vista (32), Win 7 (64)
Eclipse, SciTE, Lazarus
BeitragVerfasst: Do 05.06.08 08:40 
hi,

Ich habe ein array of TRect und möchte gerne Rechtecke zusammenfassen. z.B. Rechtecke die übereinander liegen und die gleiche Breite haben oder Rechtecke die gleich sind oder ineinander liegen.

Mein Versuch sieht so aus:
//
Allerdings werden nicht alle zusammengefasst, scheinbar werden auch nur horizontal beieinander liegende zusammengefasst (Als Test Umgebung benutze ich momentan ein Gitter aus Quadraten, die zu einem Rechteck zusammengefasst werden sollen) und ineinander liegende werden scheinbar auch nicht richtig erkannt. (Scheinbar ist das keine hinreichende Bedingung für ineinander liegende Rechtecke)

Wo steckt mein Denkfehler ?

mfg


Zuletzt bearbeitet von F34r0fTh3D4rk am So 19.04.09 15:13, insgesamt 2-mal bearbeitet
Martok
ontopic starontopic starontopic starontopic starontopic starontopic starofftopic starofftopic star
Beiträge: 3661
Erhaltene Danke: 604

Win 8.1, Win 10 x64
Pascal: Lazarus Snapshot, Delphi 7,2007; PHP, JS: WebStorm
BeitragVerfasst: Do 05.06.08 09:34 
Ähm... den Code kenne ich doch??

Aber mit zwei Unterschieden: ich lösche sofort, und j muss nach dem löschen auch dekrementiert werden.

Edit: ah siehste, den hab ich ja auch nur geklaut ;) GPL? Ups, das stört mich grade...

_________________
"The phoenix's price isn't inevitable. It's not part of some deep balance built into the universe. It's just the parts of the game where you haven't figured out yet how to cheat."
F34r0fTh3D4rk Threadstarter
ontopic starontopic starontopic starontopic starontopic starontopic starhalf ontopic starofftopic star
Beiträge: 5285
Erhaltene Danke: 28

Win Vista (32), Win 7 (64)
Eclipse, SciTE, Lazarus
BeitragVerfasst: Do 05.06.08 09:49 
hi,

ja es gibt einen ähnlichen Code, ich wollte den aber nicht einfach übernehmen, deshalb habe ich mir selbst einen geschrieben, was mich stört, ist dass ich das Schleifenende dynamisch verändere, was sicher nicht gut ist. Aber irgendetwas stimmt da noch nicht.

Der Algo aus dem Netz hat übrigens auch das Problem, dass keine Vertikale Zusammenfassung stattfindet. Woran es liegt weiß ich nicht, vielleicht zu wenig Durchläufe. Alternativ könnte man noch eine Toleranz einbauen, aber ich denke der Fehler muss woanders liegen.

mfg
BenBE
ontopic starontopic starontopic starontopic starontopic starontopic starhalf ontopic starofftopic star
Beiträge: 8721
Erhaltene Danke: 191

Win95, Win98SE, Win2K, WinXP
D1S, D3S, D4S, D5E, D6E, D7E, D9PE, D10E, D12P, DXEP, L0.9\FPC2.0
BeitragVerfasst: Do 05.06.08 12:31 
Ich würd das so machen:

1. Solange Veränderungen auftreten (Endgeprüft)
1.1 Für jedes Rechteck A
1.1.1 Für jedes Rechteck B (B != A)
1.1.1.1 A und B identisch? --> B entfernen
1.1.1.2 Liegt B vollständig in A? --> B entfernen (Behandelt auch 1.1.1.1)
1.1.1.3 Liegt A vollständig in B? --> A entfernen
1.1.1.4 Sind Top und Bottom von A und B identisch?
1.1.1.4.1 Überschneiden sich A und B? (Berührung gilt als Ja)
1.1.1.4.1.1 Redefiniere A[Min(Left), Top, Max(Right), Bottom]
1.1.1.4.1.2 Entferne B
1.1.1.5 Sind Left und Right von A und B identisch?
1.1.1.5.1 Überschneiden sich A und B? (Berührung gilt als Ja)
1.1.1.5.1.1 Redefiniere A[Left, Min(Top), Right, Max(Bottom)]
1.1.1.5.1.2 Entferne B

Optimiert werden kann dies z.B. dadurch, dass man Rechtecke, die keine anderen Rechtecke berühren in eine weitere Liste verschiebt und sie damit aus der weiteren Betrachtung bei wiederholten Abläufen ausschließt.

_________________
Anyone who is capable of being elected president should on no account be allowed to do the job.
Ich code EdgeMonkey - In dubio pro Setting.
F34r0fTh3D4rk Threadstarter
ontopic starontopic starontopic starontopic starontopic starontopic starhalf ontopic starofftopic star
Beiträge: 5285
Erhaltene Danke: 28

Win Vista (32), Win 7 (64)
Eclipse, SciTE, Lazarus
BeitragVerfasst: Do 05.06.08 19:45 
hi,
die frage ist, wie man das so umsetzt, dass es funktioniert, so wie ich es jetzt habe sind ja die Sachen die ich benötige vorhanden, nur tut es halt nicht ;)
BenBE
ontopic starontopic starontopic starontopic starontopic starontopic starhalf ontopic starofftopic star
Beiträge: 8721
Erhaltene Danke: 191

Win95, Win98SE, Win2K, WinXP
D1S, D3S, D4S, D5E, D6E, D7E, D9PE, D10E, D12P, DXEP, L0.9\FPC2.0
BeitragVerfasst: Do 05.06.08 19:56 
Dann versuch das mal in der Rihenfolge, wie's in meinem Post vorgeschlagen ist ;-)

_________________
Anyone who is capable of being elected president should on no account be allowed to do the job.
Ich code EdgeMonkey - In dubio pro Setting.