Delphi-PRAXiS

Delphi-PRAXiS (https://www.delphipraxis.net/forum.php)
-   Object-Pascal / Delphi-Language (https://www.delphipraxis.net/32-object-pascal-delphi-language/)
-   -   Delphi Binomialverteilung -> Graphen (https://www.delphipraxis.net/117528-binomialverteilung-graphen.html)

mo_greene 19. Jul 2008 22:48


Binomialverteilung -> Graphen
 
Hallo,

ich habe mir ein kleines Tool gebastelt, welches eine beliebige Binomialverteilung ausgeben kann. Nun möchte ich das Programm noch ein wenig erweitern, indem man die errechneten Werte als Graphen oder Säulendiagramm ausgeben lassen kann.

Wie mache ich das am besten?

Danke :)

Corpsman 20. Jul 2008 08:25

Re: Binomialverteilung -> Graphen
 
Ich mach so was ja immer selbst.

Es gibt aber was das heist TChartFX ist standard mäßig drin in Delphi ( 5 Pro ) damit geht sowas glaubig auch ...

Codewalker 20. Jul 2008 10:10

Re: Binomialverteilung -> Graphen
 
Oder TJvChart aus den JEDIs

mo_greene 20. Jul 2008 10:44

Re: Binomialverteilung -> Graphen
 
Zitat:

Zitat von Corpsman
Ich mach so was ja immer selbst.

Wie denn?

Luckie 20. Jul 2008 11:12

Re: Binomialverteilung -> Graphen
 
In dem er die Säulen selber zeichnen mit den entsprechenden Zeichenroutinen von Hier im Forum suchenTCanvas.

mo_greene 20. Jul 2008 21:54

Re: Binomialverteilung -> Graphen
 
Zitat:

Zitat von Luckie
In dem er die Säulen selber zeichnen mit den entsprechenden Zeichenroutinen von Hier im Forum suchenTCanvas.

Das heißt jeden einzelnen Strich einzeln? Also jeweils die Koordinatenachsen und dann die Punkte für die Säulen im Diagramm?

mkinzler 20. Jul 2008 22:01

Re: Binomialverteilung -> Graphen
 
Zitat:

Das heißt jeden einzelnen Strich einzeln? Also jeweils die Koordinatenachsen und dann die Punkte für die Säulen im Diagramm?
Ein fundamentales Merkmal des Selbermachen ist nun mal, dass man es selber machen muss.

mo_greene 20. Jul 2008 23:50

Re: Binomialverteilung -> Graphen
 
Liste der Anhänge anzeigen (Anzahl: 1)
Also für ein "stinknormales" Koordinatensystem würde es dann so aussehen?

Delphi-Quellcode:
procedure TForm1.Zeichnen;
begin
  Image.Canvas.Pen.color := clblack;
  Image.Canvas.MoveTo(10, 180); //  Abzisse zeichnen
  Image.Canvas.LineTo(240, 180); //  Abzisse zeichnen
  Image.Canvas.MoveTo(20,10);   // Ordinate zeichnen
  Image.Canvas.LineTo(20,190);  // Ordinate zeichnen
  Image.Canvas.MoveTo(235,175); // Achsenpfeile Abzisse
  Image.Canvas.LineTo(240,180); // Achsenpfeile Abzisse
  Image.Canvas.MoveTo(235,185); // Achsenpfeile Abzisse
  Image.Canvas.LineTo(240,180); // Achsenpfeile Abzisse
  Image.Canvas.MoveTo(15,15);
  Image.Canvas.LineTo(20,10);
  Image.Canvas.MoveTo(25,15);
  Image.Canvas.LineTo(20,10);
  Image.Canvas.TextOut(30,5,'y');
  Image.Canvas.TextOut(240,185,'x');

end;
Wie es aussieht, könnt ihr im Attachment sehen.

Ist das vom Prinzip her so richtig oder zu umständlich?

Danke!

mkinzler 21. Jul 2008 05:34

Re: Binomialverteilung -> Graphen
 
Wenn du es selbermachen willst, ist das der Weg. Aber was spricht gegen TChart/TJvChart ?

Medium 21. Jul 2008 05:35

Re: Binomialverteilung -> Graphen
 
An und für sich goldrichtig. Du kannst bestenfalls 2 Dinge noch optimieren bzw. erweitern:

1) Manche MovTo() kannst du durch geschickte Zeichenreihenfolge sparen, da LineTo() auch den Zeichencursor verschiebt, und du ja zum Teil zusammenhängende Linienstücke hast.

2) Für eine Version die mehr Freiraum bietet, würde ich die Koordinaten nicht fest eingeben, sondern von der Größe des Bildes abhängig machen in dem du zeichnest.

Forlan 21. Jul 2008 07:29

Re: Binomialverteilung -> Graphen
 
Naja, damit es schöner aussieht könnte man ja auch sowas hier machen...

Delphi-Quellcode:
procedure TForm1.Zeichnen;
begin
  with Image.Canvas do
    begin
      Pen.color := clblack;
      //...
     //...
    end;
end;
MfG

mo_greene 21. Jul 2008 10:38

Re: Binomialverteilung -> Graphen
 
Super, vielen Dank!

Ich habe jetzt folgendes Problem, dass ich sehr viele Gleitkommazahlen habe, aber um zum Beispiel mein Rechteckt für ein Säulendiagramm zu zeichnen, brauche ich ja diese Gleitkommazahlen als Integer.

Beispiel:

x1 : 0,222
y1 : 0,565
x2 : 0,222 + b
y2 : 181




Mein zweites Problem ist, dass dieses b (siehe oben bei x2) ja die Breite des "Streifen" angeben soll. Diese Breite ergibt sich aus der Länge des Bernoulli Experiments (viele Wiederholungen -> kleine Streifen, damit es trotzdem in dem Diagramm dargestellt werden kann). Diese Breite b ist leider auch eine Gleitkommazahl und somit in dieser Hinsicht nicht verwendbar.

Ich wäre dankbar, wenn mir jemand helfen könnte. :)

Danke :)

Luckie 21. Jul 2008 11:05

Re: Binomialverteilung -> Graphen
 
Da wirst du dir einen geeigneten Maßstab wählen und dann die Wert entsprechend runden müssen.

mo_greene 21. Jul 2008 12:00

Re: Binomialverteilung -> Graphen
 
Ok Super, vielen Dank! Alles klappt soweit :D

Nur noch 2 Fragen:

Wie kann ich die Farbe der Schrift innerhalb des Canvas' ändern?

Wie kann ich das gezeichnete während der Laufzeit wieder löschen, so dass ich wieder ein leeres Bild/Canvas vor mir habe?

Vielen Dank!

mkinzler 21. Jul 2008 12:11

Re: Binomialverteilung -> Graphen
 
Canvas.Font.Color

mo_greene 21. Jul 2008 12:14

Re: Binomialverteilung -> Graphen
 
Danke!

Und das:

Zitat:

Wie kann ich das gezeichnete während der Laufzeit wieder löschen, so dass ich wieder ein leeres Bild/Canvas vor mir habe?

dominikkv 21. Jul 2008 12:23

Re: Binomialverteilung -> Graphen
 
Delphi-Quellcode:
with Canvas do
  begin
    Pen.Color := clWhite;
    Brush.Color := clWhite;
    Rectangle(0, 0, Width, Height);
  end;

mo_greene 21. Jul 2008 12:30

Re: Binomialverteilung -> Graphen
 
Zitat:

Zitat von dominikkv
Delphi-Quellcode:
with Canvas do
  begin
    Pen.Color := clWhite;
    Brush.Color := clWhite;
    Rectangle(0, 0, Width, Height);
  end;

Das funktioniert bei mir nicht ganz. Bei mir wird dann das ganze Fenster des Programms weiss :mrgreen: .

Ich würde einfach gerne das Bild, dass vorher voll gemalt ist wieder "zurücksetzen", sodass es halt ganz weiss ist.

mkinzler 21. Jul 2008 12:33

Re: Binomialverteilung -> Graphen
 
Dann übermale halt nur den Bereich des Bildes

mo_greene 21. Jul 2008 12:43

Re: Binomialverteilung -> Graphen
 
Zitat:

Zitat von mkinzler
Dann übermale halt nur den Bereich des Bildes

Wie? Mit Brush?

mkinzler 21. Jul 2008 12:44

Re: Binomialverteilung -> Graphen
 
Wie oben nur mit einem anderen Grenzen

dominikkv 21. Jul 2008 13:20

Re: Binomialverteilung -> Graphen
 
Zitat:

Zitat von mo_greene
Zitat:

Zitat von dominikkv
Delphi-Quellcode:
with Canvas do
  begin
    Pen.Color := clWhite;
    Brush.Color := clWhite;
    Rectangle(0, 0, Width, Height);
  end;

Das funktioniert bei mir nicht ganz. Bei mir wird dann das ganze Fenster des Programms weiss :mrgreen: .

Dann übergibst du aber die Canvas von deinem Fenster, nicht die von deinem Bild...

Medium 22. Jul 2008 03:25

Re: Binomialverteilung -> Graphen
 
Zitat:

Zitat von Forlan
Naja, damit es schöner aussieht könnte man ja auch sowas hier machen...
Delphi-Quellcode:
with

Und wenn du nicht irgendwann auf die Nase damit fallen willst, lass das lieber. Mit dem with-Statement handelt man sich auf lange Sicht mehr Ärger ein, als einem ein paar Zeichen im Quellcode weniger wert sein können. Zudem hätten sich deine letzten Fragen alle durch aufmerksames Lesen der OH, logische Rückschlüsse ziehen, und im Zweifel durch Suche in der DP und Trial & Error sehr einfach und schnell lösen lassen.

Beispiel: Ich will die Schriftfarbe ändern. Ich sehe in der Hilfe zu TCanvas, dass es ein Member "Font" hat, also sehe ich mir die Hilfe zu TFont an, und entdecke, dass dieses ein Member "Color" hat. Also probier ich das doch mal zu ändern, und schau was dann passiert. Wenn du solche einfachen Hangeleien durch die Hilfe nicht lernst, wirst du hier für jeden kleinen Pup einen Thread aufmachen, und dich dann nicht ganz zu unrecht diversen Anfeindungen entgegen sehen.


Alle Zeitangaben in WEZ +1. Es ist jetzt 00:35 Uhr.

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