C++冲突检测

1 c++ collision-detection sqrt

好吧,我需要做一个碰撞测试.这种方式似乎最简单,但我的编译器并不这么认为.谢谢你的回复!

C++代码:

int sqrd(int num) { return (num*num); } //squares a number

bool checkColShip() {
  for(int x = 0;x < 10;x++) {
    double distance = 0; //use to be int tried to change it
    distance = abs( sqrt( sqrd((one.getXPos() - asteroid[x].getXPos()) +
                          sqrd((one.getYPos() - asteroid[x].getYPos()))
                   ); //include cmath
    distance -= 20;//ship radius
    distance -= 20;//asteroid radius
    if (distance<=0) return true;//collision true
  }
  //no collision
  return false;
}
Run Code Online (Sandbox Code Playgroud)

编译错误:

c:\documents and settings\all users\documents\c++ projects\learn sdl\learn sdl\main.cpp(702): error C2668: 'sqrt' : ambiguous call to overloaded function
c:\program files\microsoft visual studio 10.0\vc\include\math.h(589): could be 'long double sqrt(long double)'
c:\program files\microsoft visual studio 10.0\vc\include\math.h(541): or       'float sqrt(float)'
c:\program files\microsoft visual studio 10.0\vc\include\math.h(127): or       'double sqrt(double)'
while trying to match the argument list '(int)'
========== Build: 0 succeeded, 1 failed, 0 up-to-date, 0 skipped ==========
Run Code Online (Sandbox Code Playgroud)

PS我通常缩进我的代码,但第一次在这里发帖,它一直给我带来问题.

Dre*_*ann 5

错误是说有三个可用的sqrt()功能,传递它时没有明显的选择int.

如果你愿意,你必须决定floatdoublelong double铸造参数.

与您的问题无关 - 您的代码总是传递一个真实的非负数sqrt(),因此平方根将始终是真实的非负数.传递结果abs()是不必要的.