Thema: Delphi Zeichnung

Einzelnen Beitrag anzeigen

Biohazard

Registriert seit: 20. Mär 2003
46 Beiträge
 
#7
  Alt 25. Jun 2003, 10:34
Hallo,
Habe mir mal die Freiheit genommen deinen Quelltext abzuändern. Mit deinen Berechungen bin ich irgendwie nicht klargekommen. Ist nur ein Test und ich weiß nich ob es für alle Variationen funzt. Die meisten die ich probiert habe, gingen.
Mir ist nur aufgefallen, daß manchmal nicht das richtige Größenverhältnis gezeichnet wird(z.B. bei a=5,b=4,c=3 da geht es über den Rand hinaus). Vieleicht muß ja nur was an den Umrechnungsfaktoren geändert werden.
Probiers halt mal aus, wenn es dir was nützt.
Delphi-Quellcode:
procedure TForm1.Button2Click(Sender: TObject);
var x_start,y_start,err1,err2,err3: integer;
x1, h1, laenge,a,b,c,a2,b2,c2 :double;
    p,q,hp,hq:Extended;

function dreieck(SeiteA,SeiteB,SeiteC : double): double;
begin
try
      p:=(c*c + b*b - a*a)/(2*c); //P = Lotabschnitt von c auf der b-Seite
      q:=(c*c + a*a - b*b)/(2*c); //q = Lotabschnitt von c auf der a-Seite

      hp := b*b - p*p; //wobei nur hp oder hq gebraucht wird
      hq := a*a - q*q; //ist ein und der selbe Wert (Höhe)
      hp := sqrt(hp); //wurde nur zur konntrolle 2 mal berechnet
      hq := sqrt(hq);
      laenge := 0.9 * paintbox1.width;
      h1 := hp*laenge/c;
      x1 := q*laenge/c;
      c := laenge;
      {Zeichne Dreieck}
      x_start := round(0.05*paintbox1.width);
      y_start := round((paintbox1.height + h1) / 2);

      with paintbox1.canvas do
      begin
        rectangle(0,0,paintbox1.height,paintbox1.width);
        MoveTo(x_start, y_start);
        LineTo(x_start + round(c), y_start);
        LineTo(x_start + round(x1), y_start - round(h1));
        LineTo(x_start, y_start);
      end; {of with}
    except
    showmessage('Sorry, Probleme beim Zeichnen!');
  end;
end;

begin {Lege Maximum auf c}
  val(edit1.text,a2,err1);
  val(edit2.text,b2,err2);
  val(edit3.text,c2,err3);
  if (c>b) and (c>a) then
  begin
  a:=a2;
  b:=b2;
  c:=c2;
  dreieck(a,b,c);
  end;
  if (a>b) and (a>c) then
  begin
  c:=a2;
  b:=b2;
  a:=c2;
  dreieck(a,b,c);
  end;
 if (b>c) and (b>a) then
  begin
  b:=a2;
  c:=b2;
  a:=c2;
  dreieck(a,b,c);
  end;
if (b=c) and (b=a) and (c=a) then
  a:=a2;
  b:=b2;
  c:=c2;
  dreieck(a,b,c);

end;
[edit=Daniel B]Delphi-Tags eingefügt. MfG Daniel B.[/edit]
  Mit Zitat antworten Zitat