| Autor |
Beitrag |
F34r0fTh3D4rk
      
Beiträge: 5285
Erhaltene Danke: 28
Win Vista (32), Win 7 (64)
Eclipse, SciTE, Lazarus
|
Verfasst: 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
      
Beiträge: 3661
Erhaltene Danke: 604
Win 8.1, Win 10 x64
Pascal: Lazarus Snapshot, Delphi 7,2007; PHP, JS: WebStorm
|
Verfasst: 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 
      
Beiträge: 5285
Erhaltene Danke: 28
Win Vista (32), Win 7 (64)
Eclipse, SciTE, Lazarus
|
Verfasst: 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
      
Beiträge: 8721
Erhaltene Danke: 191
Win95, Win98SE, Win2K, WinXP
D1S, D3S, D4S, D5E, D6E, D7E, D9PE, D10E, D12P, DXEP, L0.9\FPC2.0
|
Verfasst: 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 
      
Beiträge: 5285
Erhaltene Danke: 28
Win Vista (32), Win 7 (64)
Eclipse, SciTE, Lazarus
|
Verfasst: 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
      
Beiträge: 8721
Erhaltene Danke: 191
Win95, Win98SE, Win2K, WinXP
D1S, D3S, D4S, D5E, D6E, D7E, D9PE, D10E, D12P, DXEP, L0.9\FPC2.0
|
Verfasst: 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.
|
|
|