# Math lib (even in C or C++... nobody is perfect !)

**URL:** <https://www.ruby-forum.com/t/math-lib-even-in-c-or-c-nobody-is-perfect/104477>\
**Category:** Ruby\
**Created:** [May 18, 2007, 2:56pm UTC](https://www.ruby-forum.com/t/math-lib-even-in-c-or-c-nobody-is-perfect/104477 "2007-05-18T14:56:17Z")\
**Posts on this page:** 3\
**Page:** 1

<div class="post-metadata">

**Author:** ![Josselin](https://www.ruby-forum.com/letter_avatar_proxy/v4/letter/j/9de0a6/32.png) [@Josselin](https://www.ruby-forum.com/u/Josselin)\
**Post date:** [May 18, 2007, 2:56pm UTC](https://www.ruby-forum.com/t/math-lib-even-in-c-or-c-nobody-is-perfect/104477/1 "2007-05-18T14:56:17Z")

</div>

I am looking for a function to calculate the barycentre of a point list  
(GPS coordinates lat/lng) …

anybody aware of such lib or utility I could rewrite in Ruby ? bet it  
doesn’t exist yet

thanks for any hint  
joss

---

<div class="post-metadata">

**Author:** ![Josselin](https://www.ruby-forum.com/letter_avatar_proxy/v4/letter/j/9de0a6/32.png) [@Josselin](https://www.ruby-forum.com/u/Josselin)\
**Post date:** [May 18, 2007, 3:39pm UTC](https://www.ruby-forum.com/t/math-lib-even-in-c-or-c-nobody-is-perfect/104477/2 "2007-05-18T15:39:25Z")

</div>

Hi!

Whenever I need to use a math lib in C, I use the GNU Scientific Library  
(GSL): [GSL - GNU Scientific Library - GNU Project - Free Software Foundation](http://www.gnu.org/software/gsl/)  
However, no idea if it contains what you need…

cheers, Severin

Josselin schrieb:

---

<div class="post-metadata">

**Author:** ![Josselin](https://www.ruby-forum.com/letter_avatar_proxy/v4/letter/j/9de0a6/32.png) [@Josselin](https://www.ruby-forum.com/u/Josselin)\
**Post date:** [May 18, 2007, 5:41pm UTC](https://www.ruby-forum.com/t/math-lib-even-in-c-or-c-nobody-is-perfect/104477/3 "2007-05-18T17:41:42Z")

</div>

On 2007-05-18 15:38:27 +0200, Severin Schoepke  
[removed\_email\_address@domain.invalid](mailto:removed_email_address@domain.invalid) said:

> Josselin schrieb:
> 
> > I am looking for a function to calculate the barycentre of a point list  
> > (GPS coordinates lat/lng) …
> > 
> > anybody aware of such lib or utility I could rewrite in Ruby ? bet it  
> > doesn’t exist yet
> > 
> > thanks for any hint  
> > joss

got it from a PHP script… translated into Ruby…

def deg2rad(d)  
(d/180.0)\*Math::PI  
end  
def rad2deg(r)  
(r/Math::PI)\*180  
end

def self.gravity\_center(placemarks)  
sumx = 0.0  
sumy = 0.0  
sumz = 0.0

for placemark in placemarks do  
# convert to radians  
lat = deg2rad(placemark[0])  
lon = deg2rad(placemark[1])  
# convert spherical coordinate into cartesian  
x = Math::cos(lat) \* Math::sin(lon)  
y = Math::cos(lat) \* Math::cos(lon)  
z = Math::sin(lat)  
# sum the vectors  
sumx += x  
sumy += y  
sumz += z  
end

# convert cartesian coordinate back to spherical

meanz = sumz / placemarks.nitems  
lon = rad2deg(Math::atan2(sumx, sumy))

meanx = sumx / placemarks.nitems  
meany = sumy / placemarks.nitems  
lat = rad2deg(Math::atan(meanz / Math::sqrt(meanx **2 + meany** 2)))  
return [lat, lon]  
end
