我正在尝试将Chocolate Doom移植到Kotlin。但是,我不明白Chocolate Doom如何分配其余弦表。注释解释说,为了计算余弦表,它在正弦表上进行了PI / 2移位,但是我一直在努力了解如何使用C完成它。
这是Chocolate Doom的原始源代码,格式为tables.htables.c

#define FINEANGLES 8192
const fixed_t finesine[10240] =
{
    25,75,125,175,226,276,326,376,
    ...
}
const fixed_t *finecosine = &finesine[FINEANGLES/4];
这就是我要在Kotlin中实现的目标
val fineSine: Array<Fixed_t> = arrayOf(25,75,125,175,226,276,326,376, ...)
val fineCosine: Array<Fixed_t> = arrayOf() // This is where I'm stuck

最佳答案

一个完整的圆圈是2pi弧度。因此,要抵消pi / 2,您需要走四分之一的距离。因此,如果圆中有FINEANGLES值,则可以通过FINEANGLES/4进行偏移。
但是,为了能够访问FINEANGLES中的finecosine值,finesine需要至少具有FINEANGLES + FINEANGLES/4值(假设没有逻辑可环绕)。
一个简化的例子:

#define FINEANGLES 4
float finesine[] = {0, 1, 0, -1, 0};
float *finecosine = &finesine[FINEANGLES/4];  // {1, 0, -1, 0}

10-08 11:12