我想确定一个点是否在圆圈内。 所以我这样做:
(x - center_x)^2 + (y - center_y)^2 < radius^2
但我的坐标是double
,我想我应该用epsilon来做,所以也是
fabs ((x - center_x)^2 + (y - center_y)^2 - radius^2 ) < EPS
更好吗?
答案 0 :(得分:5)
使用QString line = str.readLine();
QStringList country = line.split(" ");
Country myCountry;
myCountry.setName(country[0]);
myCountry.setArtist(country[1]);
myCountry.setSong(country[2]);
myCountry.setScore(0);
All.push_back(myCountry);
或<
进行比较时,您不需要epsilon,这些都非常好。你需要它而不是>
。在你的情况下,你刚刚添加了一小部分半径,这可能是不可取的。
另请注意,==
与^
不同。
答案 1 :(得分:4)
为此,你不能在C ++中使用'^'。
而不是(x - center_x)^2 + (y - center_y)^2 < radius^2
做(x - center_x)*(x - center_x) + (y - center_y)*(y - center_y) < radius*radius
。
坐标加倍是没有问题的。
答案 2 :(得分:4)
取决于。
Naiive有序不等式比较通常最适合测试浮点值是否在阈值的一侧。
由于浮点错误,应该在阈值一侧的结果可能最终在另一侧。如果重要的是保证不会出现假阴性,同时增加误报的可能性,那么您建议的替代方案可能是合适的。
请注意,当输入值的大小不同时,基于恒定epsilon的误差补偿无效。
答案 3 :(得分:4)
没有。正如其他人所提到的,C中的运算符^
是按位排他或不是幂。但是你可以使用内联函数:
inline double Sqr(double x) {return x*x;}
// ...
if (Sqr(x - center_x) + Sqr(y - center_y) < Sqr(radius)) // ...
关于你的问题,
fabs (Sqr(x - center_x) + Sqr(y - center_y) - Sqr(radius) ) < EPS
表示(x,y)在圆周 的 。