Registriert seit: 20. Mär 2003
46 Beiträge
|
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]
|