Autor Beitrag
grmld
Hält's aus hier
Beiträge: 5



BeitragVerfasst: So 04.01.09 20:53 
#


Zuletzt bearbeitet von grmld am Mo 05.01.09 23:51, insgesamt 1-mal bearbeitet
Hidden
ontopic starontopic starontopic starontopic starontopic starontopic starofftopic starofftopic star
Beiträge: 2242
Erhaltene Danke: 55

Win10
VS Code, Delphi 2010 Prof.
BeitragVerfasst: So 04.01.09 21:14 
Hi :)

An welche Komponente hattest du zur Darstellung gedacht? TPaintBox? TImage?

Deine Fehlermeldung kommt daher, dass MoveTo nur ganze Zahlen akzeptiert(die Pixel halt ;)), "real" aber eine Kommazahl ist. Nimm noch ein Round() drumrum(Unit Math) oder einfach ein Trunc(), das schneidet den Nachkommaanteil ab und es muss keine unit eingebunden werden.

Dein Ansatz würde aber eine ziemlich zackige Kurve ergeben, wie ein Börsenkurs. Besser wäre es, du würdest es für jedes Pixel der Ausgabebitmap machen. Angenommen deine Bitmap hat eine Breite von w Pixeln. Dann wäre w ja 20 zugeordnet, somit wäre die Stelle x deiner Bitmap im Pixel i ja x = (i-w/2)*20/w (du musst noch um die Hälfte Verschieben, da die Ecke deiner Bitmap nicht der Ursprung deines Koordinatensystems ist).

ausblenden Delphi-Quelltext
1:
2:
for i := 0 to MyBitmap.Width do
  ZeichneFunktionswert((i-w/2)*20/w, f((i-w/2)*20/w));


So. Jetzt dürfte dein Graph auf dem Kopf stehen. Denn der Punkt 0/0 auf deiner Bitmap ist links oben. Also noch vor dem zeichnen "y := MyBitmap.Height - y" einbauen.

mfG,

_________________
Centaur spears can block many spells, but no one tries to block if they see that the spell is a certain shade of green. For this purpose it is useful to know some green stunning hexes. (HPMoR)
grmld Threadstarter
Hält's aus hier
Beiträge: 5



BeitragVerfasst: So 04.01.09 21:28 
Wow danke für die rasche Antwort!
Und ja mir ist auch schon aufgefallen, dass es ziemlich kantig aussehen würde (obwohl ich glaube, dass wir das so machen sollen, aber dein Weg ist ja um einiges eleganter!)
Ich hab'zwar nur die Hälfte verstanden, aber ich versuch das mal gleich aus

Nur eine Frage: Was ist eine "bitmap" (zur Darstellung dachte ich an TImage)? und werden bei deiner Lösung auch arrays benutzt? (ich konnte das nicht erkennen tut mir leid :( )
Hidden
ontopic starontopic starontopic starontopic starontopic starontopic starofftopic starofftopic star
Beiträge: 2242
Erhaltene Danke: 55

Win10
VS Code, Delphi 2010 Prof.
BeitragVerfasst: So 04.01.09 21:51 
Hi :)

Eine Bitmap ist einfach gesprochen ein 2-Dimensionales Array, also eine Tabelle mit Pixelfarbwerten. Bei einem TImage arbeitest du mit einer Bitmap, du merkst es nur nicht.

MyImage.Canvas.MoveTo ist äquivalent zu MyImage.Picture.Bitmap.Canvas.MoveTo

Ich dachte daran, mit den Werten sofort auf das Bild zu zeichnen, du kannst aber gerne auch noch die Zwischenstation eines Arrays[0..MyBitmap.Width] nehmen :nixweiss:

mfG,

_________________
Centaur spears can block many spells, but no one tries to block if they see that the spell is a certain shade of green. For this purpose it is useful to know some green stunning hexes. (HPMoR)
grmld Threadstarter
Hält's aus hier
Beiträge: 5



BeitragVerfasst: Mo 05.01.09 22:44 
cool ich hab jetzt wirklich verstanden was du geschrieben hast, aber eine letzte frage :D



for i:=-10 to 10 do begin
zahl[i]:=((i*i*i)/50);
image1.Canvas.moveto(image1.width div 2 + i*20 ,image1.Height div 2 - round(zahl[i]*20)) ;
image1.Canvas.lineto(image1.width div 2 + (i+1)*20 ,image1.Height div 2 - round(zahl[i]*20));
end;


das hab ich jetzt und müsste funktionieren allerdings ist das rot markierte das problem, weil da zahl[i+1]*20 stehen müsste!, aber das berechnet delphi nicht.
ich habs auch probiert mit ner variablen (x:=i+1) und dann einfach x da eingesetzt, aber auch das führt zum absturz :(
gibt es da ne lösungsmöglichkeit? (also ich möchte quasi nur das array "hochzählen" in der schleife"
jaenicke
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starofftopic star
Beiträge: 19315
Erhaltene Danke: 1747

W11 x64 (Chrome, Edge)
Delphi 11 Pro, Oxygene, C# (VS 2022), JS/HTML, Java (NB), PHP, Lazarus
BeitragVerfasst: Mo 05.01.09 22:48 
Deine Schleife läuft bis 10, dein Array auch. So, jetzt greifst du in der ersten Zeile auf zahl[i] zu, also zahl[10]. Kein Problem.
In der zweiten Zeile versuchst du aber auf zahl[i + 1] zuzugreifen, nur dein Array geht nur bis 10.
Verstehst du? ;-)

Deshalb lass die Schleife nur bis 9 laufen, der letzte Wert wird ja durch das Ende des Striches vom neunten zum zehnten Wert dargestellt. ;-)
grmld Threadstarter
Hält's aus hier
Beiträge: 5



BeitragVerfasst: Mo 05.01.09 22:57 
hab ich ausprobiert, aber mir erscheint die fehlermeldung "ungültige gleitkommaoperation", die gleiche fehlermeldung wie auch davor. : /, aber danke für den tip, denn deins stimmt ja trotzdem
jaenicke
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starofftopic star
Beiträge: 19315
Erhaltene Danke: 1747

W11 x64 (Chrome, Edge)
Delphi 11 Pro, Oxygene, C# (VS 2022), JS/HTML, Java (NB), PHP, Lazarus
BeitragVerfasst: Mo 05.01.09 23:00 
Du initialisierst dein Array zahl in der selben Schleife sehe ich gerade. Und diese Initialisierung ist natürlich nur bis zahl[i] gekommen, wenn du schon auf zahl[i+1] zugreifen müsstest.
zahl[i+1] hat deshalb schlicht keinen bestimmten Wert, und deshalb der Fehler.

Trenne die Berechnung der Zahlen von der Darstellung, zumindest was die Schleifen angeht. ;-)
grmld Threadstarter
Hält's aus hier
Beiträge: 5



BeitragVerfasst: Mo 05.01.09 23:10 
ich kann mich nur bedanken :)
mit der zeit beginnt man richtig zu denken :D

danke :-*

EDIT: Ist mir schon peinlich mit dem Fragen, aber hilft ja alles nichts, weil mir google nicht weiterhelfen will : /

--> wie kann man die Schriftgröße bei canvas.textout verändern?
Hidden
ontopic starontopic starontopic starontopic starontopic starontopic starofftopic starofftopic star
Beiträge: 2242
Erhaltene Danke: 55

Win10
VS Code, Delphi 2010 Prof.
BeitragVerfasst: Mo 05.01.09 23:59 
ich nehme mal stark an: canvas.Font.Size := .. ;)

Für weitere Fragen aber bitte einen neuen Thread :)

mfG,

_________________
Centaur spears can block many spells, but no one tries to block if they see that the spell is a certain shade of green. For this purpose it is useful to know some green stunning hexes. (HPMoR)
jaenicke
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starofftopic star
Beiträge: 19315
Erhaltene Danke: 1747

W11 x64 (Chrome, Edge)
Delphi 11 Pro, Oxygene, C# (VS 2022), JS/HTML, Java (NB), PHP, Lazarus
BeitragVerfasst: Di 06.01.09 00:02 
Und hättest du korrekt eine neue Frage dafür aufgemacht, dann hätte ich auch gleich geantwortet, aber dein Edit habe ich schlicht nicht gesehen. ;-)