任何人都可以解释我epsilon这个术语是什么,虽然我没有在我的头文件中使用。 喜欢
Right (const lPoint& a, const lPoint& b, const lPoint& c, double epsilon)
{
#if _NOT_USED_EPSILON
return (( (a.x_ * b.y_) - (a.y_ * b.x_) +
(a.y_ * c.x_) - (a.x_ * c.y_) +
(b.x_ * c.y_) - (c.x_ * b.y_) ) < 0);
#else
/* return (( (a.x_ * b.y_) - (a.y_ * b.x_) +
(a.y_ * c.x_) - (a.x_ * c.y_) +
(b.x_ * c.y_) - (c.x_ * b.y_) ) < -SPATIAL_EPSILON);*/
if( epsilon == -1 )
return (b.x_-a.x_)*(c.y_-a.y_)-(c.x_-a.x_)*(b.y_-a.y_) < -SPATIAL_AREA_EPSILON;
else
return (b.x_-a.x_)*(c.y_-a.y_)-(c.x_-a.x_)*(b.y_-a.y_) < -epsilon;
#endif
}
这里我没有在我的文件中使用epsilon而不是我们说#if _not_used_epsilon而不是返回这个....而我的epsilon默认为0因为它的mot初始化。但是如果使用条件和她的const,它会使用din,因为它不会改变arguemnt的值。右!
并且这个#if将不会被函数内部的编译器读取我想要知道#directory是否被coompiler读取..我没有得到#directories ..为什么我们使用它我们可以起诉简单如果条件带变量正如我们在函数中使用的那样,为什么#directory里面的主...谁会处理它编译..
答案 0 :(得分:2)
这段代码很简单。这是做什么的?
如果定义了预处理程序符号_NOT_USED_EPSILON
(通过make file,命令行)等,则检查表达式是否小于0.
在某些情况下(由于双重算法会失去精度),如果表达式的值非常接近0,则可以检查表达式的值。
如果需要这样的精确算术,则make文件将取消定义预处理器符号_NOT_USED_EPSILON
。
在这种情况下,将使用函数的最后一个参数(epsilon)的值检查表达式。
请注意,编译器不会读取_NOT_USED_EPSILON
,而是预处理器指令。
从OP开始,以下代码仅在定义_NOT_USED_EPSILON
时已编译,否则不是。
return (( (a.x_ * b.y_) - (a.y_ * b.x_) +
(a.y_ * c.x_) - (a.x_ * c.y_) +
(b.x_ * c.y_) - (c.x_ * b.y_) ) < 0);
答案 1 :(得分:0)
#if
是预处理程序指令。
阅读C ++教科书中的预处理器。