发现Houdini行列式竟然会出问题????有人测试过matrix2吗。。。。。
float area_tri(vector2 a, b ,c){ float m11 = b.x - a.x; float m12 = c.x - a.x; float m21 = b.y - a.y; float m22 = c.y - a.y; // THIS WILL CAUSE ERROR ----- //matrix2 m = set( m11,m12,m21,m22) ; //float area = determinant(m); //return area * 0.5f; // THIS WILL CAUSE ERROR ------ return 0.5f*(a.x*b.y + b.x*c.y + c.x*a.y -a.x*c.y - b.x*a.y - c.x*b.y); } // int in_tri(float abs_AF,abs_BT,abs_GM) { if (abs_AF > 0.99999f) return 0; if (abs_BT > 0.99999f) return 0; if (abs_GM > 0.99999f) return 0; if( abs_AF + abs_BT +abs_GM> 1.0f) return 0; return 1; } // define our triangle vector2 a = set(-2.0f, 0.0f); vector2 b = set(2.0f, 0.0f); vector2 c = set(0.0f, 2.0f); vector2 inp = set(@P.x, @P.y); float A = area_tri(a, b, c); float Aa = area_tri(inp, b,c); float Ab = area_tri(inp, a,c); float Ac = area_tri(inp, a,b); float AF = Aa / A; float BT = Ab / A; float GM = Ac / A; float abs_AF = abs(AF); float abs_BT = abs(BT); float abs_GM = abs(GM); f@sdf = 0; if (in_tri(abs_AF,abs_BT,abs_GM) ) // if exist in tri; { f@sdf = min(abs_GM, min(abs_AF,abs_BT) ); } else{ f@sdf = 0 ; }
参考:fundamentals of computer graphics