PDA

View Full Version : [PROBLEM] - methode intersect() - steigung


grassi3000
16-10-2004, 18:18
in der methode wird ja unter speziellen bedingungen (x1!=x2) die steigung der geraden festgelegt.

wenn ich es allerdings so mache, wie im buch, dass ich die steigung vorher nicht mit einem default wert initialisiere, dann kann es sein, dass die steigung keinen wert bekommt, und mein programm kompiliert nicht, da ich auch die y coordinaten in allen fällen nicht berechnen kann.

was muss ich dann bei der if abfrage, ob x1!=x2 ist, reinschreiben, wenn x1==x2 ist, sodass ich die steigung richtig initialisiere?

sprich, wie rechne ich mir die y coordinaten aus, wenn x1 == x2 ist, und ich mich im case LEFT, RIGHT befinde?

mfg
g3k

NightHaG
16-10-2004, 20:44
Das ist unmöglich. Wenn x1 = x2 der Fall ist dann geht die Strecke von oben nach unten. Und da kriegst du entweder unendlich Schnittpunkte oder gar keinen. Dieser Fall wird deswegen abgefangen weil wenn x1=x2 der Fall ist, wird beim errechnen der Steigung durch 0 dividiert.

Foolish_Genius
16-10-2004, 21:11
initialisiere m einfach mit 0.0: dann kompiliert alles.

der linke und der rechte rand des clipping bereichs können im Fall x1 == x2 gar nicht geschnitten werden, da die linie ja parallel (vertikal) verläuft. es ist daher egal was m für einen Wert hat, da du nie in einen dieser Fälle kommen wirst.

und bei den BOTTOM und TOP Begrenzungen wird dieser Fall ja speziell behandelt.

n3x
18-10-2004, 08:29
in der methode wird ja unter speziellen bedingungen (x1!=x2) die steigung der geraden festgelegt.
ich nehme an, mit den anderen antworten hier ist dir eh schon geholfen, aber es gibt noch eine bessere lösung. der code im buch enthält so einige unschöne details (antipatterns), die man eigentlich vermeiden sollte -- z.b. mehrere statements auf einer einzigen zeile. wahrscheinlich nicht aus blödheit, sondern damit der code besser auf die seite passt, oder fallweise vielleicht auch aus didaktischen gründen.

jedenfalls kommt es dort sehr oft vor, dass sämtliche variablen, die in einer funktion gebraucht werden, gleich am anfang der funktion definiert werden -- auch, wenn sie nur innerhalb eines einzigen unter-blocks (if, for, whatever) wirklich gebraucht werden. wenn du deine variablen nur da definierst, wo du sie auch wirklich brauchst, tritt so ein problem erst gar nicht auf. fehler (oder jedenfalls potentielle fehler), die bei einem workaround (wie oben vorgeschlagen) auftreten können, können dadurch schon vom compiler abgefangen werden und dich später nicht mehr ärgern.