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

Moc se omlouvám za pozdní odpověď. Děkuji, Váš kód je dobrý, nicméně řešil jsem stejný problém na StackOverflow a poradil mi tento kód.

public class ConvinienceMethodsExample extends Application {

    private static final double OUTER_RADIUS =300, INNER_RADIUS = 180, ORIGIN_X = 300, ORIGIN_Y = 300;
    private static final double START_ANGLE =20, END_ANGLE = 70, STEP_ANGEL = 10;

    @Override
    public void start(Stage primaryStage) {

        Group group = new Group();

        for(double angle =  START_ANGLE; angle < END_ANGLE ; angle += STEP_ANGEL ){

            Point2D innerArcStart = getPoint(INNER_RADIUS, angle);
            Point2D innerArcEnd = getPoint(INNER_RADIUS, angle + STEP_ANGEL);
            Point2D outerArcStart = getPoint(OUTER_RADIUS, angle);
            Point2D outerArcEnd = getPoint(OUTER_RADIUS, angle + STEP_ANGEL);
            var path = getPath(innerArcStart, innerArcEnd, outerArcStart, outerArcEnd);
            group.getChildren().add(path);
        }
        primaryStage.setScene(new Scene(new Pane(group)));
        primaryStage.show();
    }

    private Point2D getPoint(double radius, double angle){

        double x = ORIGIN_X - radius * Math.cos(Math.toRadians(angle));
        double y = ORIGIN_Y - radius * Math.sin(Math.toRadians(angle));
        return new Point2D(x, y);
    }

    private Shape getPath(Point2D innerArcStart, Point2D innerArcEnd, Point2D outerArcStart, Point2D outerArcEnd){
        var path = new Path(
                new MoveTo(innerArcStart.getX(), innerArcStart.getY()),
                new LineTo(outerArcStart.getX(), outerArcStart.getY()), //left line
                new ArcTo(OUTER_RADIUS, OUTER_RADIUS, 0, outerArcEnd.getX(), outerArcEnd.getY(), false, true), //outer arc
                new LineTo(innerArcEnd.getX(),innerArcEnd.getY()), //right line
                new ArcTo(INNER_RADIUS, INNER_RADIUS, 0, innerArcStart.getX(), innerArcStart.getY(), false, false)
                );
        path.setFill(Color.color(Math.random(), Math.random(), Math.random()));
        return path;
    }

    public static void main(String args[]){
        launch(args);
    }
}

[]

I když se kód jeví jednoduše, nepřišel jsem na to, jak upravit hodnoty, abych dosáhl stejného výsledku. Nejde mi o velikost okna, pouze aby byl oblouk vypadal stejně a dotýkal se levé a horní strany.

Na moji otázku, jak mám hodnoty zadat, mi odpověděl tímhle obrázkem, s fieldy

OUTER_RADIUS = 400, INNER_RADIUS = 100, ORIGIN_X = 400, ORIGIN_Y = 400 // obrázek vlevo
OUTER_RADIUS = 300, INNER_RADIUS = 180, ORIGIN_X = 300, ORIGIN_Y = 300 // obrázek vpravo

[]

a že musím kód správně pochopit.

Jenže, jak jsem řekl, i když se kód jeví jednoduše, nepřišel jsem na to, jak hodnoty správně zadat.

Prosím o radu.

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

loading...