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. 早知道就先看一眼了…