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

Sorry, ale byl jsem zaneprázdněn a pak se to snažil vyřešit. Ale to není podstatné.

Šlo mi o nakreslení tohohle - obrázek

Levý "oblouk je nakreslený pomocí

private static ArrayList<Path> arc(double lineX, double lineY, double moveX, double moveY) {
    var arc_big = lineY;
    var arc_small = moveY - moveX;
    LineTo lineTo = new LineTo(lineX, lineY);
    MoveTo moveToCenter = new MoveTo(moveX, moveY);
    ArrayList<Path> list = new ArrayList<>(5);
    for (double deg = 198; deg <= 270; deg += 18) {
        Path path = new Path(moveToCenter, lineTo);
        lineTo = new LineTo(lineY + arc_big * Math.cos(Math.toRadians(deg)), lineY + arc_big * Math.sin(Math.toRadians(deg)));
        path.getElements().add(new ArcTo(arc_big, arc_big, 0, lineTo.getX(), lineTo.getY(), false, true));
        MoveTo move = new MoveTo(moveY + arc_small * Math.cos(Math.toRadians(deg)), moveY + arc_small * Math.sin(Math.toRadians(deg)));
        path.getElements().add(new LineTo(move.getX(), move.getY()));
        path.getElements().add(new ArcTo(arc_small, arc_small, 0, moveToCenter.getX(), moveToCenter.getY(), false, false));
        moveToCenter = move;
        path.setFill(Color.color(Math.random(), Math.random(), Math.random()));
        list.add(path);
    }
    return list;
}

V konstruktoru to volám

...
var paths = new ArrayList<Path>(20);
for (int i = 0; i < 4; i++) {
    paths.addAll(arc(0.0, g30, g20, g38));
}
getChildren().addAll(paths);
...

Abych to vysvětlil. Pouze levý horní oblouk je nakreslený pomocí metody a zbylé jsou pomocí čar a oblouků pro znázornění. Nakreslení všech oblouků je však složité, protože střed velké a malé "kružnice" je vždy rozdílný a nelze ho nějak odvodit. Proto jsem to chtěl vytvořit čtyřikrát na jednom místě a pak posunout a otočit. To by bylo ale zbytečně složité a ani se mi to nepodařilo.

Mnohem jednoduší by to bylo tzv. překlopit přes čáry, které jsou zde znázorněné. Navíc mně přijde cyklus nesmyslný. Lepší by bylo, kdybych zavolal metodu pouze jednou a pak to třikrát "naklonoval". Jak to, prosím Vás, udělám?

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