View Full Version : [FRAGE] - Bsp2 Z-Koordinatenberechnung
lowrider
15-10-2004, 00:15
* - Note that our points have a z-component, which should also be set correctly for an intersection point!
* To do this, calculate an interpolated value at the right distance between the z values of p1 and p2.
hallo,
Im Code steht dass man für unsere CGPoints die zKoordinaten berechnen soll. Kann mir jemand weiterhelfen, wie man diese berechnen kann? Hab im Buch und im Skriptum nichts gefunden?!?
Danke
lowrider
creature
15-10-2004, 19:37
Ich glaube nicht, dass du sie extra berechnen musst. Ich gebe die Punkte einfach weiter wie sie sind.
thebigMuh
15-10-2004, 20:13
Naja, wenn durch clipping ein neuer Punkt entsteht, dann mußt du dir schon die z-Koordinate auch ausrechnen.
Schau mal da her: http://www.informatik-forum.at/showthread.php?t=22615
Ciao, ¡muh!
Hab ein Problem.
Bei meinen Z Koordinaten Berechnungen kommt bei zLinie4 ein falscher Wert raus.
85.25
Habe probiert den Code auf einem anderen PC zu kompilieren, dort kommt mir das richtige Ergebnis raus. Woran kann das liegen??????? Hilfe
hast du geschaut ob das fenster auch die richtige grösse hat ?
Der Canvas? Nein hab ich nicht, wo ist denn die richtige Größe?
thebigMuh
20-10-2004, 01:33
wMin und wMax, das sind Member der CG1Polygon Klasse. Die enthalten die obere linke und untere rechte Ecke des Viewports.
Ciao, ¡muh!
wMin und wMax, das sind Member der CG1Polygon Klasse. Die enthalten die obere linke und untere rechte Ecke des Viewports.
Ciao, ¡muh!
Wmin und Wmax werden ja erzeugt die passen schon.
Was mich wundert ist, dass es bei allen andern zLinien ohne Troubles geht unr bei zLinie4 verhaut er die y und die z Koordinate vom Schnittpunkt und das auch nur auf meinem PC auf dem meiner Eltern rennts ohne Probleme, genau der selbe Code!
Ich krieg die Krise.
Das wird mir bei den nächsten Beispielen nicht gerade helfen.
Kann es sein, dass es an meinem JDK 1.4.1_2 liegt?
el hafos
20-10-2004, 01:49
Bei mir ist der Schnittpunkt des Files/Objektes zLinie4.atoff = (200 | 514 | 85.75).
Allerdings habe ich Canvas-Abmessungen von canvas.getWidth() = 502 und canvas.getHeigth() = 516. Diese Werte liefert mir das Kastl, ohne dass ich die Fenstergröße vorher ändere.
canvas-größe laut LVA-HP (http://www.cg.tuwien.ac.at/courses/CG/LU/Beispiel2.html#Beispiel 2) :
...Um das testen zu können, steht in den Dateien zLinie1-4.atoff, die jeweils nur eine einfache Linie enthalten, der Schnittpunkt als Kommentar dabei (x - y - z Koordinate). Die Werte sollten für einen canvas von 500x521 pixel gelten.
Ich habe das Ganze mit verschiedenen Canvasgrößen ausprobiert (durch händisches Ziehen der Fenstergröße mit der Maus und gleichzeitiger Ausgabe der Canvas-Größe in der Konsole).
Bei einem Canvas 500x521 liefert mir zLinie4.atoff jedoch einen Schnittpunkt von (200 | 519 | 85.125).
Den laut Kommentar in zLinie4.atoff richtigen Schnittpunkt (200 | 521 | 84.875) bekomme ich erst bei einem Canvas von 500x523 Pixeln.
Ich erkläre mir das Ganze durch folgendes (verdefiniertes) Codefragment in CG1Polygon.java:
protected void clip (CG1Canvas canvas)
{
wMin = new Point (1, 1);
wMax = new Point (canvas.getWidth()-2, canvas.getHeight()-2);
...
Der Canvas wird beim Clippen auf jeder Seite um 1 Pixel beschnitten.
Deswegen muss man die Höhe im konkreten um zwei Pixel größer wählen, um gleiche Bedingungen zu erhalten. (Anm.: Die Canvas-Breite spielt in zLinie4.atoff praktisch keine Rolle bei der Berechnung der z-Koordinate).
Bei einem Canvas von 500x523 Pixeln bekommst du erst die richtigen Werte?
Aber sie sollten schon bei einem Canvas von 500x521 da sein.
???
EDIT:
Habe langsam das JDK unter Verdacht. Mal schaun ob es sich bewahrheitet.
EDIT EDIT:
Finally habs gelöst! Es lag an meinem dummen StyleXP + MacOSX Panther Theme.
Dadurch stimmen scheinbar die Proportionen des Canvas nicht genau weil eine ander Schriftart verwendet wird usw...
Wenn ich auf Windows XP Klassisch wechsel bei einer Auflösung von 1024*768 dann klappt es mit den Werten.
Was is das den für ein f**** :mad:
el hafos
21-10-2004, 02:44
:D
...Wenn ich auf Windows XP Klassisch wechsel bei einer Auflösung von 1024*768 dann klappt es mit den Werten...Kaum zu glauben, aber wahr: Bei mir das gleich in grün. Nach Abschalten des Windows-XP Style bekomme ich bei der voreingestellten Framework-Größe den richtigen Schnittpunkt bei zLinie4.atoff.
@Boromir: Danke für den Hinweis!
Tatsache bleibt aber, dass der Canvas selbst noch immer die Abmessungen 502x523 hat. wMin = [1,1] und wMax = [500, 521]
Keine Ahnung, wieso auf der Homepage eine explizite Canvas-Größe von 500x521 angegeben wird.
ille_pille
21-10-2004, 03:38
Bei mir ist der Schnittpunkt des Files/Objektes zLinie4.atoff = (200 | 514 | 85.75).
Allerdings habe ich Canvas-Abmessungen von canvas.getWidth() = 502 und canvas.getHeigth() = 516. Diese Werte liefert mir das Kastl, ohne dass ich die Fenstergröße vorher ändere.
canvas-größe laut LVA-HP (http://www.cg.tuwien.ac.at/courses/CG/LU/Beispiel2.html#Beispiel%202) :
Ich habe das Ganze mit verschiedenen Canvasgrößen ausprobiert (durch händisches Ziehen der Fenstergröße mit der Maus und gleichzeitiger Ausgabe der Canvas-Größe in der Konsole).
Bei einem Canvas 500x521 liefert mir zLinie4.atoff jedoch einen Schnittpunkt von (200 | 519 | 85.125).
Den laut Kommentar in zLinie4.atoff richtigen Schnittpunkt (200 | 521 | 84.875) bekomme ich erst bei einem Canvas von 500x523 Pixeln.
Ich erkläre mir das Ganze durch folgendes (verdefiniertes) Codefragment in CG1Polygon.java:
Der Canvas wird beim Clippen auf jeder Seite um 1 Pixel beschnitten.
Deswegen muss man die Höhe im konkreten um zwei Pixel größer wählen, um gleiche Bedingungen zu erhalten. (Anm.: Die Canvas-Breite spielt in zLinie4.atoff praktisch keine Rolle bei der Berechnung der z-Koordinate).
Vielleicht eine blöde Frage aber ich kriege es einfach nicht :(....wie öffnet man diese .ATOFF-Files?Erklär mir das bitte oder post die Schnittpunktwerte für die z.Linie1-4....danke
die z-koordinate berechnet man ganz genau gleich wie die x- bzw. y-koordinate, c.f. (http://www.informatik-forum.at/showpost.php?p=158638&postcount=18)
bin leider zu faul, das jetzt zu checken, aber wie es aussieht, wird im layout des "MainFrame" nicht die größe des canvas, sondern die größe des gesamten frame explizit angegeben. dadurch hängt die größe des canvas natürlich von der gestalt der fenster-dekorationen (rahmen, titelzeile, ...) ab. wenn man pixel-genau vergleichen will, könnte man das layout so ändern, dass der canvas die seleb größe hat wie in den screenshots. vielleicht freut mich das ja am wochenende ...
.atoff-files enthalten plain text, kann man also in jedem beliebigen editor aufmachen.
ille_pille
21-10-2004, 11:45
die z-koordinate berechnet man ganz genau gleich wie die x- bzw. y-koordinate, c.f. (http://www.informatik-forum.at/showpost.php?p=158638&postcount=18)
bin leider zu faul, das jetzt zu checken, aber wie es aussieht, wird im layout des "MainFrame" nicht die größe des canvas, sondern die größe des gesamten frame explizit angegeben. dadurch hängt die größe des canvas natürlich von der gestalt der fenster-dekorationen (rahmen, titelzeile, ...) ab. wenn man pixel-genau vergleichen will, könnte man das layout so ändern, dass der canvas die seleb größe hat wie in den screenshots. vielleicht freut mich das ja am wochenende ...
.atoff-files enthalten plain text, kann man also in jedem beliebigen editor aufmachen.
Danke. :))))
Ich habe von den dummen Fehlern gemacht, die schwer zu finden sind, weil du einfacht nicht glaubst dass du so etwas gemacht hast....aber jetzt scheint alles ok zu sein.:)
hey leute,
was ich jetzt schlussendlich noch nicht ganz gecheckt hab, ist wie man kontrolliert, ob man wohl die z-koordinate richtig berechnet.
wie (auch wenn die richtigen schnittpunkte im atoff file zu finden sein) kann ich das mit meiner ausgabe/berechnung vergleichen?
thx in advance, sneaky
Hmmm, also ich wollte die Berechnung der z Koordinaten eigentlich genauso vorgehen, wie mit den anderen koordinaten, aber irgendwie kommt mir bei der beim Bottom und Top clipping ein falsche z Wert raus...
ich hab analog zu m die Steigung n zwischen x und z berechnet...
n = (p1.z - p2.z) / (p1.x - p2.x);
und dann berechne ich beim bottom clip:
if (p1.z != p2.z) iPt.z = p2.z + (wMin.getY() - p2.y) / n;
else iPt.z = p2.z;
dabei kommen mir aber völlig falsche werte raus... kann man das nicht einfach mal so umbaun?
hey leute,
wie (auch wenn die richtigen schnittpunkte im atoff file zu finden sein) kann ich das mit meiner ausgabe/berechnung vergleichen?
thx in advance, sneaky
print_clipped() in clip() aufrufen
ille_pille
21-10-2004, 22:36
Hmmm, also ich wollte die Berechnung der z Koordinaten eigentlich genauso vorgehen, wie mit den anderen koordinaten, aber irgendwie kommt mir bei der beim Bottom und Top clipping ein falsche z Wert raus...
ich hab analog zu m die Steigung n zwischen x und z berechnet...
n = (p1.z - p2.z) / (p1.x - p2.x);
und dann berechne ich beim bottom clip:
if (p1.z != p2.z) iPt.z = p2.z + (wMin.getY() - p2.y) / n;
else iPt.z = p2.z;
dabei kommen mir aber völlig falsche werte raus... kann man das nicht einfach mal so umbaun?
Also ich habe das wie hier beschrieben gemacht: http://www.informatik-forum.at/showpost.php?p=158638&postcount=18
Für die verschiedenen Fälle musst du nur r ändern.
Vertical clipping: r=(wMin.x - start.x) / (end.x - start.x)
oder r=(wMax.x-start.x)/(end.x-start.x)
Horizontal clipping: r=(wMin.y - start.y) / (end.y - start.y)
oder r=(wMax.y-start.y)/(end.y-start.y)
Es funktioniert wunderbar.
Danke n3x :thumb:
vBulletin® v3.7.1, Copyright ©2000-2009, Jelsoft Enterprises Ltd.