R = 1 K = 2 R2 = R * R * 1.0 f = ->(y: Float64) { dy = Math.sqrt(R2 - y * y); (y * dy + R2 * Math.atan(y / dy)) } s = Math::PI * R2 / (K + 1) ans = [] of Float64 prev = -R.to_f64 K.times do ac = R.to_f64 wa = prev s0 = f.call(prev) 100.times do wj = (ac + wa) * 0.5 if f.call(wj) - s0 >= s ac = wj else wa = wj end end puts ac prev = ac end