gpt4 book ai didi

C++ 碰撞检测

转载 作者:太空宇宙 更新时间:2023-11-03 10:32:53 26 4
gpt4 key购买 nike

好的,我需要做一个碰撞测试。这种方式看起来最简单,但我的编译器并不这么认为。感谢您的任何回复!

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;
}

编译器错误:

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 ==========

附言我通常缩进我的代码,但第一次在这里发布时,它总是给我带来问题。

最佳答案

错误是说有三个可用的 sqrt() 函数,并且在将 int 传递给它时没有明显的选择。

您必须通过转换参数来决定是要float 还是doublelong double

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

关于C++ 碰撞检测,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/11576494/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com