Atan2 table c++
Atan2 table c++
我正在尝试计算2D空间中两点的角度。它适用于以下内容:
double angle;
x = player->x - x;
z = player->z - y;
angle = atan2 (x, y);
angle *= (180.0 / M_PI);
if(angle < 0) angle += 360;
if(angle >= 360) angle -= 360;
return angle;
然而,我想使用一个表来获得更好的结果:
x = player->x - x;
z = player->y - y;
return atanTable[x+32][y+32];
带init:
int xp = -32;
int yp = -32;
for (int x = 0; x < 64; x++, xp++)
for (int y = 0; y < 64; y++, yp++){
double angle;
angle = atan2 (xp, yp);
angle *= (180.0 / M_PI);
if(angle < 0) angle += 360;
if(angle >= 360) angle -= 360;
atanTable[x][y] = angle;
}
角度仅针对x和y的-32到32值进行计算。
然而,该表没有正确生成。我得到的值只有359和0左右,而我应该得到0到360度的范围。
我是不是滥用了atan2?
您需要在第一个循环内重置yp
,而不是在它之前。
int xp = -32;
for (int x = 0; x < 64; x++, xp++)
{
int yp = -32; // Note, needs to be reset each time x changes.
for (int y = 0; y < 64; y++, yp++)
{
Nit:atan2()始终返回[-pi,pi]中的角度。你的第二个if语句是多余的。这也可能是一个糟糕的设计:通常你想稍后测试[pi,2pi]中的角度,这可以通过简单的<0表示默认范围。基本上,atan2()是你的朋友,函数存在的原因是为了让你省去在角度上进行模块化数学的麻烦。
相关文章:
- Lua table in C++ dll
- R data.table 和 STRING_ELT() 错误:如何修复"字符向量"与"字符"错误?
- 调用 QSqlTableModel setTable 方法时出现"Unable to find table"错误
- JNI 在使用 NewGlobalRef 时"local reference table overflow"
- LuaJIT 和 C++ - 调用 Table.Method() 在 loadstring/pcall 中不起作用
- 如何使 clang 格式尊重代码格式"table-like"代码格式
- Python C++ 生成生成值错误:"Symbol table not found"
- 当类层次结构中只有一个类时,请避免在每个功能呼叫上读取V-Table的开销
- SQLite CREATE TABLE 和 INSERT 工作,但返回SQLITE_ERROR "no such table" C++
- C++ output * table
- C++ exp LUT (lookup table)
- Atan2 table c++
- c++ iomanip table formatting
- SQLite总是回复"database table is locked"
- 如何处理此 Linux C++警告? "can't find linker symbol for virtual table for `sockaddr_in'"
- C++ "Count the number of collisions at each slot in the hash table"
- table = new HashEntry*[TABLE_SIZE]
- 初学者帮助:用sum打印Table
- 如何将Table(数字列表)从Lua传递到C并访问它
- 如何使用Gtk::Grid放置小部件,类似于Gtkmm-3中的Gtk::Table