# Fläche mit überlappenden Ausschnitten berechnen



## oleanderkiro (10 Mai 2014)

Vielleicht hat jemand einen Tip.
Ich brauche einen Algorithmus der eine Fläche von einer Tür berechnet die z. Teil überlappende Ausschnitte enthält.
Es können bis zu 28 Ausschnitte (Rechtecke, Kreise oder Rhomben) sein. Jede Tür ist anders, gegeben sind die Türaussenmasse, die Position der Auschnitte sowie die Maße (beim Rechteck Länge und Breite, beim Kreis der Radius und beim Rhombus die Höhe).

Wenn die Ausschnitte nicht überlappen würden, wäre es einfach. es existiert keine Zeichnung.

Gruss

Joachim


----------



## ducati (11 Mai 2014)

fuer einen speziellen Einzelfall kann man das sicherlich berechnen. eine allgemein gültige Formel fuer alle Varianten wird schwierig bis unmöglich.

Gruß


----------



## Blockmove (11 Mai 2014)

Schau mal nach dem Stichwort Z-Buffer.
Das Verfahren kommt aus der Computergrafik. Mit den zugrunde liegenden Algorithmen müsste sich dein Problem näherungsweise lösen lassen.

Gruß
Dieter


----------



## oleanderkiro (11 Mai 2014)

Ich bin eigentlich SPS-Programmierer. Das Z-Buffering arbeitet doch mit der Tiefeninformation, ich habe nur 2D-Daten. Ich suche einen Algorithmus, den ich z.b. in SCL umsetzen kann.


----------



## MasterOhh (11 Mai 2014)

Da wirst du hier in diesem Forum wahrscheinlich wenig Erfolg haben. Das Problem ist sehr untypisch für Programmierer von Industriesteuerungen. Am besten du suchst in einem Mathematik- oder Informatikforum nach Hilfe.


----------



## Thomas_v2.1 (11 Mai 2014)

Du brauchst sowas wie CSG:
http://de.wikipedia.org/wiki/Constructive_Solid_Geometry

In 2d kommt man dann zu sowas:
http://en.wikipedia.org/wiki/Boolean_operations_on_polygons

und:
http://en.wikipedia.org/wiki/Vatti_clipping_algorithm

Zumindest sollte man mit den Begriffen Ansatzpunkte haben um weiterzusuchen.


----------



## zotos (11 Mai 2014)

oleanderkiro schrieb:


> ...
> ich habe nur 2D-Daten.
> ...



Zeig mal her wie diese aussehen und beschreibe mal für was man diese Anwendung braucht, ich kann mir da keinen Reim drauf machen.

Die Idee das in eine Art Rastergrafik umzurechnen und dann die gesamt fläche zu zählen ist ja schon mal gar nicht so verkehrt.

Wie genau muss das ganze denn sein?


----------



## Blockmove (11 Mai 2014)

oleanderkiro schrieb:


> Ich bin eigentlich SPS-Programmierer. Das Z-Buffering arbeitet doch mit der Tiefeninformation, ich habe nur 2D-Daten. Ich suche einen Algorithmus, den ich z.b. in SCL umsetzen kann.


Die Tiefeninformation bestimmt die Staffelung der Elemente und somit was sichtbar ist.
Ich denke mit den von Thomas genannten Vatti-Clipping-Algorithmen kommst du weiter.
Dafür findest du einige Bibliotheken im Netz, die du nach SCL umsetzen kannst.

Gruß
Dieter


----------



## oleanderkiro (18 Mai 2014)

Es gibt einen Datenbaustein der enthält u.a.:
Gesamtlänge, Gesamtbreite und 28 arrays mit folgendem Aufbau:  Feld für Typ (0=kein Ausschnitt, 1=Rechteck,2=Kreis,3=Rhombus),Feld für x-Position, Feld für Y-Position,Länge(bei Kreis Durchmesser, bei Rhombus Höhe) des Ausschnitts, Breite. Wenn sich die Ausschnitte nicht überlappen würden wäre es ganz einfach.


----------



## Blockmove (18 Mai 2014)

oleanderkiro schrieb:


> Wenn sich die Ausschnitte nicht überlappen würden wäre es ganz einfach.



Tja und so hast du den Griff ins Klo getätigt und darfst dich mit Mathe rumschlagen.


----------



## Ralle (18 Mai 2014)

Wie genau muß es denn sein?
Ein rel. einfacher Ansatz wäre evtl. ein Raster über die Tür zu legen, das dann als Array aus XY-Werten in der Steuerung liegt. Alles mit 1 vorbelegen.
Dann das 1. Element in einem extra Array berechnen (alle Array-Punkte innerhalb des Elementes werden 0) und über den gegebenen Koordinatenpunkt auf das Raster der Tür legen (Koordinatenverschiebung). Die sich überdeckenden Punkte  dann aus dem "Tür"-Array löschen (die werden 0 ). Das ganze für alle anderen Elemente wiederholen.
Zum Schluß im Array die vorhandenen Einsen zählen. Je mehr Array-Elemente, um so genauer wird das Ganze. Aber auch das ist kein ganz so einfacher Spaß.
Ich denke aber mit ein paar selbstgeschriebenen Funktionen kann man das Ganze recht übersichtlich gestalten.
Man kann dann den Algorithmus auch etwas genauer machen, indem man z. Bsp. bei "teilbelegten" Punkten eine bestimmte Prozentzahl zu eins und den Rest zu 0 macht.


----------

