Как получить максимальную площадь к-гона?

Я пытаюсь получить максимальную площадь четырехугольника в выпуклой оболочке. Я использую способ из бумаги, но что-то не так. Этот код ALGOL-60Я не уверен, что цикл пока и повторять средства.

Об общем методе максимизации и минимизации среди некоторых геометрических задач

Это мой код Java:

    private static Quad getQua(Point[] z) {
    Point A = z[0], B = z[1], C = z[2], D = z[3];
    int a = 0, b = 1, c = 2, d = 3;
    int n = z.length;
    while (true) {
        while (true) {
            while (true) {
                while (Area(z[a], z[b], z[c], z[d]) <= Area(z[a], z[b], z[c], z[(d + 1) % n])) {
                    d = (d + 1) % n;
                }
                if (Area(z[a], z[b], z[c], z[d]) > Area(z[a], z[b], z[(c + 1) % n], z[d])) {
                    break;
                }
                c = (c + 1) % n;
            }
            if (Area(z[a], z[b], z[c], z[d]) > Area(z[a], z[(b + 1) % n], z[c], z[d])) {
                break;
            }
            b = (b + 1) % n;
        }
        if (Area(z[a], z[b], z[c], z[d]) > Area(A, B, C, D)) {
            A = z[a];B = z[b];C = z[c];D = z[d];
        }
        a = (a + 1) % n;
        if (a == b) {
            b = (b + 1) % n;
        }
        if (b == c) {
            c = (c + 1) % n;
        }
        if (c == d) {
            d = (d + 1) % n;
        }
        if (a == 0) {
            break;
        }
    }
    Quad q=new Quad(A, B, C, D);
    L.d(q.area+"  ");
    return q;
}

0 ответов

Другие вопросы по тегам