![]() |
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:
aber wie bring ich das mit in meinen quellcode rein
t := 0.0001 * b/100;
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 |
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:
a sollte nur drin sein, wenn du sleep (oder delay...) in der Funktion hast, dann siehst du die einzelnen Punkte.
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; 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:
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.
Procedure Funktionzeichnen(image: Tcanvas; sleeptime: integer; col: tcolor usw. );
begin y=... zeichnen; sleep(sleeptime); end; |
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 |
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.
|
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. |
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:
|
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:
Frank...
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; |
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 |
Re: Bräuchte Hilfe beim Zeichnen von u=u_t*cos(2*pi*f_t*t)
Sorry dreeeeeeeer!!!
Delphi-Quellcode:
oder auch...
Form1.Canvas.LineTo(trunc(sin(i*Pi/180)*100)+100,trunc(Cos(i*Pi/180)*100)+100);
Delphi-Quellcode:
Frank
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; |
Alle Zeitangaben in WEZ +1. Es ist jetzt 01:35 Uhr. |
Powered by vBulletin® Copyright ©2000 - 2025, Jelsoft Enterprises Ltd.
LinkBacks Enabled by vBSEO © 2011, Crawlability, Inc.
Delphi-PRAXiS (c) 2002 - 2023 by Daniel R. Wolf, 2024-2025 by Thomas Breitkreuz