Bewegte Grafik: Visualisierung der Bewegung eines Kolbens auf Bildschirm
-
Ein Gruß an das Forum,
nachdem mir Hinweise aus dem Forum bereits mehrmals sehr geholfen haben, wende ich mich heute an Euch mit einer weiteren Frage.
Ich beabsichtige, die Bewegung eines Schlagkolbens in einem Zylinder in einem Schnittbild zu visualisieren.
An diese Aufgabe will ich mich zunächst mit einem vereinfachten Modell herantasten. Dabei möchte ich auf dem Bilschirm zwei Rechtecke abbilden, von denen eines den feststehenden Zylinder und dass andere -in das grössere Rechteck eingepasste- kleinere Rechteck den beweglichen Kolben darstellt. Diese kleinere Rechteck will ich in sehr kleinen Schritten bewegen ( die iterativ gesondert errechneten x-Koordinaten und zugeordneten Drücke sind in 1000 Schritten pro Sekunde in einer externen Datei gespeichert). Zugleich möchte ich in den Flächen zwischen beiden Rechtecken (welche im Schnittbild den Luftvolumina oberhalb und unterhalb des Kolbens entsprechen) die Drücke auf beiden Seiten des Schlagkolbens durch entsprechende Farbgebung verdeutlichen ( z.B. rote Farbe, deren Helligkeit sich proportional zum Druck verändert). Ich müsste also vier Rechtecke zeichnen ( Zylinder, Kolben und 2 Fläche zwischen beiden) welche ich nach jedem Bewegungsschritt mit einem Fill-Befehl entsprechend einfärben müsste.
Nun meine erste Frage: Ist ein solcher Plan mit cc+ überhaupt zu verwirklichen, oder geht das nur mit Visual c++? ( Ich habe mir Visual C++ 2010 zugelegt, mich noch nicht damit befasst).
Wenn es auch nur mit cc+ geht, wäre ich für eine Hilfestellung bei der Umsetzung meines Planes dankbar ( eventual source code für eine ähnliche Animation, von der ich lernen kann).
Ich sehe Euren Anregungen mit Spannung entgegen.
-
Dieser Thread wurde von Moderator/in SeppJ aus dem Forum C++ (auch C++0x und C++11) in das Forum Spiele-/Grafikprogrammierung verschoben.
Im Zweifelsfall bitte auch folgende Hinweise beachten:
C/C++ Forum :: FAQ - Sonstiges :: Wohin mit meiner Frage?Dieses Posting wurde automatisch erzeugt.
-
heinz-georg187 schrieb:
Nun meine erste Frage: Ist ein solcher Plan mit cc+ überhaupt zu verwirklichen, oder geht das nur mit Visual c++? ( Ich habe mir Visual C++ 2010 zugelegt, mich noch nicht damit befasst).
Falls das "cc+" "C++" heißen soll: Das ist so (Achtung! Autovergleich!) etwa wie die Frage, ob man mit Straßen fahren kann oder ob das nur mit BMW geht (Ich habe mir 3er BMW zugelegt, mich noch nicht damit befasst).
Zur Frage: Wie du siehst, habe ich dich ins Grafikforum verschoben. Die erste Antwort, die ich dir geben kann, ist, dass du dir am besten eine einfache Grafik- oder Spielebibliothek schnappst, z.B. SDL. Für einfache 2D-Grafik ist SDL sicherlich eine gute Wahl. Wenn als Ausblick besteht, dass das irgendwann mal 3D werden soll, würde ich auch gleich in 3D anfangen (man kann auch 2D in 3D machen), dann musst du später nicht umlernen. Dafür wird SDL aber nicht mehr reichen. Keine Berührungsängste! 3D-Grafik ist bei weitem nicht so kompliziert, wie man denkt. Wenn du schon programmieren kannst, dann kannst du mit einer beliebigen Grafikbibliothek in ein paar Stunden lernen, wie man einfache geometrische Formen durch die Gegend fliegen lässt. Falls du noch nicht wirklich sicher in C++ bist, dann ist jetzt ein guter Zeitpunkt, dich erst einmal genauer damit zu beschäftigen. Du solltest schon einigermaßen fit im Programmieren sein, bevor du Grafikbibliotheken benutzt.
-
natürlich sollte es c++ heißen, war ein Schreibfehler.
heinz-georg187
-
Hi,
sicher, dass du das selber schreiben willst? Reicht dir nicht ein visualisierungstool dafür? Wie ich das sehe, willst du lediglich ein paar quads bewegen und auf einer Textur Druck visualisieren.
Mit paraview (http://www.paraview.org/) - einem open-source visualisierungstool bekommst du das sicher schneller hin
Ciao
Jochen
-
Hi jochen,
ich habe nicht unbedingt den Ehrgeiz, das Programm zur Lösung meines Problems selbst zu schreiben, aber ich weiss nicht, ob fertige Visualisierungstools für meinen Fall geeignet sind.
Ich benötige im übrigen keine 3-D-Grafik, ich will es bei der Visualisierung des Schnittbildes belassen, also genügt 2-D. Die Bewegung der Rechtecke soll ja nur eine Vorübung sein. Die tatsächliche maßstäbliche Geometrie von Stufenkolben und Zylinder müsste ich im Schnittbild durch eine Überlagerung von mehreren Polygonen darstellen. Die sich in jedem Zeitschritt verändernden freien Volumina zwischen Kolben und Zylinder wären im Schnittbild ebenfalls durch sich ständig verändernde Rechtecke abzubilden, die in jedem Zeitschritt – zur Verdeutlichung der sich ändernden Druecke- mit einer anderen Farbe zu füllen wären. Wenn es eine Tool gäbe, bei dem ich für jeden Zeitschritt sämtliche Koordinaten aller für das Gesamtbild benötigten Polygone eingeben und diese mit Farbe füllen kann, so wäre mein Problem gelöst.
Danke im übrigen für den Hinweis auf paraview, werde mich damit befassen.
heinzgeorg 187
-
Hi Heinz-Georg
In welchen Format liegen denn deine Daten vor?
Wahrscheinlich doch auf einem uniformen Gitter über einer rechteckingen Domäne? Und dann pro Zeitschritt ein so ein "2D Bild". Ich kann mir nicht vorstellen, dass die Druckdaten auf (bzw. innerhalb) einem/eines beliebigen nicht-konvexen Polygons vorliegen.
D.h., was du wirklich visualisieren möchtest sind wohl die Drücke. Ein Poly für den Kolben zu zeichnen betrachte ich eher Zusatzinfo (ich gehe davon aus, dass an den Stellen an denen der Kolben gerade ist sowieso der Druck einen vordef. Wert hat, somit die Kolbenpos. auch direkt aus dem 2D Druckbild abzulesen ist.)
Daher tendiere ich immer noch zu Paraview.Cioa
Jochen
-
Hi Heinz-Georg
In welchen Format liegen denn deine Daten vor?
Wahrscheinlich doch auf einem uniformen Gitter über einer rechteckingen Domäne? Und dann pro Zeitschritt ein so ein "2D Bild". Ich kann mir nicht vorstellen, dass die Druckdaten auf (bzw. innerhalb) einem/eines beliebigen nicht-konvexen Polygons vorliegen.
D.h., was du wirklich visualisieren möchtest sind wohl die Drücke. Ein Poly für den Kolben zu zeichnen betrachte ich eher Zusatzinfo (ich gehe davon aus, dass an den Stellen an denen der Kolben gerade ist sowieso der Druck einen vordef. Wert hat, somit die Kolbenpos. auch direkt aus dem 2D Druckbild abzulesen ist.)
Daher tendiere ich immer noch zu Paraview.Cioa
JochenHi Jochen,
ich habe die Daten mit einem c++-Programm berechnet und in eine txt-Datei exportiert.
Für jeden Zeitschritt i sind z.B. x(i) = Position der Kolbens in mm, pu(i)= Druck auf der Kolbenunterseite in bar, po(i)= Druck auf der Kolbenoberseite in bar gespeichert. Das Einlesen dieser Daten aus der Testdatei in ein anderes c++-Programm habe ich getestet, es klappt problemlos.
Ich möchte die Bewegung des Kolbens ( im Zeitlupentempo, denn 6 Schläge/sec dürften kaum zu erkennen sein) und gleichzeitig die Drücke oberhalb und unterhalb des Stufenkolbens visualisieren, weil die dynamische Steuerung des Kolbens durch Steuerschlitze, die während der Kolbenbewegung auf- und zugefahren werden, für die meisten (bei statischer Betrachtung der Konstruktion) sehr unanschaulich ist.
Die Frage des Koordinatensystems zur maßstabgetreuen Darstellung von Zylinder und Kolben muss ich noch klären. Ich möchte möglichst die volle Größe des Bildschirms für die Darstellung von dem Zylinder und dem sich darin bewegenden Kolben nutzen. Wenn ich weiß, wie viele Bildpunkte z. B. ich für die Gesamtlänge des Zylinders zur Verfügung habe, kann ich sämtliche Maße zur Abbildung von Kolben und Zylinder ( also die Koordinaten für jeden Eckpunkt der Polygone ) und zur Beschreibung der Position des Kolbens bei jedem Zeitschritt i proportional umrechnen.
Wenn es funktioniert, dass ich zu jedem Zeitpunkt durch eine Kombination von Polygonen ein Bild des Zylinders und des Kolbens an der jeweils berechneten x-Position erzeugen und eine den Drücken entsprechende Einfärbung der freien Volumina zwischen Kolben und Zylinder in einem Zeitfenster von deutlich weniger als 1/1000 sec realisieren kann, so müsste ich die Bewegung des Kolbens wie in einem Film durch eine sehr schnelle Bilderfolge darstellen können.
Du würdest es besser verstehen, wenn Du das Schnittbild oder dessen für die Visualisierung vereinfachte Darstellung sehen würdest. Wenn es Dich interessiert, könnte ich es Dir per Email schicken.
Gruß
heinz-georg187
-
Hallo!
Da Du wahrscheinlich auch mit der Win32 Entwicklung oder gar 3D-Schnittstellen erstmal nicht viel am Hut hast, würde ich Dir eine von den vielen Bibliotheken empfehlen, die zwar nicht für einen Blockbuster-Ego-Shooter taugen, aber mit denen man schnell erste Schritte macht.
Eben auf die Schnelle habe ich zB. folgendes mit Beispielcode gefunden:
http://www.sfml-dev.org/tutorials/1.6/graphics-shape.php
Das sollte auf jeden Fall für ein paar farbige Rechtecke langenViel Erfolg!
Deci
-
Sehe ich das richtig, dass du einfach nur sowas
http://www.zulu-media.de/kolben.gif
dafür brauchst du kein c++. da reicht java script locker
ciao
jochen