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