2016-11-20 49 views
0

用于计算机图形学一个作业我们必须写一个功能,即确定是否点p是在左侧边缘p1p2。现在我的合作伙伴和我有两个不同版本的这个函数,产生不同的结果,尽管计算同样的事情。差异应该是相同

片段1:

// The direction of the line from p1 to p: 
float lineX = p.x - p1.x; 
float lineY = p.y - p1.y; 
// The direction of the triangle's edge from p1 to p2: 
float edgeX = p2.x - p1.x; 
float edgeY = p2.y - p1.x; 

// The z component of the cross product (line x edge): 
float F = lineX * edgeY - lineY * edgeX; 

片段2:

float x = p.x; 
float y = p.y; 
float X = p1.x; 
float Y = p1.y; 
float dX = p2.x - p1.x; 
float dY = p2.y - p1.y; 

float F = ((x-X) * dY - (y-Y) * dX); 

我知道浮点运算是不可交换的,也没有关联。但是,根据我的理解,计算顺序应该完全相同,因为lineX = x-XedgeX = dX
是否有一些编译器优化与计算混淆?

回答

4

复制和粘贴错误:

float edgeX = p2.x - p1.x; 
float edgeY = p2.y - p1.x; 

(p1.x)?

+1

是的。我真笨。 :D谢谢! :) – J0hj0h