Javacode erklären: Mittelpunkt bestimmen

Hakan

Mitglied
Guten Tag,
ich habe leider ein Verständnisproblem und zwar, wie ihr hier sehen könnt, habe ich eine Passage aus einem javacode-beispiel reingestellt. Mein Problem ist es, dass ich die Zeilen für die Bestimmung des Mittelpunktes nicht so richtig verstehe. Meine Bitte wäre, ob ihr mir die Zeilen kommentieren bzw. erklären könntet? Danke im voraus
Java:
public boolean gefulltekreistest(int i, byte[]pixels,int w)
        {
                double maxl=1;
                double letzte_maxl=0;
                int test=0;
                Polygon poly = (Polygon) this.polyvec.elementAt(i);
                Point p1=new Point(poly.xpoints[1],poly.ypoints[1]);
                Point p2=new Point(poly.xpoints[1],poly.ypoints[1]);
                Point ptmp=new Point(poly.xpoints[1],poly.ypoints[1]);
                while (letzte_maxl<=maxl&&test<3)
                {
                        double lang=0;
                        for(int j=0; j<poly.npoints; j++)
                        {

                                p2.setLocation(poly.xpoints[j], poly.ypoints[j]);
                                lang=p1.distance(p2);
                                if(lang>maxl)
                                {
                                        ptmp.setLocation(p2);
                                        maxl=lang;
                                }
                        }
                        p1.setLocation(ptmp);
                        if(letzte_maxl==maxl)
                        {
                                test++;
                        }else
                        {
                                letzte_maxl=maxl;
                                test=0;}
                }
                for(int j=0; j<poly.npoints; j++)
                {
                        p2.setLocation(poly.xpoints[j], poly.ypoints[j]);
                        if(letzte_maxl==p1.distance(p2))
                                {
                                ptmp.setLocation((p1.x+p2.x)/2,(p1.y+p2.y)/2);
                                break;
                                };
                }
                double mittlelang=0;
                for(int j=0; j<poly.npoints; j++)
                {
                        p2.setLocation(poly.xpoints[j], poly.ypoints[j]);
                        mittlelang+=ptmp.distance(p2);
                }
                mittlelang=mittlelang/poly.npoints;
                if(mittlelang*2/letzte_maxl<0.85||!poly.contains(ptmp))
                {
                        for(int j=0; j<poly.npoints; j++)
                        {
                                pixels[poly.ypoints[j]*w+poly.xpoints[j]]=(byte) 0;
                        }
                        return false;
                }
                anzahlkreis++;
                IJ.log("Gefunden "+anzahlkreis+". gefuellter Kreis");
                IJ.log("Mittel Punkt: x = "+ptmp.x+" , y = "+ ptmp.y);
                pixels[ptmp.y*w+ptmp.x]=(byte) 255;
                return true;
        }
 
Zuletzt bearbeitet von einem Moderator:
Der Code erscheint mir umständlich und schlecht zu verstehen - was genau soll er tun? Und wie ist hier "Mittelpunkt eines Polygons" definiert? Es sieht so aus, als würde irgendwie der Punkt gesucht, der am weitesten von allen Polygonpunkten entfernt ist.
 
genau das ist das problem. ist schwer verständlich. :bahnhof:
mich würde gerne sehr interessieren was im unteren code zeile für zeile passiert.
Java:
 for(int j=0; j<poly.npoints; j++)
                {
                        p2.setLocation(poly.xpoints[j], poly.ypoints[j]);
                        mittlelang+=ptmp.distance(p2);
                }
                mittlelang=mittlelang/poly.npoints;
                if(mittlelang*2/letzte_maxl<0.85||!poly.contains(ptmp))
                {
                        for(int j=0; j<poly.npoints; j++)
                        {
                                pixels[poly.ypoints[j]*w+poly.xpoints[j]]=(byte) 0;
                        }
                        return false;
                }
 
[c]for(int j=0; j<poly.npoints; j++)[/c]

Für j werden im Nachfolgenden die Werte 0 bis poly.npoints-1 eingesetzt

[c] p2.setLocation(poly.xpoints[j], poly.ypoints[j]);[/c]

Auf dem Objekt 'p2' wird die Methode "setLocation" aufgerufen, und es werden ihr die Werte der Arrays poly.xpoints und poly.ypoints, jeweils an der Stelle 'j' übergeben.

...

Zu low-level? Dann vielleicht so:
Der Code rechnet irgendwas rum, was sich irgendjemand ausgedacht hat.

Zu high-level? Dann steht dir (oder demjenigen, der deine Frage angemessen beantworten will, sofern sich jemand dazu bereit erklärt) viel Arbeit bevor...
 
Hi,

der Code ist aber auch wirklich schrecklich. Am besten finde ich noch das er IMMER "true" zurück gibt. Das dürfte besonders
den Freunden der funktionalen Programmiersprachen sauer aufstoßen (Hallo Landei 😉 ), da der Code somit voll von
Seiteneffekten ist.

Aber es hilft vielleicht schon ein wenig wenn man mal die Refactoring-Mechanismen seiner Lieblings-IDE anwirft und den
Variablen sprechendere Namen gibt. Aber das Hauptproblem der Methode ist, das sie einfach zu viel auf einmal macht.
 

Zurück
Oben