diff --git a/modules/geom/pymod/export_vecmat2_op.cc b/modules/geom/pymod/export_vecmat2_op.cc index cf1f0ac0b4df0579caa5638238d3301c3a83b16f..8f594681fd9a58b2e50595ece974fa63396fddc9 100644 --- a/modules/geom/pymod/export_vecmat2_op.cc +++ b/modules/geom/pymod/export_vecmat2_op.cc @@ -33,6 +33,7 @@ Real (*Mat2Det)(const Mat2& m) = &Det; Mat2 (*Mat2Invert)(const Mat2& m) = &Invert; Mat2 (*Mat2Transpose)(const Mat2& m) = &Transpose; Real (*Vec2Angle)(const Vec2& v1, const Vec2& v2) = &Angle; +Real (*Vec2SignedAngle)(const Vec2& v1, const Vec2& v2) = &SignedAngle; Vec2 (*Vec2Normalize)(const Vec2& v1) = &Normalize; Vec2 (*Vec2Rotate)(const Vec2& v1,Real ang) = &Rotate; Vec2 (*Vec2Min)(const Vec2&, const Vec2&) = &Min; @@ -53,6 +54,7 @@ void export_VecMat2_op() def("Invert",Mat2Invert); def("Transpose",Mat2Transpose); def("Angle",Vec2Angle); + def("SignedAngle",Vec2SignedAngle); def("Normalize",Vec2Normalize); def("Rotate",Vec2Rotate); def("Min",Vec2Min); diff --git a/modules/geom/src/vecmat2_op.cc b/modules/geom/src/vecmat2_op.cc index 69f2e8e8ce2200b5d6994498b787291ad8b4a247..ea0a4521376d510ccc9db2a0471fe275bd9833cd 100644 --- a/modules/geom/src/vecmat2_op.cc +++ b/modules/geom/src/vecmat2_op.cc @@ -55,11 +55,15 @@ Real Angle(const Vec2& v1, const Vec2& v2) Real SignedAngle(const Vec2& v1, const Vec2& v2) { - Vec3 vc; - vc=Cross(Vec3(v1),Vec3(v2)); - if(Length(v1)==0.0 || Length(v2)==0.0 || Length(vc)==0.0) + if(Length(v1)==0.0 || Length(v2)==0.0){ return 0.0; - return acos(Dot(v1,v2)/Length(v1)/Length(v2))*vc.z/std::fabs(vc.z); + } + Vec3 vc=Cross(Vec3(v1),Vec3(v2)); + Real sign=1.0; + if(vc.z!=0.0){ + sign=vc.z/std::fabs(vc.z); + } + return acos(Dot(v1,v2)/Length(v1)/Length(v2))*sign; } Vec2 Rotate(const Vec2& v,Real ang)