Skip to content

Instantly share code, notes, and snippets.

@you-ssk
Last active August 29, 2015 14:27
Show Gist options
  • Save you-ssk/9a3e6bae2cdb3ec7101f to your computer and use it in GitHub Desktop.
Save you-ssk/9a3e6bae2cdb3ec7101f to your computer and use it in GitHub Desktop.
require 'matrix'
def centroid points
base = points[0]
z = (points[1] - base).cross(points[2] - base).normalize
ds = []
total_area = 0.0
points.drop(1).each_cons(2) do |cons|
a, b = cons[0] - base, cons[1] - base
c = (base + cons[0] + cons[1])/3.0
area = a.cross(b).magnitude/2
ds << c * area
total_area += area
end
ds.inject(:+)/total_area
end
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment