Delphi-PRAXiS

Delphi-PRAXiS (https://www.delphipraxis.net/forum.php)
-   Multimedia (https://www.delphipraxis.net/16-multimedia/)
-   -   Bräuchte Hilfe beim Zeichnen von u=u_t*cos(2*pi*f_t*t) (https://www.delphipraxis.net/81066-braeuchte-hilfe-beim-zeichnen-von-u%3Du_t%2Acos-2%2Api%2Af_t%2At.html)

Andre_Schmidt 20. Nov 2006 12:39


Bräuchte Hilfe beim Zeichnen von u=u_t*cos(2*pi*f_t*t)
 
Hallo Leute....

ich hab mich gerade mal an einem graph probiert, und zwar möcht ich die Funktion u=u_t*cos(2*pi*f_t*t) zeichnen.
kann mir jemand ein wenig auf die sprünge helfen wie ich weiter verfahren könnte!?

Angenommen mein Canvas ist 100 Pixel breit ( b= 0..100) b=100 = 1ms, dann ist
Delphi-Quellcode:
t := 0.0001 * b/100;
aber wie bring ich das mit in meinen quellcode rein



Delphi-Quellcode:
procedure TForm2.Button1Click(Sender: TObject);
var x,y,u_t,f_t,t: real;
begin
x:=10;
u_t:=4; //Amplitude
f_t:=2; //Frequenz
  while x<100 do
  begin
    x:=x+0.01;
    y:=u_t*cos(2*pi*f_t*x); //Formel
    image1.canvas.pixels[round(x+50),round(-y+100)]:=clblack;
    image1.canvas.Rectangle(0,0,image1.Width,image1.Height);
  end;
end;

end.

gruß andre

Nikolas 20. Nov 2006 13:30

Re: Bräuchte Hilfe beim Zeichnen von u=u_t*cos(2*pi*f_t*t)
 
Wo liegt denn dein Problem? Die Funktion sieht schon mal ganz gut aus. Warum überzeichnest du aber das gesamtze Feld, nachdem du einen Punkt gesetzt hast? So wirst du nichts sehen können.
ich schlage so etas vor:

Delphi-Quellcode:
while x<100 do
  begin
    x:=x+0.01;
    y:=u_t*cos(2*pi*f_t*x); //Formel
    image1.canvas.Rectangle(0,0,image1.Width,image1.Height); // a
    image1.canvas.pixels[round(x+50),round(-y+100)]:=clblack;
    sleep(50); // damit siehst du wie die Funktion gezeichnet werden soll.
   

  end;
a sollte nur drin sein, wenn du sleep (oder delay...) in der Funktion hast, dann siehst du die einzelnen Punkte.

Auch solltest du nicht die Größe des Fenster hart einbauen. eher oben in eine Variable die Fenstergröße einlesen und dann unten in deinen zeichenbefehl einbauen. Alles andere ist recht hässlich und führt zu viel Arbeit, wenn du mal die Fenstergrößer andern willst.
Am Besten baust du dir gleich eine Funktion wie:

Delphi-Quellcode:
Procedure Funktionzeichnen(image: Tcanvas; sleeptime: integer; col: tcolor usw. );
begin
y=...
zeichnen;
sleep(sleeptime);
end;
Die kannst du dann immer benutzen, wenn du ein ähnliches Problem hast. Dann musst du nur etwas die Parameter an deine speziellee Funktion anpassen und die y=-Zeile anpassen. Das halte ich am programmiertechnisch schönsten.

Mavarik 21. Nov 2006 08:20

Re: Bräuchte Hilfe beim Zeichnen von u=u_t*cos(2*pi*f_t*t)
 
Hast Du auch daran gedacht, dass Delphi bei Cos Bogenmaß zurück gibt?

Frank

Nikolas 21. Nov 2006 08:27

Re: Bräuchte Hilfe beim Zeichnen von u=u_t*cos(2*pi*f_t*t)
 
Meinst du vielleicht, dass cos einen Wert im Bogenmaß erwartet? Und mit dem Faktor 2\pi hat er das anscheinend auch gemacht.

Mavarik 21. Nov 2006 08:33

Re: Bräuchte Hilfe beim Zeichnen von u=u_t*cos(2*pi*f_t*t)
 
Unit

System

Kategorie

Trigonometrie

function Cos(X: Extended): Extended;

Beschreibung

Cos gibt den Cosinus des Winkels X im Bogenmaß zurück.

Nikolas 21. Nov 2006 08:45

Re: Bräuchte Hilfe beim Zeichnen von u=u_t*cos(2*pi*f_t*t)
 
Ich würde mal sagen, dass heisst eher:
Zitat:

Cos gibt den Cosinus des Winkels (X im Bogenmaß) zurück.
Was soll es denn bedeuten, dass die Funktionen einen Wert im Bogenmaß zurück gibt?

Mavarik 21. Nov 2006 10:56

Re: Bräuchte Hilfe beim Zeichnen von u=u_t*cos(2*pi*f_t*t)
 
Naja ich schreibe immer...

CX := cos(Winkel*180/Pi)

Daher liefert folgende procedure auch das "richtige" Ergebniss..
Delphi-Quellcode:
  for i:=0 to 360 do
    begin
      Form1.Canvas.MoveTo(100,100);
      Form1.Canvas.LineTo(trunc(sin(i*180/Pi)*100)+100,trunc(Cos(i*180/Pi)*100)+100);
    end;
Frank...

Hawkeye219 21. Nov 2006 11:10

Re: Bräuchte Hilfe beim Zeichnen von u=u_t*cos(2*pi*f_t*t)
 
Hallo Frank,

setze einmal die Zahl 90 als Schleifenendwert ein und prüfe, ob das Ergebnis immer noch stimmt.

Gruß Hawkeye

Mavarik 21. Nov 2006 12:16

Re: Bräuchte Hilfe beim Zeichnen von u=u_t*cos(2*pi*f_t*t)
 
Sorry dreeeeeeeer!!!

Delphi-Quellcode:
 Form1.Canvas.LineTo(trunc(sin(i*Pi/180)*100)+100,trunc(Cos(i*Pi/180)*100)+100);
oder auch...

Delphi-Quellcode:
  Form1.Canvas.moveTo(trunc(sin(0*Pi/180)*100)+100,trunc(Cos(0*Pi/180)*100)+100);
  for i:=1 to 360 do
    begin
      Form1.Canvas.LineTo(trunc(sin(i*Pi/180)*100)+100,trunc(Cos(i*Pi/180)*100)+100);
    end;
Frank


Alle Zeitangaben in WEZ +1. Es ist jetzt 12:09 Uhr.

Powered by vBulletin® Copyright ©2000 - 2022, Jelsoft Enterprises Ltd.
LinkBacks Enabled by vBSEO © 2011, Crawlability, Inc.
Delphi-PRAXiS (c) 2002 - 2021 by Daniel R. Wolf