Entwickler-Ecke

Grafische Benutzeroberflächen (VCL & FireMonkey) - Sinuskurve klappt nicht!


maxet - Di 07.06.11 20:29
Titel: Sinuskurve klappt nicht!
Wenn ich die 'Einheit' vergrößere, verändert sich nichts.
hier der Quelltext, sorry fürs Format, ich weiß noch nich wo man den einfügt und dann richtig formatiert.

Delphi-Quelltext
1:
2:
3:
4:
5:
6:
7:
8:
9:
10:
11:
12:
13:
procedure sinus;
var i:integer; var y:real;
begin
Form2.Image1.Canvas.Pen.Color:=clblue;
Form2.Image1.Canvas.Pen.Width:=3;
with Form2.Image1.Canvas do
begin
for i:=-100000 to 100000 do
begin
Lineto(NullX+i,round(NullY-(sin(i))));  [i]edit: ich weiß die vielen Klammern[/i]  :oops: 
end;
end;
end;


Moderiert von user profile iconNarses: Delphi-Tags hinzugefügt
Moderiert von user profile iconNarses: Anhang konvertiert: DOC->PNG

edit: cool ist ja automatisch :D


jaenicke - Di 07.06.11 20:39

user profile iconmaxet hat folgendes geschrieben Zum zitierten Posting springen:

Delphi-Quelltext
1:
2:
3:
for i:=-100000 to 100000 do 
begin
  Lineto(NullX+i,round(NullY-(sin(i))));
Meinst du wirklich, dass auf deinen Bildschirm 100000 Pixel passen? ;-)

Was du willst, ist ja wohl eher eine Skalierung. Und wie macht man etwas z.B. doppelt so groß? Richtig, mit einer Multiplikation. Zum Beispiel:

Delphi-Quelltext
1:
Image1.Canvas.LineTo(NullX + i, Round(NullY - 2 * Sin(i)));                    
Nebenbei:
Real sollte nie verwendet werden, nimm lieber z.B. Double.


HenryHux - Di 07.06.11 20:42

Du vergisst, dein Bild genausolang wie die Kurve zu ziehen.

Versuch mal das:

Delphi-Quelltext
1:
2:
3:
4:
5:
6:
7:
8:
9:
10:
11:
12:
13:
14:
15:
16:
17:
procedure sinus;
var i : integer;
    y : Double;
    NullX, NullY : Integer;
    Max : Integer;
begin
  Max := 420;
  Form1.Image1.Width := Max;
  NullX := Form1.Image1.Left;
  NullY := Form1.Image1.Top;
  Form1.Image1.Canvas.Pen.Color := clblue;
  Form1.Image1.Canvas.Pen.Width := 3;
  for i:= -1*Max to Max do
  begin
    Form1.Image1.Canvas.Lineto(NullX+i,round(NullY-(sin(i))));
  end;
end;


lg


mandras - Di 07.06.11 21:30

Und da sin(x) nur Werte von -1 bis 1 liefert noch skalieren:

...

Delphi-Quelltext
1:
2:
3:
4:
5:
  for i:= -1*Max to Max do
  begin
    Form1.Image1.Canvas.Lineto(NullX+i,round (Skalierung*(NullY-(sin(i)))));
  end;
end;


der organist - Di 07.06.11 22:40

wie sieht es denn überhaupt aus?


jaenicke - Di 07.06.11 22:59

user profile iconder organist hat folgendes geschrieben Zum zitierten Posting springen:
wie sieht es denn überhaupt aus?
Die angehängte Worddatei beinhaltet ein Bild. Wie man es halt so macht, wenn man ein Bild posten möchte, man packt es in Word... :autsch:


Narses - Mi 08.06.11 00:05

Moin und :welcome: im Forum!

user profile iconmaxet hat folgendes geschrieben Zum zitierten Posting springen:
hier der Quelltext, sorry fürs Format, ich weiß noch nich wo man den einfügt und dann richtig formatiert.
Du markierst den Quelltext im Editor und klickst auf das Plus-Zeichen neben der ComboBox "Delphi" oder du schreibst deinen Quelltext zwischen Delphi-Tags:

Quelltext
1:
<span class="inlineSyntax"><span class="codecomment">{PROTECTTAG84722eb17d42ac9781950e3fc19e433b}</span></span>                    
Daraus wird dann:

Delphi-Quelltext
1:
begin end;                    
cu
Narses


maxet - Do 09.06.11 14:11

user profile iconjaenicke hat folgendes geschrieben Zum zitierten Posting springen:
user profile iconmaxet hat folgendes geschrieben Zum zitierten Posting springen:

Delphi-Quelltext
1:
2:
3:
for i:=-100000 to 100000 do 
begin
  Lineto(NullX+i,round(NullY-(sin(i))));
Meinst du wirklich, dass auf deinen Bildschirm 100000 Pixel passen? ;-)

Was du willst, ist ja wohl eher eine Skalierung. Und wie macht man etwas z.B. doppelt so groß? Richtig, mit einer Multiplikation. Zum Beispiel:

Delphi-Quelltext
1:
Image1.Canvas.LineTo(NullX + i, Round(NullY - 2 * Sin(i)));                    
Nebenbei:
Real sollte nie verwendet werden, nimm lieber z.B. Double.


jaja ist klar, ich hab die Funktion mit a*sin(b*x+c) +d rausgenommen. Die Variablen a,b,c,d hab ich normalerweise in Edits aber daran liegts nicht!

Trotzdem danke :lol:


maxet - Do 09.06.11 14:22

user profile iconHenryHux hat folgendes geschrieben Zum zitierten Posting springen:
Du vergisst, dein Bild genausolang wie die Kurve zu ziehen.

Versuch mal das:

Delphi-Quelltext
1:
2:
3:
4:
5:
6:
7:
8:
9:
10:
11:
12:
13:
14:
15:
16:
17:
procedure sinus;
var i : integer;
    y : Double;
    NullX, NullY : Integer;
    Max : Integer;
begin
  Max := 420;
  Form1.Image1.Width := Max;
  NullX := Form1.Image1.Left;
  NullY := Form1.Image1.Top;
  Form1.Image1.Canvas.Pen.Color := clblue;
  Form1.Image1.Canvas.Pen.Width := 3;
  for i:= -1*Max to Max do
  begin
    Form1.Image1.Canvas.Lineto(NullX+i,round(NullY-(sin(i))));
  end;
end;


lg



der hat nen Bug!!!!! HHIILLFFEE, der rechte Teil vom Koordinatensystem vergrößert sich nicht mehr aargh! :?: :?: :?: :cry: :cry: :cry: :cry: :cry:

im Anhang der Screenshot, ich sitz grade an nem anderen PC :)


MDX - Do 09.06.11 15:07

Kannst du das Bild eventuell direkt hochladen, ohne es in eine Word-Datei einzufügen?


Martok - Do 09.06.11 15:37

user profile iconMDX hat folgendes geschrieben Zum zitierten Posting springen:
Kannst du das Bild eventuell direkt hochladen, ohne es in eine Word-Datei einzufügen?
Das ist eine OpenDocument-Datei.

Habs trotzdem mal korrigiert. Ich frag mich ja immer noch, wie man auf solche Ideen kommt. Aber das ist ja seit Jahren ein ungelöstes Problem der DAU-Forschung...


MDX - Do 09.06.11 15:46

user profile iconMartok hat folgendes geschrieben Zum zitierten Posting springen:
Das ist eine OpenDocument-Datei.

Ich hatte es mit gar nicht runtergeladen ;)