Přidat otázku mezi oblíbenéZasílat nové odpovědi e-mailemVyřešeno JavaFX - Jak jednoduše rozdělit shape?

A opravdu chceš, aby to vypadalo takhle? Vnitřní oblouk je čtvrtkruh, ale vnější ne.

Ano, vím, ale takhle to skutečně chci.

Omlouvám se, jak jsem to přepisoval do příkladu, tak jsem někde napsal hotové hodnoty

1. Na začátku vím pouze lineTo a moveToStart a oblouky z nich vypočítám

var arc_big = lineTo.getY() - lineTo.getX();
var arc_small = moveToStart.getY() - moveToStart.getX();

2. To samé i 300 a 380 v cyklu. To je ve skutečnosti taky jenom lineTo.getY() a moveToStart.getY()

A s těmi úhly máte pravdu. Jenže když to upravím, tak vznikne

...
var moveToStart = new MoveTo(200, 380);
var lineTo = new LineTo(0, 300);
var arc_big = lineTo.getY() - lineTo.getX();
var arc_small = moveToStart.getY() - moveToStart.getX();
var lineY = lineTo.getY();
var moveY = moveToStart.getY();
double sin, cos;
Path path;
for (var deg = 198; deg <= 270; deg += 18) {
    sin = Math.sin(Math.toRadians(deg));
    cos = Math.cos(Math.toRadians(deg));
    path = new Path(moveToStart, lineTo);
    lineTo = new LineTo(lineY + arc_big * cos, lineY + arc_big * sin);
    path.getElements().add(new ArcTo(arc_big, arc_big, 0, lineTo.getX(), lineTo.getY(), false, true));
    var moveTo = new MoveTo(moveY + arc_small * cos, moveY + arc_small * sin);
    path.getElements().addAll(new LineTo(moveTo.getX(), moveTo.getY()),
                new ArcTo(arc_small, arc_small, 0, moveToStart.getX(), moveToStart.getY(), false, false));
    moveToStart = moveTo;
    path.setFill(Color.color(Math.random(), Math.random(), Math.random()));
    pane.getChildren().add(path);
}
...

kód neříkající absolutně nic. Ano, mohlo být více proměnných včetně jejich správného pojmenování.

Ale bez komentářů stejně nebude dávat smysl, jak algoritmus vlastně funguje.

Proto jsem chtěl, prosím Vás, vědět, jestli by to bylo možné nějak zjednodušit, případně použít jiný algoritmus?

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