Entwickler-Ecke

Sonstiges (Delphi) - Wahrscheinlich ziemlich billiger Fehler im Source


area6 - Mo 24.06.02 10:03
Titel: Wahrscheinlich ziemlich billiger Fehler im Source
Hallo,

einmal wieder habe ich einen Kampf mit sinus, cosinus und Co.

Folgender Source hat einen Fehler, finden Sie ihn!!!

Quelltext
1:
2:
3:
4:
5:
6:
7:
8:
9:
10:
11:
12:
13:
14:
15:
16:
17:
18:
19:
20:
21:
22:
23:
if beta.Text<>'0' then begin            {Winkel beta ggb.}
                        if hypo.Text<>'0' then begin            {Hypothenuse ggb.}
                                b:= strtofloat(beta.Text);
                                hy:= strtofloat(hypo.Text);
                                a:= 90-b;            {einfach gemacht --> eine Möglichkeit an alpha zu kommen}
                                an:= cos(a)*hy;            {das kann er nicht richtig berechnen}
                                g:= sin(a)*hy;            {das auch nicht}
                                alpha.Text:= floattostr(a);
                                ank.Text:= floattostr(an);
                                gegen.Text:= floattostr(g);
                                exit;
                        end;
                        if ank.Text<>'0' then begin
                                b:= strtofloat(beta.Text);
                                an:= strtofloat(ank.Text);
                                a:= 90-b;
                                g:= tan(a)*an;
                                hy:= sqrt((g*g)+(an*an));
                                alpha.Text:= floattostr(a);
                                gegen.Text:= floattostr(g);
                                hypo.Text:= floattostr(hy);
                                exit;
                        end;

Nur zur Info:

1.) an = Ankathede; g = Gegenkathede; hypo = Hypothenuse; a = alpha; b = beta
2.) Math-Unit ist eingebunden und arcsin und arccos, etc. laufen.
3.) An der Umrechnung von Bogen- in Gradmaß liegt es auch nicht...

Viel Spass beim Suchrätsel...

cu, area6.

Code-Tags hinzugefügt. Tino


Torsten - Mo 24.06.02 12:02

Moinsen!

Wie ist das jetzt gemeint?
Hast Du damit ein Problem oder soll das ein Rätsel für uns sein?

Grüße

Torsten


Torsten - Mo 24.06.02 12:06

Ach ja, noch was.
Was soll Beta sein? Welcher Winkel?
Im rechtwinkligen Dreieck spielt nur der Winkel Alpha, also der von Hypotenuse und Ankatete eingeschlossene Winkel eine Rolle.

Beta wird bei Dir auch gar nicht verwendet. Also wozu?
Arbeite doch direkt mit Alpha.

Grüße

Torsten


Lemmy - Mo 24.06.02 12:58
Titel: Re: Wahrscheinlich ziemlich billiger Fehler im Source
area6 hat folgendes geschrieben:

3.) An der Umrechnung von Bogen- in Gradmaß liegt es auch nicht...


was soll der Müll?? Natürlich liegt der Fehler daran! Wo rechnest Du denn um??

Zitat aus der Onlinehilfe:

Beschreibung
Sin gibt den Sinus des mit X angegebenen Winkels im Bogenmaß (Rad) zurück.

und das steht so bei cos,... auch! Ansonsten rechnet das Zeugs...

Grüße
Lemmy


Torsten - Mo 24.06.02 13:14

Moinsen!

Ja, rechnet tut er wohl. Das habe ich auch eben festgestellt.
Also wo soll Dein Fehler sein?
Sag uns das doch bitte.

Und die Angabe im Bogenmaß ist ja kein Fehler. Ist nur eine Frage der Darstellung.

Grüße

Torsten


MathiasH - Mo 24.06.02 15:11

du ziehst von 90 b ab , 1/4 Kreis ist in dieser Maßeinheit(b und a) aber Pi/2 also a = Pi/2 - b und ab muss schon im Bogenmaß vorliegen.

MathiasH


area6 - Mo 24.06.02 16:35

o.k., also:

1.) beta ist deshalb dabei, weil beide Winkel eingegeben werden können
2.) mit der Umrechnung in Gradmaß (die ich nur kurzfristig aus dem source entfernt habe) kommt trotzdem nicht das richtige Ergebnis raus (das Ergebnis ist weder Grad- noch Bogenmaß, sondern schlicht falsch)


area6 - Mo 24.06.02 16:35

o.k., also:

1.) beta ist deshalb dabei, weil beide Winkel eingegeben werden können
2.) mit der Umrechnung in Gradmaß (die ich nur kurzfristig aus dem source entfernt habe) kommt trotzdem nicht das richtige Ergebnis raus (das Ergebnis ist weder Grad- noch Bogenmaß, sondern schlicht falsch)
3.) ó.g. ist mein Problem und ein Suchrätsel für Euch dazu


Torsten - Mo 24.06.02 16:41

Gib doch mal bitte ein Beispiel für eine Berechnung, die Deiner Meinung nach falsch ist.

Grüße

Torsten


area6 - Mo 24.06.02 16:42

o.k., also:

1.) für Torsten: beta ist deshalb dabei, weil beide Winkel eingegeben werden können

2.) für Lemmy: mit der Umrechnung in Gradmaß (die ich nur kurzfristig aus dem source entfernt habe) kommt trotzdem nicht das richtige Ergebnis raus, da das falsche Ergebnis nicht beim Winkel, sondern bei den Seitenlängen für An- und Gegenkathede, schliesslich ändert 90°-beta nichts in dem Maß von beta (demnächst bitte entweder erst selbst richtig lesen oder das posten unterlassen)

3.) für Torsten: o.g. ist mein Problem und ein Suchrätsel für Euch dazu


area6 - Mo 24.06.02 16:43
Titel: Nachtrag trigon. Fkt.
o.k., also:

1.) für Torsten: beta ist deshalb dabei, weil beide Winkel eingegeben werden können

2.) für Lemmy: mit der Umrechnung in Gradmaß (die ich nur kurzfristig aus dem source entfernt habe) kommt trotzdem nicht das richtige Ergebnis raus, da das falsche Ergebnis nicht beim Winkel, sondern bei den Seitenlängen für An- und Gegenkathede, schliesslich ändert 90°-beta nichts in dem Maß von beta (demnächst bitte entweder erst selbst richtig lesen oder einfach nix posten?!?)

3.) für Torsten: o.g. ist mein Problem und ein Suchrätsel für Euch dazu


Torsten - Mo 24.06.02 16:49

OK, soweit habe ich verstanden.
Dennoch mal bitte ein Beispiel für eine angeblich falsche Berechnung.

Grüße

Torsten


Lemmy - Mo 24.06.02 21:01
Titel: Re: Nachtrag trigon. Fkt.
area6 hat folgendes geschrieben:

2.) für Lemmy: mit der Umrechnung in Gradmaß (die ich nur kurzfristig aus dem source entfernt habe) kommt trotzdem nicht das richtige Ergebnis raus, da das falsche Ergebnis nicht beim Winkel, sondern bei den Seitenlängen für An- und Gegenkathede,...


Warum funktioniert bei mir dann dieser Code??


Quelltext
1:
2:
3:
4:
5:
6:
7:
8:
9:
10:
11:
12:
if beta.Text<>'0' then begin      {Winkel beta ggb.}
            if hypo.Text<>'0' then begin      {Hypothenuse ggb.}
                b:= strtofloat(beta.Text);
                hy:= strtofloat(hypo.Text);
                a:= 90-b;      
                an:= cos(a*pi/180)*hy;      //Umrechnug Teil 1
                g:= sin(a*pi/180)*hy;        //Umrechnung Teil 2
                alpha.Text:= floattostr(a);
                ank.Text:= floattostr(an);
                gegen.Text:= floattostr(g);
                exit;
            end;


Bei mir kommen bei folgenden Werten die richtigen Maße raus:

beta=45, Hypo=5: an=gg=3,5355..
beta=36.869897647, Hypo=5: an=4, gg=3


area6 hat folgendes geschrieben:

schliesslich ändert 90°-beta nichts in dem Maß von beta


Habe ich auch nie gesagt! Die Rechnung ist ja vollkommen korrekt. Du gehst aber mit der Winkeleinheit DEGREE in die Berechnung sin(a) bzw. cos(a). Dort muss aber die Winkeleinhat RADIANT stehen! Die Umrechnung erfolg mit PI/180.

area6 hat folgendes geschrieben:

(demnächst bitte entweder erst selbst richtig lesen oder einfach nix posten?!?)


Sorry für den Ton meines ersten Postings... *umverzeihungbitt*.... :oops:

Grüße
Lemmy


area6 - Mo 24.06.02 21:10

Die Umrechnung in Bogenmaß habe ich tatsächlich im code drin, daran lag es nicht, aber wie ich soeben feststellen konnte, hatte ich mehrere edits übereinander, das, was eingelesen wird unter dem, in das eingetragen wird, hat sich also erledigt :arrow: und ich dachte schon ich sei ein bißchen :mrgreen: nach stundenlangem, tagelangem Testen war ich der festen Überzeugung, daß der Code stimmt, nu, war ja auch so...

Für Lemmy nochmal ein Original-Ausschnitt aus dem Source incl. aller Umrechnungen:


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:
if beta.Text<>'0' then begin
                        if hypo.Text<>'0' then begin
                                b:= strtofloat(beta.Text);
                                hy:= strtofloat(hypo.Text);
                                a:= 90-b;
                                alpha.Text:= floattostr(a);
                                zw:= (a * pi)/180;
                                a:= zw;
                                an:= cos(a)*hy;
                                g:= sin(a)*hy;
                                ank.Text:= floattostr(an);
                                gegen.Text:= floattostr(g);
                                exit;
                        end;
                        if ank.Text<>'0' then begin
                                b:= strtofloat(beta.Text);
                                an:= strtofloat(ank.Text);
                                a:= 90-b;
                                alpha.Text:= floattostr(a);
                                zw:= (a * pi)/180;
                                a:= zw;
                                g:= tan(a)*an;
                                hy:= sqrt((g*g)+(an*an));
                                gegen.Text:= floattostr(g);
                                hypo.Text:= floattostr(hy);
                                exit;
                        end;


ne? Umrechnung stimmte schon, also ist die Lösung des Rätsels :arrow: KEINER 8) naja, bis demnächst....

cu, area6.


Torsten - Mo 24.06.02 21:28

Also haut nun alles hin?


area6 - Mo 24.06.02 22:09

Jupp, wie gesagt, das Problem entsprang meiner schlampigen Arbeit an der Oberfläche. :oops:


Torsten - Mo 24.06.02 22:14

Dann bin ich ja beruhigt. ;)

Grüße

Torsten


Chatfix - Mo 24.06.02 22:28

ich auch :mrgreen: