AGB  ·  Datenschutz  ·  Impressum  







Anmelden
Nützliche Links
Registrieren
Thema durchsuchen
Ansicht
Themen-Optionen

Tangeskurve

Ein Thema von faux · begonnen am 15. Feb 2005 · letzter Beitrag vom 15. Feb 2005
Antwort Antwort
Seite 2 von 3     12 3      
Benutzerbild von Binärbaum
Binärbaum

Registriert seit: 19. Jan 2005
Ort: Elstra
764 Beiträge
 
Delphi 7 Enterprise
 
#11

Re: Tangeskurve

  Alt 15. Feb 2005, 18:48
Zitat von idontwantaname:
könnte irgendwann eine division durch 0 erfolgen ??
Ja, nämlich immer dann, wenn der Winkel ein ganzzahliges ungerades vielfache von Pi/2 ist. Also bei (2*k+1)*Pi.
Um das abzufangen kann man folgendes machen:
Delphi-Quellcode:
var x: Integer;//Winkel in Grad
...

if (x-90) mod 180 = 0 then begin
 //Tangens ist an dieser Stelle nicht definiert
 ...
end
else begin
 //Kurve zeichnen
end;
MfG
Binärbaum
There are exactly 10 kinds of people: those who understand binary, and those who don't.
---
"Software reift beim Kunden. Bei Hardware ist es anders: Hardware fault beim Kunden." - Rainer G. Spallek
  Mit Zitat antworten Zitat
Benutzerbild von faux
faux

Registriert seit: 18. Apr 2004
Ort: Linz
2.044 Beiträge
 
Turbo Delphi für Win32
 
#12

Re: Tangeskurve

  Alt 15. Feb 2005, 18:52
Hallo!

Also eine Division schließe ich mal aus, denn dann würde die Fehlermeldung ja "Division by Zero" lauten...
Zur Sicherheit hab ich das mal mit folgender Anweisung ausgeschlossen:

Delphi-Quellcode:
for x := 0 to Image1.Width do
  if cos(x / Image1.Width * Frq.Value * pi) <> 0 then
  begin
    y := round(Amp.Value * tan(x / Image1.Width * Frq.Value * pi));
    LineTo(x, Image1.Height div 2 - y);
  end;
Also ich hab die Stelle jetzt:

Delphi-Quellcode:
for x := 0 to Image1.Width do
begin
  y := round(Amp.Value * tan(x / Image1.Width * Frq.Value * pi)); //Hier ist es....
  LineTo(x, Image1.Height div 2 - y);
end;
Den Wert hab ich noch nicht herausgefunden, aber vielleicht bringt da ja jemand zusammen...
Miniaturansicht angehängter Grafiken
functnr_321.jpg  
Faux Manuel
Wer weiß, dass er nichts weiß, weiß mehr, als der der nicht weiß, dass er nichts weiß.
GoTrillian
  Mit Zitat antworten Zitat
Benutzerbild von faux
faux

Registriert seit: 18. Apr 2004
Ort: Linz
2.044 Beiträge
 
Turbo Delphi für Win32
 
#13

Re: Tangeskurve

  Alt 15. Feb 2005, 18:57
Zitat von idontwantaname:
wieso eigentlich:
for x := 0 to Image1.Width wäre es nicht eher:
for x := 0 to Image1.Width - 1
dann müsste es aber auch for x := 1 to Image1.Width - 1 heißen...

Aber es ist schon so in Ordnung. Denn 1. zeichnet Delphi die Werte trotzdem, und außerdem ist der Wert Image1.Width IMHO noch im Bild.
Faux Manuel
Wer weiß, dass er nichts weiß, weiß mehr, als der der nicht weiß, dass er nichts weiß.
GoTrillian
  Mit Zitat antworten Zitat
Benutzerbild von dizzy
dizzy

Registriert seit: 26. Nov 2003
Ort: Lünen
1.932 Beiträge
 
Delphi 7 Enterprise
 
#14

Re: Tangeskurve

  Alt 15. Feb 2005, 19:01
Zitat von faux:
und außerdem ist der Wert Image1.Width IMHO noch im Bild.
Ist er NICHT. Zeichne mal einen einzelnen Pixel dahin, und sag mir ob du ihn siehst . Deinem Screenshot nach ist es aber wohl nicht die Zeichenroutine (die in der Regel gegen "Überm-Rand-Zeichnen" gesichert sind), sondern dein Prog fliegt bei einer Polstelle raus.
Ich vermute mal, dass das Ergebnis der Division, wenn 0 schon ausgeschlossen ist, zu groß für den Datentyp wird, und deshalb abgebrochen wird. Du solltest also Divisionen von -0.0...01 bis +0.0...01 ausschließen, und nicht nur 0 selbst.

Gruss,
Fabian
Fabian K.
INSERT INTO HandVonFreundin SELECT * FROM Himmel
  Mit Zitat antworten Zitat
Benutzerbild von ibp
ibp

Registriert seit: 31. Mär 2004
Ort: Frankfurt am Main
1.511 Beiträge
 
Delphi 7 Architect
 
#15

Re: Tangeskurve

  Alt 15. Feb 2005, 19:01
was ist mit den x-werten, wo tangens unendlich ist (cos(x)=0)! wo filterst du die in deinem code aus?
  Mit Zitat antworten Zitat
Benutzerbild von faux
faux

Registriert seit: 18. Apr 2004
Ort: Linz
2.044 Beiträge
 
Turbo Delphi für Win32
 
#16

Re: Tangeskurve

  Alt 15. Feb 2005, 19:12
Hallo!

Ich hab die FOR - Schleife jetzt Schritt für Schritt nachgerechnet (*g*)...
Und bin auch mit meinem TR bei 61 auf eine Polstelle gestoßen...
Und siehe da: Bei X = 61 hängt das Programm....

Wieso ist das so?
Deswegen:
Formel:
tan(X / Image1.Width * 4 * Pi)
Image1.Width ist 488

Rechengang:
tan(X) = sin(X) / cos(x)
cos(61 / 488 * 4 * Pi) = 0

Wieso erkennt das mein Programm nicht, wenn ich schreibe:
if cos(X / Image1.Width * 4 * Pi) <> 0
Faux Manuel
Wer weiß, dass er nichts weiß, weiß mehr, als der der nicht weiß, dass er nichts weiß.
GoTrillian
  Mit Zitat antworten Zitat
Benutzerbild von Binärbaum
Binärbaum

Registriert seit: 19. Jan 2005
Ort: Elstra
764 Beiträge
 
Delphi 7 Enterprise
 
#17

Re: Tangeskurve

  Alt 15. Feb 2005, 19:15
Zitat von faux:
Also eine Division schließe ich mal aus, denn dann würde die Fehlermeldung ja "Division by Zero" lauten...
Die meldung heißt ja "Invalid floating point operation", und die Division durch null ist meiner Meinung nach auch eine ungültige Operation

MfG
Binärbaum
There are exactly 10 kinds of people: those who understand binary, and those who don't.
---
"Software reift beim Kunden. Bei Hardware ist es anders: Hardware fault beim Kunden." - Rainer G. Spallek
  Mit Zitat antworten Zitat
Benutzerbild von faux
faux

Registriert seit: 18. Apr 2004
Ort: Linz
2.044 Beiträge
 
Turbo Delphi für Win32
 
#18

Re: Tangeskurve

  Alt 15. Feb 2005, 19:24
Zitat von ibp:
was ist mit den x-werten, wo tangens unendlich ist (cos(x)=0)! wo filterst du die in deinem code aus?
Genau das meine ich, das mache ich nämlich und trotzdem tritt der Fehler auf:

Delphi-Quellcode:
for x := 0 to Image1.Width do
begin
  if cos(x / Image1.Width * 4 * pi) <> 0 then
  begin
    y := round(tan(x / Image1.Width * 4 * pi));
    LineTo(x, Image1.Height div 2 - y);
  end;
end;
Faux Manuel
Wer weiß, dass er nichts weiß, weiß mehr, als der der nicht weiß, dass er nichts weiß.
GoTrillian
  Mit Zitat antworten Zitat
Bart82

Registriert seit: 27. Aug 2004
24 Beiträge
 
Delphi 7 Professional
 
#19

Re: Tangeskurve

  Alt 15. Feb 2005, 19:34
@ibp: Das sind ja die Stellen mit Division durch 0! Die sind raus.
Carsten
Life's a piece of shit
when you look at it!
- Monty Python -
  Mit Zitat antworten Zitat
Benutzerbild von dizzy
dizzy

Registriert seit: 26. Nov 2003
Ort: Lünen
1.932 Beiträge
 
Delphi 7 Enterprise
 
#20

Re: Tangeskurve

  Alt 15. Feb 2005, 19:35
Weil 0 bei Floats nicht unbedingt genau 0 ist. Du musst eine klitze kleine Spanne um 0 herum abfangen.
Fabian K.
INSERT INTO HandVonFreundin SELECT * FROM Himmel
  Mit Zitat antworten Zitat
Antwort Antwort
Seite 2 von 3     12 3      


Forumregeln

Es ist dir nicht erlaubt, neue Themen zu verfassen.
Es ist dir nicht erlaubt, auf Beiträge zu antworten.
Es ist dir nicht erlaubt, Anhänge hochzuladen.
Es ist dir nicht erlaubt, deine Beiträge zu bearbeiten.

BB-Code ist an.
Smileys sind an.
[IMG] Code ist an.
HTML-Code ist aus.
Trackbacks are an
Pingbacks are an
Refbacks are aus

Gehe zu:

Impressum · AGB · Datenschutz · Nach oben
Alle Zeitangaben in WEZ +1. Es ist jetzt 14:01 Uhr.
Powered by vBulletin® Copyright ©2000 - 2024, Jelsoft Enterprises Ltd.
LinkBacks Enabled by vBSEO © 2011, Crawlability, Inc.
Delphi-PRAXiS (c) 2002 - 2023 by Daniel R. Wolf, 2024 by Thomas Breitkreuz