Autor Beitrag
Barret
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starontopic star
Beiträge: 156
Erhaltene Danke: 1

Win XP
D7 Ent
BeitragVerfasst: Do 15.04.04 16:29 
hallo leute
ich da son kleines prob
also ...

ich zeichne eine kurve mit hilfe einer wihle-schleife und speicher die werte in einen arrey
anschliesend gebe ich diese kurve aus

den letzten arrey-wert speicher ich extra nochmal in einer variable und verwende ihn um eien koordinatenstrich
an dem koordinatensysrem zu zeichnen

bis hir funzt noch alles

jetzt will ich unter anderem die hälfte von dem gespeicherten arrey-wert haben um den nächsten strich zu zeichnen

aber wenn ich die variable durch zwei teile geht der nächste strich ein kleines stückchen nach oben und nicht nach unten
dadurch muss ich erst mal rechnen

aber ich muss den wert mal zehn rechnen um ungefähr die mitte zu erreichen


das alles wär kein prob wenn es nur für eine kurve funtzen soll, aber es soll dynamisch an andere kurven angepasst werden sollen

kann mir einer sagen wie ich die rechnung für die striche schreiben muss

ich setz mal noch ein kleines bissel quellcode rein

_________________
Wir könnten ja, wenn wir wollten aber wir wollen ja nicht.
It´s not a bug, it´s a feature.
Barret Threadstarter
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starontopic star
Beiträge: 156
Erhaltene Danke: 1

Win XP
D7 Ent
BeitragVerfasst: Do 15.04.04 16:33 
hir also der code

variablen
ausblenden Delphi-Quelltext
1:
2:
3:
4:
5:
6:
7:
8:
9:
10:
11:
12:
13:
14:
15:
  var Betriebsspannung :real;
      Widerstand :real;
      Kondensator :real;
      Tau :real;
      Zeit :real;
      i :integer;
      igenau :real;
      Uc :real;
      k :integer;
      Schritte :integer;
      Kondensatorspannung : array [0..32000of double;
      Pixelhoehe :real;
      Pixelbreite :real;
      Abstand : integer;
      KStand :integer;


und der eigentlich text

ausblenden volle Höhe Delphi-Quelltext
1:
2:
3:
4:
5:
6:
7:
8:
9:
10:
11:
12:
13:
14:
15:
16:
17:
18:
19:
20:
21:
22:
23:
24:
25:
26:
27:
28:
29:
30:
31:
32:
33:
34:
35:
36:
37:
38:
39:
40:
41:
42:
43:
44:
45:
46:
47:
48:
49:
50:
51:
52:
53:
54:
55:
56:
57:
58:
59:
60:
61:
62:
63:
64:
65:
66:
67:
68:
69:
70:
71:
72:
73:
74:
75:
76:
77:
78:
79:
80:
81:
  Zeit := 0;
  i := 0;
  Uc := 0;

  //berechnen für die Aufladung
  if (Form1.Aufladung.Checked = true) then  //überprüfung ob Aufladung aktiv ist
    begin
      while Uc <= (Betriebsspannung - (Betriebsspannung / 100)) do  //Anweisung für while-Schleife
        begin
          Uc := Betriebsspannung * (1 - exp(-Zeit / Tau));
          Kondensatorspannung [i] := Uc;
          Zeit := Zeit + (1 / 10000);
          i := i + 1;
        end
    end
    else
  //berechnen für die Entladung
      begin
        if (Form1.Entladung.Checked = true) then  //überprüfung ob Entladung aktiv ist
          begin
            Uc := Betriebsspannung;
            while Uc > (0 + Betriebsspannung / 1000do  //Anweisung für while-Schleife
              begin
                Uc := Betriebsspannung * exp(-Zeit / Tau);
                Kondensatorspannung [i] := Uc;
                Zeit := Zeit + (1 / 100);
                i := i + 1;
              end
          end
      end;

  Schritte := i;
  i := 0;
  igenau := 0;
  Abstand := 30;
  k := Abstand;
  Pixelhoehe := Schritte /(ImgKurve.Height - Abstand);
  Pixelbreite := Schritte /(ImgKurve.Width - Abstand);

  //zeichen der Kurve
  repeat
    if (i = 0then  //überprüfung ob i gleich Null ist
      begin
        ImgKurve.Canvas.Pen.Color := clblack;  //Linienfarbe (Schwarz)
        ImgKurve.Canvas.Pen.Width := 1;  // Linienbreite (1)
        ImgKurve.Canvas.MoveTo(Abstand, ImgKurve.Height - Abstand);
        i := i + 1;
      end
      else
        begin
          ImgKurve.Canvas.Pen.Color := clblack;  //Linienfarbe (Schwarz)
          ImgKurve.Canvas.Pen.Width := 1;  // Linienbreite (1)
          ImgKurve.Canvas.LineTo(k,ImgKurve.Height - Abstand - (round(Kondensatorspannung [i] * (ImgKurve.Height - Abstand))));
          KStand := ImgKurve.Height - Abstand - (round(Kondensatorspannung [i] * (ImgKurve.Height - Abstand)));
          i := round(igenau + Pixelbreite + Pixelhoehe);
          igenau := igenau + Pixelbreite + Pixelhoehe;
          k := k + 1;
        end;
  until i >= Schritte;
    if (Form1.Aufladung.Checked = true) then  //überprüfung ob Aufladung aktiviert ist
      begin
        ImgKurve.Canvas.Pen.Color := clblack;  //Linienfarbe (Schwarz)
        ImgKurve.Canvas.Pen.Width := 1;  // Linienbreite (1)
        ImgKurve.Canvas.LineTo(ImgKurve.Width - 30,KStand - 5);
      end
      else
        begin
          if (Form1.Entladung.Checked = true) then  //überprüfung ob Entladung aktiviert ist
            begin
              ImgKurve.Canvas.Pen.Color := clblack;  //Linienfarbe (Schwarz)
              ImgKurve.Canvas.Pen.Width := 1;  // Linienbreite (1)
              ImgKurve.Canvas.LineTo(ImgKurve.Width - 30,ImgKurve.Height - Abstand);
            end;
        end;

  //Skalierstriche waagerecht
    ImgKurve.Canvas.Pen.Width := 3;  // Linienbreite (3)

    ImgKurve.Canvas.MoveTo(25,KStand);  //Skalierstrich oben
    ImgKurve.Canvas.LineTo(30,KStand);
    ImgKurve.Canvas.TextOut(5,KStand,EBetriebsspannung.Text);  //Textausgabe


die sachen wie Widerstand und betriebsspannung werden schon vorher abgefragt und initialisiert

_________________
Wir könnten ja, wenn wir wollten aber wir wollen ja nicht.
It´s not a bug, it´s a feature.
Segelflieger
ontopic starontopic starontopic starontopic starontopic starontopic starhalf ontopic starofftopic star
Beiträge: 124

WinXP Pro
D7 Prof
BeitragVerfasst: Do 15.04.04 17:08 
Kannst du bitte mal den Code posten, in dem du den Wert halbierst und einzeichnest?.

Ohne den lässt sich schwer etwas erkennen.

_________________
Früher hatten die Menschen Angst vor der Zukunft. Heute muss die Zukunft Angst vor den Menschen haben.
Barret Threadstarter
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starontopic star
Beiträge: 156
Erhaltene Danke: 1

Win XP
D7 Ent
BeitragVerfasst: Fr 16.04.04 07:07 
ausblenden Delphi-Quelltext
1:
2:
ImgKurve.Canvas.MoveTo(25,(round(KStand * 10)));  //Skalierstrich oben 
    ImgKurve.Canvas.LineTo(30,(round(KStand * 10)));


so komme ich ungefär auf die hälfte von meiner kurve
aber das funktioniert nur bei meiner standart kurve mit bestimten werten
wenn ich die werte verändere um die kurve zu stauchen bzw. zu strcken bekomme ich nur den KStand wert angezeigt

muss ich eventuel mit dem ersten arrey wert rechnen um das hinzubekommen :?:

wenn einer von euch ahnung hat schreibt bitte rein

_________________
Wir könnten ja, wenn wir wollten aber wir wollen ja nicht.
It´s not a bug, it´s a feature.