在其中赛车手绕弯的弯道至少转一圈的比赛中,每个赛车手的起始位置都是错开的,因此每个赛车手在赛道上行驶相同的距离(否则,最里面的车道上的赛车手将具有巨大的优势)。
给定椭圆轨道的长轴和短轴(或半长轴和半短轴,如果您愿意的话)的长度和轨道中的车道数,请输出距每个车道的最里面车道起点的距离应该错开。
技术指标
- 每个泳道是一个椭圆形,具有半长轴,比下一个最短的泳道长5个单位。为简单起见,假设通道的宽度为0。
- 最里面的通道始终从0开始,其他每个起点都是一个大于或等于前一个起点的正整数。
- 输入和输出可以采用任何方便且合理的格式。
- 输入将始终是整数。
- 您必须计算出轨道的周长,使其不超过实际值的0.01单位。
- 输出将四舍五入到最接近的整数(有底)。
- 终点线是最里面的赛车手的起点。比赛只有一圈。
- 轴的长度是使用轨道的最里面的车道测量的。
- 为最内通道的偏移量输出0是可选的。
测试用例
格式: a, b, n -> <list of offsets, excluding innermost lane>
20, 10, 5 -> 30, 61, 92, 124
5, 5, 2 -> 31
15, 40, 7 -> 29, 60, 91, 121, 152, 183
35, 40, 4 -> 31, 62, 94
这些测试用例是使用以下Python 3脚本生成的,该脚本使用了Ramanujan设计的椭圆的近似周长:
#!/usr/bin/env python3
import math
a = 35 # semi-major axis
b = 40 # semi-minor axis
n = 4 # number of lanes
w = 5 # spacing between lanes (constant)
h = lambda a,b:(a-b)**2/(a+b)**2
lane_lengths = [math.pi*(a+b+w*i*2)*(1+3*h(a+w*i,b+w*i)/(10+math.sqrt(4-3*h(a+w*i,b+w*i)))) for i in range(n)]
print("{}, {}, {} -> {}".format(a, b, n, ', '.join([str(int(x-lane_lengths[0])) for x in lane_lengths[1:]])))
使用的近似值为:
最后,这是一个有助于理解偏移量计算的图表:
h**5
,这在0.01
很宽的范围内都很好。