Simplify isect_point_poly_v2 functions using angle_signed_v2v2
authorCampbell Barton <ideasman42@gmail.com>
Thu, 26 Dec 2013 09:05:03 +0000 (20:05 +1100)
committerCampbell Barton <ideasman42@gmail.com>
Thu, 26 Dec 2013 09:07:44 +0000 (20:07 +1100)
source/blender/blenlib/intern/math_geom.c

index 11875722d279dc5359349fa735cd58448a29e715..1d03bf42f83be0f8e9ffe927bdb59441248cbb3d 100644 (file)
@@ -721,24 +721,16 @@ bool isect_point_poly_v2(const float pt[2], const float verts[][2], const unsign
        /* first vector */
        fp1[0] = (float)(p1[0] - pt[0]);
        fp1[1] = (float)(p1[1] - pt[1]);
-       normalize_v2(fp1);
 
        for (i = 0; i < nr; i++) {
-               float dot, ang, cross;
                p2 = verts[i];
 
                /* second vector */
                fp2[0] = (float)(p2[0] - pt[0]);
                fp2[1] = (float)(p2[1] - pt[1]);
-               normalize_v2(fp2);
 
                /* dot and angle and cross */
-               dot = dot_v2v2(fp1, fp2);
-               ang = fabsf(saacos(dot));
-               cross = (float)((p1[1] - p2[1]) * (p1[0] - pt[0]) + (p2[0] - p1[0]) * (p1[1] - pt[1]));
-
-               if (cross < 0.0f) angletot -= ang;
-               else              angletot += ang;
+               angletot += angle_signed_v2v2(fp1, fp2);
 
                /* circulate */
                copy_v2_v2(fp1, fp2);
@@ -769,24 +761,16 @@ bool isect_point_poly_v2_int(const int pt[2], const int verts[][2], const unsign
        /* first vector */
        fp1[0] = (float)(p1[0] - pt[0]);
        fp1[1] = (float)(p1[1] - pt[1]);
-       normalize_v2(fp1);
 
        for (i = 0; i < nr; i++) {
-               float dot, ang, cross;
                p2 = verts[i];
 
                /* second vector */
                fp2[0] = (float)(p2[0] - pt[0]);
                fp2[1] = (float)(p2[1] - pt[1]);
-               normalize_v2(fp2);
 
                /* dot and angle and cross */
-               dot = dot_v2v2(fp1, fp2);
-               ang = fabsf(saacos(dot));
-               cross = (float)((p1[1] - p2[1]) * (p1[0] - pt[0]) + (p2[0] - p1[0]) * (p1[1] - pt[1]));
-
-               if (cross < 0.0f) angletot -= ang;
-               else              angletot += ang;
+               angletot += angle_signed_v2v2(fp1, fp2);
 
                /* circulate */
                copy_v2_v2(fp1, fp2);