Revision: 65262
          http://sourceforge.net/p/brlcad/code/65262
Author:   d_rossberg
Date:     2015-06-11 15:54:28 +0000 (Thu, 11 Jun 2015)
Log Message:
-----------
applied patch http://sourceforge.net/p/brlcad/patches/366/ provided by Kalpit 
Thakkar: Callback for finding Volume of Right Hyperbolic Cylinder
Calculates the Volume of RHC. The worked out Mathematics can be found here: 
https://drive.google.com/open?id=0B12fowx3-NjTfl9wVmFlajR6LWxRQ1ZrMlM0Wl9IZWZ6cURfem11Zm5sVWFZczdBalRJdDQ&authuser=0

Modified Paths:
--------------
    brlcad/trunk/src/librt/primitives/rhc/rhc.c
    brlcad/trunk/src/librt/primitives/table.c

Modified: brlcad/trunk/src/librt/primitives/rhc/rhc.c
===================================================================
--- brlcad/trunk/src/librt/primitives/rhc/rhc.c 2015-06-11 15:15:51 UTC (rev 
65261)
+++ brlcad/trunk/src/librt/primitives/rhc/rhc.c 2015-06-11 15:54:28 UTC (rev 
65262)
@@ -1793,7 +1793,7 @@
     magB = MAGNITUDE(rip->rhc_B);
     height = MAGNITUDE(rip->rhc_H);
     a = (rip->rhc_r * b) / sqrt(magB * (2.0 * rip->rhc_c + magB));
-    sqrt_ra = sqrt(rip->rhc_r * rip->rhc_r + b * b);
+    sqrt_ra = sqrt(rip->rhc_r * rip->rhc_r + a * a);
     integralArea = (b / a) * ((2.0 * rip->rhc_r * sqrt_ra) / 2.0 + ((a * a) / 
2.0) * (log(sqrt_ra + rip->rhc_r) - log(sqrt_ra - rip->rhc_r)));
     A = 2.0 * rip->rhc_r * (rip->rhc_c + magB) - integralArea;
 
@@ -1811,7 +1811,36 @@
     *area = 2.0 * A + 2.0 * rip->rhc_r * height + arclen * height;
 }
 
+
 /**
+ * Computer volume of a right hyperbolic cylinder
+ */
+void
+rt_rhc_volume(fastf_t *volume, const struct rt_db_internal *ip)
+{
+    struct rt_rhc_internal *rip;
+    fastf_t A, integralArea, a, b, magB, sqrt_ra, height;
+    if (volume == NULL || ip == NULL) {
+       return;
+    }
+
+    RT_CK_DB_INTERNAL(ip);
+    rip = (struct rt_rhc_internal *)ip->idb_ptr;
+    RT_RHC_CK_MAGIC(rip);
+
+    b = rip->rhc_c;
+    magB = MAGNITUDE(rip->rhc_B);
+    height = MAGNITUDE(rip->rhc_H);
+    a = (rip->rhc_r * b) / sqrt(magB * (2.0 * rip->rhc_c + magB));
+    sqrt_ra = sqrt(rip->rhc_r * rip->rhc_r + a * a);
+    integralArea = (b / a) * ((2.0 * rip->rhc_r * sqrt_ra) / 2.0 + ((a * a) / 
2.0) * (log(sqrt_ra + rip->rhc_r) - log(sqrt_ra - rip->rhc_r)));
+    A = 2.0 * rip->rhc_r * (rip->rhc_c + magB) - integralArea;
+
+    *volume = A * height;
+}
+
+
+/**
  * Computes centroid of a right hyperbolic cylinder
  */
 void

Modified: brlcad/trunk/src/librt/primitives/table.c
===================================================================
--- brlcad/trunk/src/librt/primitives/table.c   2015-06-11 15:15:51 UTC (rev 
65261)
+++ brlcad/trunk/src/librt/primitives/table.c   2015-06-11 15:54:28 UTC (rev 
65262)
@@ -1003,7 +1003,7 @@
        NULL,
        RTFUNCTAB_FUNC_PARAMS_CAST(rt_rhc_params),
        RTFUNCTAB_FUNC_BBOX_CAST(rt_rhc_bbox),
-       NULL,
+       RTFUNCTAB_FUNC_VOLUME_CAST(rt_rhc_volume),
        RTFUNCTAB_FUNC_SURF_AREA_CAST(rt_rhc_surf_area),
        RTFUNCTAB_FUNC_CENTROID_CAST(rt_rhc_centroid),
        NULL,

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


------------------------------------------------------------------------------
_______________________________________________
BRL-CAD Source Commits mailing list
[email protected]
https://lists.sourceforge.net/lists/listinfo/brlcad-commits

Reply via email to