PDA

View Full Version : Nur Linien die komplett innerhalb liegen werden gezeichnet


leobasil
26-10-2002, 12:34
kann mir irgendjemand einen Tip geben, wo da der fehler liegt ?
ich bin selbst shcon ganz baff, dass das programm nach einmaligem schreiben sofort fehlerfrei compiliert hat, und auch die alten dinger alle zeichnet. allerdings von den neuen kein einziges, mit ausnahme des ....grossen unregelmässigen wasweissichwas ... da werden 2 linien gezeichnet. ich vermute jetzt einfach mal, dass im Moment nur die linien gezeichnet werden die komplett innen liegen ... kann mir jemand sagen wo da der fehler sein könnte ? so ganz durschau ich den source leider net :(

leobasil
26-10-2002, 12:54
vergesst den Post! hab doch irgendwo noch schwerwiegendere fehler, aber sollte das einer lesen kann er mir vielleicht trotzdem helfen:
meine clip schaut so aus:
protected void clip(CG1NewCanvas canvas)
{
/*
* TODO 2: clip routine und entsprechenden Hilfsmethoden (die bis jetzt nur
* dummy Werte zurueckgeben) schreiben...
*
* vorerst reichen wir nur die Punkte ungeclippt durch, die folgenden Zeilen
* kann man dann wieder loeschen
*
*/

//System.out.println("Clipping called!");
//double[] first[]
first=new double [N_EDGE]={0,0,0,0,}, s[N_EDGE];
int cnt=0;

for (int i=0; i<anz; i++)
{
clipPoint(pIn(i),LEFT);
closeClip();

//clipped[i][X] = (int)projected[i][X];
//clipped[i][Y] = (int)projected[i][Y];
}
}

und die passenden fehlermeldungen dafür sind die :

.\CG1Polygon.java:159: illegal start of expression
first=new double [N_EDGE]={0,0,0,0,}, s[N_EDGE];
^
.\CG1Polygon.java:79: possible loss of precision
found : double
required: float
if (p1[X]!=p2[X]) m = (p1[Y]-p2[Y])/(p1[X]-p2[X]);
^
.\CG1Polygon.java:111: operator ! cannot be applied to double[]
if (!first[edge]) first[edge]=point; //=>Fehlerquelle ?
^
.\CG1Polygon.java:159: cannot resolve symbol
symbol : variable N_EDGE
location: class CG1Polygon
first=new double [N_EDGE]={0,0,0,0,}, s[N_EDGE];
^
.\CG1Polygon.java:159: unexpected type
required: variable
found : value
first=new double [N_EDGE]={0,0,0,0,}, s[N_EDGE];
^
.\CG1Polygon.java:164: cannot resolve symbol
symbol : method pIn (int)
location: class CG1Polygon
clipPoint(pIn(i),LEFT);
^
6 errors


irgendjemand der weiss was falsch is, bzw. zu tun ist ?

Cha
26-10-2002, 13:47
die Methode closeClip() muss außerhalb der for-Schleife aufgerufen werden!!

Die Zeile mit first[EDGE].... brauchst du nicht!

Ich hoffe ich habe dir geholfen

Lukas
26-10-2002, 15:03
>.\CG1Polygon.java:79: possible loss of precision
>found : double
>required: float
>if (p1[X]!=p2[X]) m = (p1[Y]-p2[Y])/(p1[X]-p2[X]);

da musst du einfach einfach m als double deklarieren


>.\CG1Polygon.java:111: operator ! cannot be applied to double[]
>if (!first[edge]) first[edge]=point; //=>Fehlerquelle ?

da gehört != 0 hin.

ausserdem musst du statt pIn projected verwenden.

Länz
26-10-2002, 17:06
Original geschrieben von Lukas

if (!first[edge]) first[edge]=point; //=>Fehlerquelle ?

da gehört != 0 hin.

ausserdem musst du statt pIn projected verwenden. [/B]

Alternativ würd ich alles mit null initialisieren und dann mit !=null abfragen, da es ja auch "den Punkt mit 0-Koordinaten" gibt!

first = new double[4][2];//für alle 4 Seiten je 2 Koordinaten
first[0]=null;
first[1]=null;
first[2]=null;
first[3]=null;//alle 4 Möglichkeiten mit null initialisiert

Lukas
26-10-2002, 17:35
das man mit != null abfragen sollte stimmt natürlich, ich hab nur != 0 geschrieben weil ich bei != null einen compiler error gehabt hab (ich hab vorher mit first[i][X] statt first[i] != null abgefragt, deswegen is es nicht gegangen).

eine variable mit null initialisieren macht aber irgendwie keinen sinn oder? wenn eine variale null ist sollte das doch eigentlich das gleiche sein wie wenn sie nicht initialisiert ist oder? also imo müsste es prinzipiell egal sein ob man eine variable mit null initialisiert oder sie gar nicht initialisiert.

is aber leider nicht so... interessanterweise bekomm ich unmengen NullPointerExceptions wenn ich first mit null initialisiere... wenn ich es nicht initialsiere bekomm ich keine exceptions (es wird leider auch nix gezeichnet, aber ich glaub nicht dass das daran liegt).
irgendeine ahnung woran das liegen könnte? find ich irgendwie sehr seltsam :confused: