Přidat otázku mezi oblíbenéZasílat nové odpovědi e-mailem JavaFX - Jak vybarvit uzavřenou oblast?

Aha. Já se pořád cyklu vyhýbám, ale v tomhle případě je to ideální.

Position position[] = new Position[20];
var a = 500 * Math.sin(Math.toRadians(18));
var b = 500 * Math.sin(Math.toRadians(36));
var c = 500 * Math.sin(Math.toRadians(54));
var d = 500 * Math.sin(Math.toRadians(72));
position[0] = new Position(0, 500);
position[1] = new Position(500 - d, 500 - a);
position[2] = new Position(500 - c, 500 - b);
position[3] = new Position(500 - b, 500 - c);
position[4] = new Position(500 - a, 500 - d);
position[5] = new Position(500, 0);
position[6] = new Position(500 + a, 500 - d);
position[7] = new Position(500 + b, 500 - c);
position[8] = new Position(500 + c, 500 - b);
position[9] = new Position(500 + d, 500 - a);
position[10] = new Position(1000, 500);
position[11] = new Position(500 + d, 500 + a);
position[12] = new Position(500 + c, 500 + b);
position[13] = new Position(500 + b, 500 + c);
position[14] = new Position(500 + a, 500 + d);
position[15] = new Position(500, 1000);
position[16] = new Position(500 - a, 500 + d);
position[17] = new Position(500 - b, 500 + c);
position[18] = new Position(500 - c, 500 + b);
position[19] = new Position(500 - d, 500 + a);
Path path;
MoveTo moveTo;
LineTo lineTo, lineTo2;
ArcTo arcTo;
for (int i = 0;; i++) {
    path = new Path();
    moveTo = new MoveTo(500, 500);
    lineTo = new LineTo(position[i].getX(), position[i].getY());
    arcTo = new ArcTo();
    if (i == 19) {
        i = -1;
    }
    arcTo.setX(position[i + 1].getX());
    arcTo.setY(position[i + 1].getY());
    arcTo.setRadiusX(500);
    arcTo.setRadiusY(500);
    arcTo.setSweepFlag(true);
    lineTo2 = new LineTo(500, 500);
    path.getElements().addAll(moveTo, lineTo, arcTo, lineTo2);
    path.setFill(Color.color(Math.random(), Math.random(), Math.random()));
    getChildren().add(path);
    if (i == -1) {
        break;
    }
}

V příkladu výše kreslím pouze 10 line, tak jsem to předělal na 20, kvůli tomu cyklu. Všechny začínají na specifickém místě kružnice a končí ve středu.
To je však zhola k ničemu. Pomocí Path se kruh nakreslí "sám", takže je zbytečné do Pane (ve kterém to celé je) dávat Circle ani Line.
Navíc, Circle vůbec nepotřebuji a Line jsem nahradil vlastní třídou (Position), která pouze obsahuje x a y specifických bodů na kružnici.

Na rychlo jsem napsal náhodnou barvu. Tu bych teď neřešil, problém je, jak mám napsat ten cyklus. V každé 1/20 musím spojit obloukem bod v poli s následujícím bodem - 0 a 1, 1 a 2, 2 a 3 atd.
Problémem je 20 část, která spojuje 19 a 0 bod. V takovém případě to pochopitelně zhavaruje, protože prvek position[20] neexistuje.

Proto, v příkladu výše používám dvě podmínky, což je absurdní, jenom kvůli jedné situaci. Podmínka v hlavičce byla sice zbytečná, ale i tak mně to přijde zbytečně složité.

Je to možné, prosím Vás, nějak zjednodušit?

Děkuji

Reakce na odpověď

1 Zadajte svou přezdívku:
2 Napište svou odpověď:
3 Pokud chcete dostat ban, zadejte libovolný text:

Zpět do poradny