Jenže ty tam pravý úhel nemáš, takže se mi zdá, že jsi dvěma špatnými úvahami čistě náhodou trefil na správnou.
Nemám tady žádné IDE pro Javu, takže jsem to psal naslepo a bez vyzkoušení, ale napsal bych to asi takhle:
var smallRadius = 180;
var smallCenter = new Point2D(380, 380);
var bigRadius = 300;
var bigCenter = new Point2D(300, 300);
var startAngle = Math.toRadians(180);
var endAngle = Math.toRadians(270);
var stepCount = 5;
// todo refactor duplicity and constructor calculations
var sin = Math.sin(startAngle);
var cos = Math.cos(startAngle);
var bigArcStart = new Point2D(bigCenter.getX() + bigRadius * cos, bigCenter.getY() + bigRadius * sin);
var smallArcStart = new Point2D(smallCenter.getX() + smallRadius * cos, smallCenter.getY() + smallRadius * sin);
var step = (engAngle - startAngle) / stepCount;
for (var rad = startAngle + step; rad <= engAngle; rad += step) {
// todo refactor duplicity and constructor calculations
sin = Math.sin(rad);
cos = Math.cos(rad);
var bigArcEnd = new Point2D(bigCenter.getX() + bigRadius * cos, bigCenter.getY() + bigRadius * sin);
var smallArcEnd = new Point2D(smallCenter.getX() + smallRadius * cos, smallCenter.getY() + smallRadius * sin);
var path = new Path(
new MoveTo(smallArcStart.getX(), smallArcStart.getY()),
new LineTo(bigArcStart.getX(), bigArcStart.getY()),
new ArcTo(bigRadius, bigRadius, 0, bigArcEnd.getX(), bigArcEnd.getY(), false, false),
new LineTo(smallArcEnd.getX(), smallArcEnd.getY()),
new ArcTo(smallRadius, smallRadius, 0, smallArcStart.getX(), smallArcStart.getY(), false, false)
);
path.setFill(Color.color(Math.random(), Math.random(), Math.random()));
pane.getChildren().add(path);
bigArcStart = bigArcEnd;
smallArcStart = smallArcEnd;
}
Mělo by to dělat přesně to, co tvůj kód, ale o dost přehledněji.