Thema Datum  Von Nutzer Rating
Antwort
Rot Quick-Hull-Klasse in VBA übersetzen
05.04.2011 16:41:43 Jan
NotSolved
08.04.2011 11:14:30 Holger
NotSolved
10.04.2011 23:02:33 Jan
NotSolved
21.04.2011 19:06:01 Holger
NotSolved
22.04.2011 10:24:55 Holger
NotSolved
28.04.2011 21:14:36 Jan
NotSolved
29.04.2011 00:56:30 Jan
NotSolved
30.04.2011 11:20:07 Gast10485
NotSolved
03.05.2011 17:22:18 Gast9766
Solved
10.10.2011 20:32:25 Gast93608
NotSolved
11.10.2011 11:04:15 Holger
NotSolved

Ansicht des Beitrags:
Von:
Jan
Datum:
05.04.2011 16:41:43
Views:
5673
Rating: Antwort:
  Ja
Thema:
Quick-Hull-Klasse in VBA übersetzen

Hallo NG, 

ich stehe im Rahmen meiner DA vor folgender Aufgabe und kann mir nicht helfen: gegeben ist eine Punktmenge im 2D-Raum. Diese Punkte sollen mit einer konvexen Hülle umhüllt werden. Das Rad muss ich zum Glück nicht neu erfinden, denn dazu gibt es einige Verfahren und fertige Algorithmen. Leider habe ich nichts in VBA gefunden, deshalb würde ich versuchen diese Klasse (Sprache unbekannt) zu übersetzen. Da ich leider auch nicht der VBA-Guru bin, kann ich aber nicht abschätzen, ob es reicht einfach die Syntax anzupassen, bin mir nicht sicher ob ich die Syntax 100% verstehe, könnte jemand der etwas Erfahrung und Zeit hat, mal drüberschauen und sagen, ob das Sinn macht den Code 1:1 zu übersetzen, oder ob vielleicht einen bessereren Weg gibt der nicht so fehleranfällig wäre? Hinweise worauf ich achten sollte z.B. Variablenübergabe/Gültigkeitsbereich? Vielen herzlichen Dank!

 

public class GrahamScan
{
    private Point[] p;
    private int n;
    private int h;

    public int computeHull(Point[] p)
    {
        this.p=p;
        n=p.length;
        if (n<3) return n;
        h=0;
        grahamScan();
        return h;
    }

    private void grahamScan()
    {
        exchange(0, indexOfLowestPoint());
        Point pl=new Point(p[0]);
        makeRelTo(pl);
        sort();
        makeRelTo(pl.reversed());
        int i=3, k=3;
        while (k<n)
        {
            exchange(i, k);
            while (!isConvex(i-1))
                exchange(i-1, i--);
            k++;
            i++;
        }
        h=i;
    }

    private void exchange(int i, int j)
    {
        Point t=p[i];
        p[i]=p[j];
        p[j]=t;
    }

    private void makeRelTo(Point p0)
    {
        int i;
        Point p1=new Point(p0); // notwendig, weil p0 in p[] sein kann
        for (i=0; i<n; i++)
            p[i].makeRelTo(p1);
    }

    private int indexOfLowestPoint()
    {
        int i, min=0;
        for (i=1; i<n; i++)
            if (p[i].y<p[min].y || p[i].y==p[min].y && p[i].x<p[min].x)
                min=i;
        return min;
    }

    private boolean isConvex(int i)
    {
        return p[i].isConvex(p[i-1], p[i+1]);
    }

    private void sort()
    {
        quicksort(1, n-1); // ohne Punkt 0
    }

    private void quicksort(int lo, int hi)
    {
        int i=lo, j=hi;
        Point q=p[(lo+hi)/2];
        while (i<=j)
        {
            while (p[i].isLess(q)) i++;
            while (q.isLess(p[j])) j--;
            if (i<=j) exchange(i++, j--);
        }
        if (lo<j) quicksort(lo, j);
        if (i<hi) quicksort(i, hi);
    }
 

} // end class GrahamScan

 


Ihre Antwort
  • Bitte beschreiben Sie Ihr Problem möglichst ausführlich. (Wichtige Info z.B.: Office Version, Betriebssystem, Wo genau kommen Sie nicht weiter)
  • Bitte helfen Sie ebenfalls wenn Ihnen geholfen werden konnte und markieren Sie Ihre Anfrage als erledigt (Klick auf Häckchen)
  • Bei Crossposting, entsprechende Links auf andere Forenbeiträge beifügen / nachtragen
  • Codeschnipsel am besten über den Code-Button im Text-Editor einfügen
  • Die Angabe der Emailadresse ist freiwillig und wird nur verwendet, um Sie bei Antworten auf Ihren Beitrag zu benachrichtigen
Thema: Name: Email:



  • Bitte beschreiben Sie Ihr Problem möglichst ausführlich. (Wichtige Info z.B.: Office Version, Betriebssystem, Wo genau kommen Sie nicht weiter)
  • Bitte helfen Sie ebenfalls wenn Ihnen geholfen werden konnte und markieren Sie Ihre Anfrage als erledigt (Klick auf Häckchen)
  • Bei Crossposting, entsprechende Links auf andere Forenbeiträge beifügen / nachtragen
  • Codeschnipsel am besten über den Code-Button im Text-Editor einfügen
  • Die Angabe der Emailadresse ist freiwillig und wird nur verwendet, um Sie bei Antworten auf Ihren Beitrag zu benachrichtigen

Thema Datum  Von Nutzer Rating
Antwort
Rot Quick-Hull-Klasse in VBA übersetzen
05.04.2011 16:41:43 Jan
NotSolved
08.04.2011 11:14:30 Holger
NotSolved
10.04.2011 23:02:33 Jan
NotSolved
21.04.2011 19:06:01 Holger
NotSolved
22.04.2011 10:24:55 Holger
NotSolved
28.04.2011 21:14:36 Jan
NotSolved
29.04.2011 00:56:30 Jan
NotSolved
30.04.2011 11:20:07 Gast10485
NotSolved
03.05.2011 17:22:18 Gast9766
Solved
10.10.2011 20:32:25 Gast93608
NotSolved
11.10.2011 11:04:15 Holger
NotSolved