Delphi-PRAXiS

Delphi-PRAXiS (https://www.delphipraxis.net/forum.php)
-   Object-Pascal / Delphi-Language (https://www.delphipraxis.net/32-object-pascal-delphi-language/)
-   -   Delphi Zeichnung (https://www.delphipraxis.net/5926-zeichnung.html)

woodie17 23. Jun 2003 14:27


Zeichnung
 
Liste der Anhänge anzeigen (Anzahl: 1)
HI wieso zeichnet der wenn man als seitenlängen bei a=4, b=5 und c=3
b falsch?

JoelH 23. Jun 2003 18:05

hmm,
 
was ist denn b ? Leider fehlen mir da die Bezeichnungen ab den Geraden, dann wäre alles klarer ;)

flomei 23. Jun 2003 18:24

Was mich stört ist das auftauchende Fenster das mir sagt: "Das Dreieck ist konstruierbar." Das stört unheimlich. Würd ich wegmachen.

MfG Florian :hi:

P.S.: Ach ja, Bezeichnungen wären wirklich sehr sinnvoll.

woodie17 23. Jun 2003 20:57

hmm ja stimmt das mit den seiten dass da nix dransteht aber ich weiss nich wie ich da was dranschreiben lassen kann
also unten die seite ist c oben links die is seite a un oben rechts b

und das mit dem showmessage kram kann ich ja noch wegmachen

mfg martin

woodie17 23. Jun 2003 21:06

also ist links unten auch alpha, rechts unten beta un oben gamma

so aber der zeichnet wenn beta 90° ist für beta keine 90°

das wäre zb bei a=4 b=5 un c=3

woodie17 23. Jun 2003 21:14

ach übrigens das zeichnen liegt auf der procedure vom bottom 2 :coder:

Biohazard 25. Jun 2003 09: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]

Biohazard 25. Jun 2003 10:13

Huch,

Hab da was übersehen. In bei den IF's mußt du noch a,b,c durch a2,b2,c2 ersetzen. a,b,c haben zu dieser zeit ja noch keinen Wert zugewiesen bekommen.

[EDIT=Christian Seehase] Doppelposting gelöscht [/EDIT]

woodie17 25. Jun 2003 20:49

hi, danke aber das prog zeichnet nicht die richtigen winkel :cry:

mfg martin

Tiefflieger 25. Jun 2003 21:59

moin,
binde noch zusätzlich die unit "math" ein, dann steht dir die funktion arccos zur verfügung und du brauchst sie nciht selbst zu schreiben ;)

woodie17 26. Jun 2003 17:55

hi, geht nicht, weil das prog sollten wir für die Schule schreiben und dort gibt es nur delphi3 und delphi3 hat diese unit nicht

mfg martin

Biohazard 27. Jun 2003 09:50

Hallo,

hab da wohl zu kompliziert gedacht

in der Funktion Dreieck:
in der Zeile
Code:
x1 := q*laenge/c;
q durch p ersetzen

in der Procedure button2click:

- Variablen a2,b2,c2 brauchst du nicht
- Bedingungen welche Seite die größte ist brauchst du auch nicht

so sieht es dann aus:

Code:
procedure TForm1.Button2Click(Sender: TObject);
var err1,err2,err3 :integer;
begin
  val(edit1.text,a,err1);
  val(edit2.text,b,err2);
  val(edit3.text,c,err3);
  dreieck(a,b,c);
end;
ich würde aber noch eine Bedingung einbauen, wenn z.B. eine Seite zu kurz ist oder solche ähnlichen Sachen

ich habe dann noch den faktor in der Zeile
Code:
laenge := 0.9 * form1.paintbox1.width;
auf 0.5 gesetzt da es sonst über die Fläche hinaus ging.
Vieleicht gibt es da ja noch ne bessere Berechnung/Lösung dafür.

Bei mir haben die Winkel funtioniert, jedenfalls die wo ich das mit dem Auge abschätzen konnte.

woodie17 27. Jun 2003 18:14

hallo Biohazard danke,
aber ich blicke grade nicht durch,
wie würde der quelltext jez als ganzes aussehen? *ggg*
Gruss woodie

Biohazard 30. Jun 2003 11:10

Liste der Anhänge anzeigen (Anzahl: 1)
Hallo,

das ist aber nicht Sinn und Zweck eines Lernprozesses. :)

Ich will mal nicht so sein. An der andere Prozedure mit den reinen Berechnungen hab ich aber nichts verändert.
Wie gesagt, ein paar Kleinigkeiten mit dem Maßstab müssten noch bereinigt werden.

woodie17 30. Jun 2003 13:07

hi, danke

aber das mit dem lernprozess war gut :lol:

gruss martin


Alle Zeitangaben in WEZ +1. Es ist jetzt 03:38 Uhr.

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