Revision: 51586
          http://brlcad.svn.sourceforge.net/brlcad/?rev=51586&view=rev
Author:   crdueck
Date:     2012-07-19 07:25:15 +0000 (Thu, 19 Jul 2012)
Log Message:
-----------
fix some errors in the calculations for area

Modified Paths:
--------------
    brlcad/trunk/src/librt/primitives/sketch/sketch_tess.cpp

Modified: brlcad/trunk/src/librt/primitives/sketch/sketch_tess.cpp
===================================================================
--- brlcad/trunk/src/librt/primitives/sketch/sketch_tess.cpp    2012-07-19 
06:42:39 UTC (rev 51585)
+++ brlcad/trunk/src/librt/primitives/sketch/sketch_tess.cpp    2012-07-19 
07:25:15 UTC (rev 51586)
@@ -263,8 +263,9 @@
  *      the area of the circular segment
  */
 extern "C" void
-rt_sketch_surf_area(fastf_t *area, const struct rt_db_internal *ip) //, const 
struct bn_tol *tol)
+rt_sketch_surf_area(fastf_t *area, const struct rt_db_internal *ip)
 {
+    int j;
     size_t i;
     fastf_t full_circle_area = 0.0;
 
@@ -295,7 +296,7 @@
         case CURVE_LSEG_MAGIC:
             lsg = (struct line_seg *)lng;
             // calculate area for polygon edge
-            *area += V2CROSS(SKETCHPT(lsg->start), SKETCHPT(lsg->end));
+            *area += 0.5 * V2CROSS(SKETCHPT(lsg->start), SKETCHPT(lsg->end));
             break;
         case CURVE_CARC_MAGIC:
             csg = (struct carc_seg *)lng;
@@ -304,7 +305,7 @@
                 full_circle_area += M_PI * DIST_PT_PT_SQ(SKETCHPT(csg->start), 
SKETCHPT(csg->end));
             } else {
                 // calculate area for polygon edge
-                *area += V2CROSS(SKETCHPT(csg->start), SKETCHPT(csg->end));
+                *area += 0.5 * V2CROSS(SKETCHPT(csg->start), 
SKETCHPT(csg->end));
                 // calculate area for circular segment
                 *area += carc_area(csg, sketch_ip);
             }
@@ -314,15 +315,15 @@
             ON_2dPointArray bez_pts(bsg->degree + 1);
             std::vector<ON_Arc> carcs;
             // convert struct bezier_seg into ON_BezierCurve
-            for (i = 0; (int)i < bsg->degree + 1; i++) {
-                bez_pts.Append(SKETCHPT(bsg->ctl_points[i]));
+            for (j = 0; j < bsg->degree + 1; j++) {
+                bez_pts.Append(SKETCHPT(bsg->ctl_points[j]));
             }
             // approximate bezier curve by a set of circular arcs
             bezier_to_carcs(ON_BezierCurve(bez_pts), &tol, carcs);
             for (std::vector<ON_Arc>::iterator it = carcs.begin(); it != 
carcs.end(); ++it) {
-                // calculate area for polygon edges Start->End
-                *area += V2CROSS(it->StartPoint(), it->EndPoint());
-                // calculate area for circular segment
+                // calculate area for each polygon edge
+                *area += 0.5 * V2CROSS(it->StartPoint(), it->EndPoint());
+                // calculate area for each circular segment
                 *area += 0.5 * it->Radius() * it->Radius() * 
(it->AngleRadians() - sin(it->AngleRadians()));
             }
             }
@@ -332,7 +333,7 @@
             break;
         }
     }
-    *area = fabs(*area) * 0.5 + full_circle_area;
+    *area = fabs(*area) + full_circle_area;
 }
 
 

This was sent by the SourceForge.net collaborative development platform, the 
world's largest Open Source development site.


------------------------------------------------------------------------------
Live Security Virtual Conference
Exclusive live event will cover all the ways today's security and 
threat landscape has changed and how IT managers can respond. Discussions 
will include endpoint security, mobile security and the latest in malware 
threats. http://www.accelacomm.com/jaw/sfrnl04242012/114/50122263/
_______________________________________________
BRL-CAD Source Commits mailing list
brlcad-commits@lists.sourceforge.net
https://lists.sourceforge.net/lists/listinfo/brlcad-commits

Reply via email to