laekov 最近在玩 assetto corsa 并试图学习循迹刹车, 因此需要一个加速度轨迹显示插件. 在 GitHub 上发现了一个上古仓库 竟然还能用, 但是卖家秀是
而 laekov 这里是
为啥参考线只剩小半个了???
由于 assetto corsa 的插件都是 python, 于是 laekov 愉快地看起了代码, 并发现了如下一段.
def drawCircumference(self, radius, center):
ac.glBegin(1)
nlines = max(4, int(100.*radius))
for i in range(nlines+1):
x, y = self.gPlotter.plotG(center['x'] + (sin(2*pi*i/nlines)*radius), center['z'] + (cos(2*pi*i/nlines)*radius))
ac.glVertex2f(x, y)
ac.glEnd()
大胆猜想是 python 或者 ac.gl
性能不足以支撑在一个渲染周期内画完整个圆. 于是想找一个 native 的 circle 的 api. 然而翻阅了一下上古的 python plugin document (竟然还是 google docs) 发现 ac 的 gl 只支持画点和多边形 (挠头).
为了验证这个想法, 先把 max(4, int(100.*radius))
套了一个 min(90, ...)
, 于是获得了下图.
大圈被多画了几笔耶! 看来猜想是正确的.
于是把 min(90
改成了 30
, 然后成功地得到了整个圆. 而且正 30 边形画出来的圆惊人地并不方.
这个故事告诉我们
- Python (似乎是 3.3 ?????) 性能真辣鸡
- Assetto Corsa 的 python plugin 真鬼畜
番外: laekov 发现这个 repo 的唯一一个 issue 就是在讲这个 bug. 早知道就先看一眼了…