Grafikaufgabe, Kreis hin und her schwingen lassen

evolem

Grünschnabel
Hallo zusammen,

für ein Praktikum muss ich eine Grafik mit "C" programmieren. Die Aufgabe ist es, ein Kreis im Halbkreis hin und her schwingen lassen. Wie ich ein Kreis und ein Linie zeichnen lasse, habe ich mit Stolz und Freude schon rausgefunden. Nun muss ich diese auch hin und her schwingen lassen. Als Beispiel haben wir im Unterricht Auto über den Monitor fahren lassen ;-) . Also hier lässt sich erkennen, das ich kein blutiger Anfänger bin. Leider reicht mein Wissen mit Hilfe des Auto-Code nicht aus, um den Code für diese Aufgabe selbst zu schnipseln. Über einen Denkanstoss, wie ich den Code schreiben sollte, würde ich mich sehr freuen.

Evolem
 
Hier mal ein paar Ideen:

- Koordinaten der Bahn (halbkreis) überlegen, ev. aufzeichnen
- Funktion y-Werte der Kreisbahn in abhängigkeit der x-Werte (Kreisgleichung)
- Nacheinander die Vollkreise mit dem Mittelpunkt auf der Bahn zeichnen (x inkrementieren und y durch Kreisgleichung berechnen)

Natürlich musst du immer den alten Kreis löschen, bevor du den neuen Zeichnest.
Evtl. musst du das ganze verzögern, damit es nicht zu schnell abläuft.

Hoffentlich helfen dir diese Tipps. Sonst musst du dein Problem genauer beschreiben.

Gruss LukeS
 
Hoffentlich helfen dir diese Tipps. Sonst musst du dein Problem genauer beschreiben.

War schon korrekt so. Hatte kein Plan wie ich vorgehen sollte! Das Programm will ich schon selbst schnipseln. So kann man am besten lernen! Wenn ich weiterhin Probleme habe, dann wende ich mich wieder an die Profis :)
 
Freut mich, dass ich helfen konnte.

Übrigens bin ich kein Profi... ich bin ein ziemlich blutiger Anfänger. Aber manchmal hab ich so ein paar Ideen.

Edit: Ich hab übrigens angefangen ein solches Programm zu schreiben. Jedoch in C++ mit JUCE als Framework. Ich werde mein Ergebnis hier posten. Kann jedoch noch ne Weile dauern

Gruss
 
Zuletzt bearbeitet:
Hallo,

hab viel ausprobiert und im Googel rumgewälzt. Leider muss ich euch enttäuschen :( Schaffe es nicht. Meine Ressourcen sind ausgeschöpft.

Die Aufgabe ist vergleichbar einer Pendeluhr. Zunächst habe ich versucht eine Schwingungskurve zu programmieren und so ist das Ergebniss:
Code:
/***************************************************************************/
int Kurve(void)
{
int ii, StartX, StartY, t;
StartX= 100;
StartY= 100;
t= 10;
moveto (StartX, StartY);
for (ii= 1; ii <= 5; ii++)
lineto (StartX + ((t* t* ii* 9.81)/(4* 3.14* 3.14)), StartY + ((cos (ii)* t* t* 9.81)/(4* 3.14* 3.14)));
}
/*************************************************************************/

void main(void)
{
  clrscr();
  printf("\n weiter  --> Taste\n");
  ch= getchar();
  graphinit();
  kurve();
  ch= getchar();
  closegraph();
}

Die Kurve sieht aber recht be.... aus. Vielleicht kann mir hier einer weiterhelfen, wie man diese verbessern könnte und anstelle die Kurve ein Kreis hin und her bewegen lassen, statt der Kurve entlang.

Gruß Evo
 
Hallo,

schau doch mal da:
http://de.wikipedia.org/wiki/Eulersche_Identität

d.h. du läßt eine Schleife von PI bis 2 * PI laufen bzw. von 180° bis 360° und gewinnst so x und y aus dem Tupel (x = cos(winkel), y = sin(winkel))

Code:
for (int winkel = 180; winkel <= 360; winkel++)
{
   zeichneKreis(cos(winkel), sin(winkel), radius); //**
   updatePanel();
   usleep(10000);
}

//edit:
Nat. gilt obiges nur für den Einheitskreis. Willst du einen größeren Kreis musst du zur Amplitude von cos und sin noch einen Faktor multiplizieren, und ** ist noch nicht ganz exakt da der x bzw y-offset noch fehlt wo du deinen Kreis im Panel eigtl. hingezeichnet haben willst.

Gruß,
RedWing
 
Zuletzt bearbeitet:
Hat irgendjemand ein simples Grafik-Quellcode (URL, Selbstgebastelt), wo irgendeine Form im Kreis dreht? Leider finde ich im Googel nichts anständiges!

Vielleicht verstehe ich so besser, wie man eine Grafik-Code bastelt!
 
Also ich hab mal einen kleinen Kreis auf einer Kreisbahn laufen lassen.

Das ganze Programm ist aber in C++ (OOP) programmiert. Mit JUCE als Framework.

Es hat noch ziemlich viele Kosmetikfehler. Und der Code ist ziemlich chaotisch und unübersichtlich geschrieben.

Schau dir vor allem die KreisComponent.pcc Datei an. Sory ich hab keine Kommentare eingefügt. Aber du kannst jeder Zeit nachfragen.

Gruss LukeS

www.zhwin.ch/~woodtluk/Kreis.zip
 
Zuletzt bearbeitet:
Hat irgendjemand ein simples Grafik-Quellcode (URL, Selbstgebastelt), wo irgendeine Form im Kreis dreht? Leider finde ich im Googel nichts anständiges!

Vielleicht verstehe ich so besser, wie man eine Grafik-Code bastelt!

ganz am anfang meiner programmier ausbildung, mussten wir mal in Pascal ein grafikprogramm machen

da wir das ganze auch bewegen mussten, haben wir den kreis in einer for schleife punkt für punkt gezeichnetm, also so pixel für pixel ^^

ich kopier hier mal den code von pascal rein:

C:
PROCEDURE CircleObj.Draw(temp:HDC);
  VAR
    i:INTEGER;
    x,y:REAL;
  BEGIN
    i:=0;
    WHILE i <= 360 DO BEGIN
      x:=sin(i)* x2 + x1;
      y:=cos(i)* x2 + y1;
      Ellipse(temp, Round(x), Round(y), Round(x+1), Round(y+1)); (* draw one pixel, ellipse is better than normal line in pascal *)
      i := i + i;
    END;
  END;

x2 ist der Radius des kreises
x1,y1 sind die punkte im koordinaten system

ich weis nicht, ob dir das hilft, aber ich habe mir das so überlegt (wenn es in C sogar eine funktion gibt, die einen kreis gut zeichnet, wirds natürlich noch leichter)

du kannst dir mit obiger methode aus einem punkt x,y und dem radius einen kreis zeichnen || beziehungsweise die punkte für einen kreis berechnen

==> mit der methode die ich dir hingeschrieben habe, bekommst du 360 punkte, die miteinander verbunden einen kreis entsprechen, der den radius r hat

wenn du jetz einen kreis hast mit den koordinaten x,y,r und du berechnest dir mit der funktion einen punkt xOffset, yOffset, addierst diesen zu x,y und packst das in eine for-schleife, dann sollten sich ganz viele kreise in einem kreis zeichnen :D

wenn du dann noch die alten kreise mit weiß übermalst || löscht je nachdem wie das in C funktioniert bleib ein kreis über, der sich im kreis dreht

so die theorie, ich hoffe das mein kleiner exkurs hilfreich war :)

mfg
 
Zuletzt bearbeitet:
Zurück