Autor Beitrag
Geri
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starontopic star
Beiträge: 78

XP
RAD Studio XE pro
BeitragVerfasst: Mo 23.03.09 18:38 
Hallo

Ist euch vielleicht einen Alorithmus bekannt mit dem man Polygone von aussen hin zum Zentrum (wie im Dateianhang dargestellt) füllen kann?

Beste Grüsse

Geri
Einloggen, um Attachments anzusehen!
Kenan
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starontopic star
Beiträge: 18



BeitragVerfasst: Mo 23.03.09 18:43 
Wie willst du Polygon züge in C# machen?

Ich hätte ein GrafX Paket mit dem man Polygonzüge machen kann!

Wenn du ihn brauchst einfach melden!

mfg
Greenberet
ontopic starontopic starontopic starontopic starontopic starontopic starofftopic starofftopic star
Beiträge: 339
Erhaltene Danke: 20

Win 10
C# (VS 2012), C++ (VS 2012/GCC), PAWN(Notepad++), Java(NetBeans)
BeitragVerfasst: Mo 23.03.09 19:03 
user profile iconKenan hat folgendes geschrieben Zum zitierten Posting springen:
Wie willst du Polygon züge in C# machen?

Ich hätte ein GrafX Paket mit dem man Polygonzüge machen kann!

Wenn du ihn brauchst einfach melden!

mfg


mit System.Drawing.Graphics.DrawLines?
Kha
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starhalf ontopic star
Beiträge: 3803
Erhaltene Danke: 176

Arch Linux
Python, C, C++ (vim)
BeitragVerfasst: Mo 23.03.09 19:53 
Bei Polygonen ist das doch noch relativ (naja ;) ) einfach: Du verlängerst alle Kanten zu Geraden, verschiebst sie in Richtung ihrer Normalen nach innen und schneidest sie wieder, um zurück zu den Strecken zu kommen. Du musst nur darauf achten, dass Kanten ja auch ganz verschwinden können: Wenn sich nach dem Schneiden der Umlaufsinn ändert, schmeißst du die Kante raus.

Das war jetzt vielleicht etwas knapp, aber so sollte es funktionieren.

_________________
>λ=
Geri Threadstarter
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starontopic star
Beiträge: 78

XP
RAD Studio XE pro
BeitragVerfasst: Mo 23.03.09 20:53 
Hallo zusammen

Vielen Dank für eure raschen Rückmeldungen.

@Kenan: Die Programmiersprache ist mir eigentlich egal. Mich interessiert das Vorgehen. Kann dieses GrafX-Paket etwa die inneren Polygone berechnen?

@Greenberet: Wie man zeichnet ist mir schon klar. Mich interessiert aber wie ich zu den einzelnen Polygonen komme

@KHA: Klingt sehr interessant. Hab mir mal ein paar Fälle nach deinem Algorithmus durchgedacht.
Wenn ich richtig verstehe wird der Polygonzug zuerst nacheinander nummeriert und erhält einen Umlaufsinn.
2.) erzeuge parallele Geraden mit dem Abstand d von der Aussenkontur.
3.) Schneide die aufeinanderfolgenden Geraden miteinander => Schnittpunkte
4.) Verknüpfe die Schnittpunkte zu einem neuen Polygon
5.) Prüfe ob Strecken weg fallen: Wie erkenne ich nun aber bitte einen geänderten Umlaufsinn?

Beste Grüsse

Geri
Kha
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starhalf ontopic star
Beiträge: 3803
Erhaltene Danke: 176

Arch Linux
Python, C, C++ (vim)
BeitragVerfasst: Mo 23.03.09 21:11 
Genau so. Mittlerweile ist mir aber eingefallen, dass man die Geraden gar nicht explizit berechnen muss, es geht einfacher:
u_k sei der Vektor der k-ten Kante (im Umlaufsinn, alle Vektoren zusammen müssen also einen geschlossenen Vektorzug bilden (Summe = Nullvektor)), dann ist u_k - u_(k-1) ein Richtungsvektor der Winkelhalbierenden zweier aufeinanderfolgender Kanten (je nach Umlaufsinn zeigt er nach innen oder nach außen). Jetzt musst du nur noch über den Kantenschnittpunkt in Richtung dieses Vektors nach innen verschieben, bis er von den Kanten den gewünschten Abstand hat (sollte über Skalarprodukt funktionieren). Für eine Zeichnung habe ich gerade leider keine Zeit :( .

Bei den wegfallenden Strecken wird es noch interessanter, als ich gedacht habe: Es kann ja sogar passieren, dass sich dabei ein Polygon in mehrere Einzelpolygone aufteilt. Man muss wahrscheinlich allgemein schauen, ob sich beim errechneten Polygon irgendwelche Kanten schneiden und dann entsprechend neue Punkte und Kanten einführen und alte verwerfen :nut: .

Ich hoffe, diese hingeworfenen Gedankenfetzen können dir weiterhelfen. Ich werde das ganze auch auf jeden Fall mal selbst mit F# und Silverlight umsetzen, aber davor stehen 2 Wochen Abi an ;) .

_________________
>λ=
Geri Threadstarter
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starontopic star
Beiträge: 78

XP
RAD Studio XE pro
BeitragVerfasst: Di 24.03.09 00:32 
Hallo Sebastian

Ja, das hast du richtig erkannt. Die Sache wird dann zudem noch etwas aufwändiger wenn sich Polygone im inneren der Aussenkontur (Inseln) befinden. :)

Meiner Vorstellung nach könnte man evtl. auch hergehen und die Vektoren sortieren, eine innere Kontur bilden und dann die Schnittpunkte aller Strecken miteinander berechnen. Daraus ergeben sich Schnittpunkte. Wenn man sich nun entlang eines Pfades bewegt kommt man vielleicht zu einem Schnittpunkt. Ist dies der Fall, dann sucht man von hinten her das andere Ende des Polygonzuges bis man auch von hier auf diesen Schnittpunkt kommt. Daraus ergibt sich schliesslich ein Polygon. Anschliessend geht man entlang der Kurve weiter. Entsteht ein Polygonzug innerhalb von zwei Schnittpunkten, dann handelt es sich eine Schlinge. Hier gilt nun zu erkennen ob es sich um eine Überlappung eines bereits besuchten Pfades handelt oder um enen neuen Pfad.

Ganz bin ich gedanklich noch nicht am Ende angelangt. Vielleicht ist die Überlegung aber auch zu kompliziert oder nicht ausreichend genau. Bestehen bleibt ja auch noch die Problematik mit den wegfallenden Teilen

Bitte lass es mich jedenfalls wissen, wenn du schlauer geworden bist.

Viel Erfolgb beim Abi, wenn ein Fachbereich Programmieren ist, dann musst du dich ja s.w. nicht so stark vorbereiten ;))
Beste Grüsse

Geri
ene
ontopic starontopic starontopic starontopic starontopic starofftopic starofftopic starofftopic star
Beiträge: 779
Erhaltene Danke: 1

Vista, XP, W2K
Delphi, .Net, Deutsch und Englisch
BeitragVerfasst: Di 24.03.09 08:21 
Sieht ja fast wie Fräsbahnen aus ;) Wir machen etwas ähnliches, allerdings in einer Übertragung des Netzes in 2D. Dabei betrachten wir das Objekt aus Z und erstellen eine Schwarz/Weiss-Fläche. Nun läuft man im Kreis (linksoben->rechtsoben->rechtsunten->linksunten) das Bild von aussen nach innen und verschiebt dabei immer weiter die Kontur nach innen und landet dabei irgendwann bei der Mittellinie des Objekts. Vielleicht wäre das auch ein Ansatz für dich.

_________________
Wir, die guten Willens sind, geführt von Ahnungslosen, Versuchen für die Undankbaren das Unmögliche zu vollbringen.
Wir haben soviel mit so wenig so lange versucht, daß wir jetzt qualifiziert sind, fast alles mit Nichts zu bewerkstelligen.
Geri Threadstarter
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starontopic star
Beiträge: 78

XP
RAD Studio XE pro
BeitragVerfasst: Di 24.03.09 11:52 
Hallo Jan

Vielen Dank für Deinen Hinweis. Ja, es soll eine Fräsbahn berechnet werden. Habe ich dich richtig versanden?

Du generierst aus dem Polygon eine gefüllte Fläche und erzeugst ein Bitmap. Dann löschst du von aussen nach innen einezelne Pixel. Anschliessend wird wieder vektorisiert. Stimmt das so?


Beste Grüssse

Geri
PS: Ich habe mich auch schon gefragt ob es hierfü nicht vielleicht eine fertige Programmiertoolbox gibt, welche diese Aufgabe übernehmen kann - wurde aber nicht fündig-.
ene
ontopic starontopic starontopic starontopic starontopic starofftopic starofftopic starofftopic star
Beiträge: 779
Erhaltene Danke: 1

Vista, XP, W2K
Delphi, .Net, Deutsch und Englisch
BeitragVerfasst: Di 24.03.09 12:53 
Äh...weniger. Ich mache ein Abbild aus Blickrichtung Z. Also wenn du dir ein Bitmap vorstellst, ist alles Schwarz was kein Objekt ist und Weiß, was Objekt ist aus der Draufsicht von oben. Und dann läuft man im Kreis von aussen nach innen. Wir verwenden das aus dem Grund, dass wir die Mittellinie des Objekts brauchen. Dafür brauchen wir in 1. Linie keine Vektorisierung. Du kannst es ja aber über einen Maßstab oder halt 1:1 wieder zurückrechnen. Bei einer Fräsbahnberechnung, musst du ja die Fräßbreite mit einbauen und damit dann auch den Pixeln entsprechend die Zustände zuordnen. Wobei meiner Meinung nach alle ERP-Maschinen, in Schichten von "Bildern" arbeiten oder auch die CNC-Fräsen nur Bilder verarbeiten. Denn eigentlich sind das alles "Lochkartenmodell".

Eine fertige ToolBox gibt es wohl nicht, weil die Leute damit Geld verdienen, wenn sie Software für die Fräsaufbereitung erstellen. ;)

_________________
Wir, die guten Willens sind, geführt von Ahnungslosen, Versuchen für die Undankbaren das Unmögliche zu vollbringen.
Wir haben soviel mit so wenig so lange versucht, daß wir jetzt qualifiziert sind, fast alles mit Nichts zu bewerkstelligen.
Geri Threadstarter
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starontopic star
Beiträge: 78

XP
RAD Studio XE pro
BeitragVerfasst: Di 24.03.09 13:06 
Hallo ene

Vielen Dank für die rasche Rückmeldung. Ich glaube, ich habe euer Vorgehen verstanden. Jedenfalls interessant, weil man damit auch die Aussenkontur eines Objektes erkennen kann.
In letzer Konsequenz benötige ich aber Vektoren. Vielleicht macht es aber Sinn darauf zurück zu rechnen. Werde mir mal Gedanken darüber mache. Die Überlegung mit dem Skalieren funktioniert meiner Ansicht nach hier leider nicht.

CNC-Maschinen arbeiten meines Wissens mit Vektoren (z.B. Din G-Code 66025)

Beste Grüsse

Geri
PS: Ich habe mir schon gedacht, dasss so eine Toolbox, welche solche Konturen berechnen kann etwas kosten wird. Ist ja auch nicht ganz einfach umzusetzen, dieser Algorithmus :)
ene
ontopic starontopic starontopic starontopic starontopic starofftopic starofftopic starofftopic star
Beiträge: 779
Erhaltene Danke: 1

Vista, XP, W2K
Delphi, .Net, Deutsch und Englisch
BeitragVerfasst: Di 24.03.09 13:13 
Die Vektoren benötigst du ja aber eigentlich nur, wenn du mehr als 3 Achsen hast. Denn der Weg ist durch die Bahn vorgegeben und die Höhe durch die Schicht. So tief stecke ich in den Fräsen aber nicht drin und inzwischen haben wir gekauft und brauchen meine Vorbereitungen nicht mehr ;)

_________________
Wir, die guten Willens sind, geführt von Ahnungslosen, Versuchen für die Undankbaren das Unmögliche zu vollbringen.
Wir haben soviel mit so wenig so lange versucht, daß wir jetzt qualifiziert sind, fast alles mit Nichts zu bewerkstelligen.
Kenan
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starontopic star
Beiträge: 18



BeitragVerfasst: Di 24.03.09 15:46 
Berechnen tut das GrafX Paket gar nichts es gibt nur die möglich keit eine Grafik mit einer beliebigen größe zu erstellen!

Mann kann Punkte Linien und Polygonzüge zeichnen!

mfg
Geri Threadstarter
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starontopic star
Beiträge: 78

XP
RAD Studio XE pro
BeitragVerfasst: Di 24.03.09 16:20 
@ene: Meines wissens arbeiten CNC-Maschinen mit Vektoren z.B: Din 66025 G-code

@Kenan: Vielen Dank aber das Zeichnen ist in meinem Fall nicht das Problem

Beste Grüsse

Geri
Kha
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starhalf ontopic star
Beiträge: 3803
Erhaltene Danke: 176

Arch Linux
Python, C, C++ (vim)
BeitragVerfasst: Mo 20.07.09 14:47 
user profile iconGeri hat folgendes geschrieben Zum zitierten Posting springen:
Viel Erfolgb beim Abi, wenn ein Fachbereich Programmieren ist, dann musst du dich ja s.w. nicht so stark vorbereiten ;))
Noch vielen Dank im Nachhinein, Informatik war leider nicht dabei ;) . Mit meiner frisch gewonnenen Freiheit/Freizeit :D wollte ich mich heute mal am Algorithmus versuchen. Zuerst aber noch einmal bei Google vorbeigeschaut und irgendwie ist dieses Mal sogar was Brauchbares herausgekommen :gruebel: ...

Ein abartiger Algorithmus, auch für Polycurves: cgcad.thss.tsinghua....I2007V58N03P0240.pdf
Eine Open-Source-Lib: www.cgal.org/Manual/..._2/Chapter_main.html
Leider in C++, da bräuchte man also noch einen C++/CLI-Wrapper.

Vielleicht geht es ja dann doch etwas einfacher als in dem PDF für deinen Fall. Du hast also nur ein Polygon und willst als Output wieder eines, oder doch mit Rundungen? Bzw: Besteht das Problem überhaupt noch :mrgreen: ?
Ich führe mir den Algo jedenfalls mal zu Gemüte :) .

_________________
>λ=
Jakob_Ullmann
ontopic starontopic starontopic starontopic starontopic starontopic starofftopic starofftopic star
Beiträge: 1747
Erhaltene Danke: 15

Win 7, *Ubuntu GNU/Linux*
*Anjuta* (C, C++, Python), Geany (Vala), Lazarus (Pascal), Eclipse (Java)
BeitragVerfasst: Mo 20.07.09 17:39 
Also wenn ich das richtig verstehe, passiert bei Bézierkurven ja auch nichts anderes als bei Polygonen (wenn man die Fix- und Bézierpunkte als Eckpunkte eines Polygons betrachtet).