Koordinatensystem zeichnen?



  • Hallo.
    Habe folgendes Problem:
    Habe ein kleines Programm geschrieben (C++), dass eine beliebige Anzahl von Rechtecken auf einem einzelnen großen Rechteck optimal anordnet. Abgesehen davon, dass die Vorgehensweise dabei aufgrund der Komplexität noch alles andere als optimal ist, bekomm ich dabei Koordinaten raus, wo sich die jeweiligen Rechtecke befinden. Dies würde ich gerne grafisch darstellen lassen, da ich aber noch relativ neu im Thema Programmieren bin und nicht viel mehr als das Standard-Grundwissen habe, hab ich leider kA wie man sowas anstellt... könnt ihr mir da vielleicht helfen??? 😕
    Bisher habe ich ein double array mit den x-koordinaten und ein double array für die y-koordinaten......
    Liebe Grüße...
    Ingo



  • Dieser Thread wurde von Moderator/in evilissimo aus dem Forum C++ 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.



  • hm... ich glaub dazu is opengl oder direct3d ein bisschen überdimensioniert für 🙂
    Naja, ich würde dir einfach die API deines betriebssystems empfehlen, damit kann auch ganz gut malen. unter windows dann eben WinAPI. Fester erstellen und reinzeichnen



  • Wieso? Texturierte Rechtecke, mit Bumpmapping und Lighting? Kommt doch cool :))))





  • Hallo!

    Danke für eure Antworten. Wie gesagt, kann bisher nur das Standard Programmierzeugs, muss mich daher erstmal über WinAPI etc. schlau machen und wie das funktioniert, usw...
    Die ZIP kann ich aus der Firma leider nicht öffnen, muss ich heute nachmittag dann von zuhause machen, aber vielen Dank! Klingt ja vom Dateinamen schonmal sehr interessant 😋 🙂 Was steht genau drin??? 😮 👍

    Liebe Grüße



  • 206RC++ schrieb:

    Was steht genau drin???

    ein einfaches GUI Framework von mir mit einem Beispiel, wie man Rechtecke zeichnen kann:

    MyApplication.h:

    #ifndef MyApplication_h
    #define MyApplication_h
    
    #include "VertexwahnGUI.h"
    using namespace Vertexwahn::Application;
    using namespace Vertexwahn::GUI;
    
    class MyApplication : public EventDriven
    {
    public:
    	MyApplication() : MyCanvas(10,10,400,300), MyWindow(L"Rechtecke")
    	{
    		// Anwendung beenden, wenn das Fenster geschlossen wird
    		MyWindow.setDefaultCloseOperation(Window::EXIT_ON_CLOSE);
    
    		// Größe des Fensters
    		MyWindow.setSize(450,380);
    
    		// Füge dem Fenster den Canvas2D hinzu
    		MyWindow.add(&MyCanvas);
    
    		// Canvas löschen
    		MyCanvas.clear(Canvas2D::COLOR_WHITE);
    
    		// Zeichne ein Rechteck
    		MyCanvas.drawRectangle(0,0, 100, 100, Canvas2D::COLOR_RED);
    
    		// Zeichne ein gefülltes Rechteck
    		MyCanvas.drawFilledRectangle(100,100, 200, 200, Canvas2D::getColorFromRGB(0,255,0));
    
    		// Zeige das Fenster an
    		MyWindow.show();	
    	}
    
    private:
    	Window			MyWindow;  // Ein Fenster
    	Canvas2D        MyCanvas;  // Zum zeichnen von Rechtecken
    };
    
    #endif
    


  • Hallo Vertexwahn!!

    Vielen Dank für deine Hilfe! Habe mir natürlich in der Zwischenzeit auch die Zip gezogen, muss aber gestehen, dass ich noch so einige Verständnisprobleme hatte bzw. habe:).... Bin jetzt wieder in der Firma, komme also net dran an die Files, aber werds heute abend nochmal versuchen....
    So wie das Beispiel aussieht... könnte ich da nicht einfach ne Schleife machen und "MyCanvas.drawRectangle(0,0, 100, 100, Canvas2D::COLOR_RED);" mit den entsprechenden Punkten wiederholen???

    Vielen Dank für die Hilfe!!!! LG, Ingo!!



  • Du brauchst eine Schleife?

    Hab ein neues Demoprogramm geschreiben:

    Es wird ein bewegtes Rechteck angezeigt, das wenn es an die Kanten des Canvas2D anstößt seine Richtung verändert. Das Rechteck wird in einer Endlosschleife abhängig von der Prozessorverarbeitungsgeschwindigkeit bewegt.

    Ein Canvas2D ist ein Steuerelement, in das man hineinzeichnen kann. Z. B. kann man in ein solches Steuerelement Pixel, Linien oder Rechtecke zeichnen. Darauf aufbauend können weitere Objekte dargestellt werden.

    Einfaches Beispiel wie man einen Pixel plottet:
    Canvas2D MyCanvas(BREITE,HOEHE);
    MyCanvas2D.setPixel(x,y,color);

    Damit man den Canvas sieht muss er sich auf einem Window Objekt befinden. Ein Window Objekt erstellt man wie folgt:
    Window MyWindow(BREITE,HOEHE);

    Der Canvas2D wird dem Window Objekt wie folgt hinzugefügt:
    MyWindow.add(&MyWindow);

    http://turing.fh-landshut.de/~jamann/Rechtecke2.zip



  • Hallo...
    Danke für deine Antwort...
    Also die Situation die ich zZ habe ist folgende: Ich habe 4 Arrays...
    rechtecke_breite[], rechtecke_laenge[], rechtecke_koordi_x[], rechtecke_koordi_y[]....
    Anhand dieser Daten kann man ja quasi ein "Koordinatensystem" aufbauen....
    Ich würde also gerne die Arrays durchgehen und dabei zeichnen lassen...
    Kann man auf einem Canvas nur eine oder mehrere Zeichnungen vornehmen??? Dann müsste es doch eigentlich klappen mit einer einfachen Schleife oder? 😕
    LG, Ingo



  • 206RC++ schrieb:

    Also die Situation die ich zZ habe ist folgende: Ich habe 4 Arrays...
    rechtecke_breite[], rechtecke_laenge[], rechtecke_koordi_x[], rechtecke_koordi_y[]....
    Anhand dieser Daten kann man ja quasi ein "Koordinatensystem" aufbauen....
    Ich würde also gerne die Arrays durchgehen und dabei zeichnen lassen...
    Kann man auf einem Canvas nur eine oder mehrere Zeichnungen vornehmen??? Dann müsste es doch eigentlich klappen mit einer einfachen Schleife oder? 😕
    LG, Ingo

    Aso... dann nimm nicht die Rechtecke2.zip sondern die Rechtecke.zip
    ja - mach einfach ne for Schleife z. B.:

    #ifndef MyApplication_h
    #define MyApplication_h
    
    #include "VertexwahnGUI.h"
    using namespace Vertexwahn::Application;
    using namespace Vertexwahn::GUI;
    
    class MyApplication : public EventDriven
    {
    public:
    	MyApplication() : MyCanvas(10,10,400,300), MyWindow(L"Rechtecke")
    	{
    		MyWindow.setDefaultCloseOperation(Window::EXIT_ON_CLOSE);
    		MyWindow.setSize(450,380);
    		MyWindow.add(&MyCanvas);
    
    		MyCanvas.clear(Canvas2D::COLOR_WHITE);
    
                    for(i = 0; i < Anzahl_der_Rechtecke; i++)
    	        {
    		    MyCanvas.MyCanvas.drawRectangle(
                             rechtecke_koordi_x[i],rechtecke_koordi_y[i],                
                             rechtecke_koordi_x[i]+rechtecke_breite[i], 
                             rechtecke_koordi_y[i]+rechtecke_laenge[i], 
                             Canvas2D::COLOR_RED);
                    }
    
    		MyWindow.show();
    
    	}
    
    private:
    	Window			MyWindow;  // Ein Fenster
    	Canvas2D        MyCanvas;  // Zum zeichnen von Rechtecken
    };
    
    #endif
    


  • Hallo
    Ja, so habe ich gehofft das es geht 🙂 Klasse..... Vielen Dank für deine Hilfe!!! 👍



  • Hallo!
    Wenn ich versuche die main auszuführen bekomme ich ca. 20 mal die Fehlermeldung "[Linker error] undefined reference to Vertexwahn::GUI::Canvas2D......" usw.... Hast du evtl. ne Ahnung was ich da noch falsch mache oder so? Ich benutzte DevC++, kann's daran liegen??? Edit: habs gerade mal mit VC++ ausprobiert, da sinds 179 Fehlermeldungen 🙂 häufig: "nicht aufgelöstes externes Symbol "__declspec(dll......" 😕 🙂
    Liebe Grüße, Ingo!



  • besorg dir Visual Studio 2005 Express (oder höher) zusammen mit dem PSDK und übersetzt es nochmal 😉



  • Hallo.
    k, danke... Nur wie krieg ich die Daten der Rechtecke aus meinem Programm in deins eingebunden (übergeben) ??? Deine Main in mein Programm mit einbinden und meine main dann in deinen ordner kopieren reicht ja nicht 🙂 Irgendwie muss ich die Daten der Rechtecke ja noch in diese Datei kriegen:

    using namespace Vertexwahn::GUI;
    
    class MyApplication : public EventDriven
    {
    public:
        MyApplication
    

    ..... usw...
    Danke für die Mühe,
    LG, Ingo



  • Vergiss seine main Methode und lern C++.
    Du nimmst einfach seine Klasse, machst die Rechtecke dort als memberVariable und schreibst dir dann 2 Zugriffsfunktionen zum setzen und vll. auch holen der Rechtecke.
    Dann erstellst du eine Instanz der Klasse, schreibst die Rechtecke hinein und lässt es laufen.



  • bin ja dabei c++ zu lernen, nur bräuchte die gewünschte funktionalität halt schon jetzt und nicht irgendwann, wenn ich's selber schreiben könnte 🙂 Naja ich werd mal schauen wie ich's hinkriege..... Gruß



  • Naja ich werd mal schauen wie ich's hinkriege

    Das ist die richtige Einstellung, denn ich denke nicht das es jemand anders für dich machen wird 😃
    Wenn du einfach anfängst und ausprobierst, und DANN auf ein Problem stösst, dann kann dir hier auch sicherlicht geholfen werden. Aber komplettlösungen, dafür ham hier wohl die wenigsten Zeit 🙂



  • Hallo! 🙂
    Habe auch nicht erwartet, dass mir jemand eine Komplettlösung erarbeitet hätte 😉 ... wobei ich natürlich nichts dagegen hätte 😃 Ne, will schon selber versuchen das ganze zum laufen zu bringen, brauchte nur Tipps wie ich beginnen soll 🙂
    Thx, LG, Ingo

    Edit: hab gerade ne suuuppeer idee.. ich machs wie viele andere hier scheinbar, und schreibe einfach nen job-angebot ohne bezahlung aus 😉 LG



  • moinsen...
    also hab jetzt vc++ express und psdk ordnungsgemäß installiert und konfiguriert... aber "Rechtecke" läuft leider immer noch nicht 😞 24 Fehler, 1 Warnung... muss ich denn außerdem noch was installieren/konfigurieren etc.?
    Gruß


Anmelden zum Antworten