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