Entwickler-Ecke

Algorithmen, Optimierung und Assembler - Schnittflächen von Rechtecken


ademus - So 15.05.05 14:33
Titel: Schnittflächen von Rechtecken
Hallo zusammen,

habe mich die letzten Tage damit beschäftigt, einen Algorithmus zur Berechnung beliebiger Überschneidungen von Rechtecken zu kreieren. (Cohen-Sutherland-Algorithmus)
Habe das auch soweit hinbekommen. Nur scheint mir das Ergebnis sehr umständlich:
Prog. ansehen: http://www.entwurfsforschung.de/Strukturfor/delphi/04_rechtClipping.exe
Download (330kb): http://www.entwurfsforschung.de/Strukturfor/delphi/04_rechtClipping.zip

Würde mich freuen, wenn jemand Verebesserungs-/Optimierungsvorschläge hätte.
Die weitere Verwendung wird sein, die Überlagerungsflächen mittels Evolutionsstrategie zu minimieren.
Beste Grüße ademus


delfiphan - So 15.05.05 14:52

Alternativ dazu kann man auch die Funktion IntersectRect benützen.


ademus - So 15.05.05 15:24

stimmt, mit IntersectRect hätte ich mir anscheinend eine Menge Arbeit sparen können... :roll:
Vielleicht noch eine gute Idee, wie man die Überlappung beliebiger Polygone entsprechend erhält?


delfiphan - So 15.05.05 15:34

Beliebige Polygone (eines der Polygone muss iirc aber konvex sein):
:arrow: Sutherland-Hodgeman oder Liang-Barsky Algorithmus


Muetze1 - So 15.05.05 20:11

Moin!

user profile iconademus hat folgendes geschrieben:
stimmt, mit IntersectRect hätte ich mir anscheinend eine Menge Arbeit sparen können... :roll:
Vielleicht noch eine gute Idee, wie man die Überlappung beliebiger Polygone entsprechend erhält?


Bastel dir Polygone regions [http://msdn.microsoft.com/library/default.asp?url=/library/en-us/gdi/regions_7tf2.asp] zusammen und dann so kombinieren (CombineRgn) das du die Überschneidungsfläche erhälst.

MfG
Muetze1


ademus - Do 19.05.05 10:41

Danke für den Tip, Muetze1.
Habe an meinem kleinem Rechteck-Überschneidungsprogramm weitergebastelt. - Minimierung der Überschneidungsflächen zur Erzeugung einer "dichten Packung" der Rechtecke:
Sehen: http://www.entwurfsforschung.de/Strukturfor/delphi/07_packingScale.exe
Source: http://www.entwurfsforschung.de/Strukturfor/delphi/07_packingScale.zip
(Über die Anzahl der Rechtecke und deren Größe den Wert der 'Rechteckfläche ges.' so einstellen, dass er ca. dem Wert 'Feldfläche ges.' entspricht.)

Wie kann ich denn einstellen, dass mein TImage, in dem ich die Rechtecke zeichne, auf jedem System gleich groß ist? Der Wert 'Feldfläche ges.' ist bei mir 160737 Pixel, bei den meisten anderen ist er geringer?
Und wenn jemand eine Idee hat, wie ich die ganze Berechnungsmethode verbessern kann, würde ich mich natürlich freuen, da der Algorithmus manchmal in einem lokalen Optimum hängen bleibt.

Beste Grüße ademus