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