Triangle.cpp dnacalib/types/Triangle.h dnac //CopyrightEpicGames,Inc.AllRightsReserved. #include"dnacalib/types/Triangle.h" namespacednac{ Triangle::Triangle(constfvec2&a_,constfvec2&b,constfvec2&c): a{a_}, v0{b-a}, v1{c-a}, d00{tdm::dot(v0,v0)}, d01{tdm::dot(v0,v1)}, d11{tdm::dot(v1,v1)}, denom{d00*d11-d01*d01}{ } Triangle::Triangle(conststd::array<fvec2,3>&vertices): Triangle(vertices[0],vertices[1],vertices[2]){ } fvec2Triangle::A()const{ returna; } fvec2Triangle::B()const{ returnv0+a; } fvec2Triangle::C()const{ returnv1+a; } fvec3Triangle::getBarycentricCoords(constfvec2&point)const{ //Real-TimeCollisionDetectionTheMorganKaufmannSeries,chapter3.4BarycentricCoordinates constfvec2v2=point-a; constfloatd20=tdm::dot(v2,v0); constfloatd21=tdm::dot(v2,v1); constfloatv=(d11*d20-d01*d21)/denom; constfloatw=(d00*d21-d01*d20)/denom; constfloatu=1.0f-v-w; return{u,v,w}; } }//namespacednac