class Geo3d::Triangle
Attributes
a[RW]
b[RW]
c[RW]
Public Class Methods
new(*args)
click to toggle source
# File lib/geo3d/triangle.rb, line 9 def initialize *args @a = args.size > 0 ? args[0] : Vector.new @b = args.size > 1 ? args[1] : Vector.new @c = args.size > 2 ? args[2] : Vector.new end
Public Instance Methods
clockwise?(reference_normal = Vector.new(0,0,-1))
click to toggle source
# File lib/geo3d/triangle.rb, line 38 def clockwise? reference_normal = Vector.new(0,0,-1) signed_area( reference_normal ) > 0 end
Also aliased as: cw?
counter_clockwise?(reference_normal = Vector.new(0,0,-1))
click to toggle source
# File lib/geo3d/triangle.rb, line 42 def counter_clockwise? reference_normal = Vector.new(0,0,-1) signed_area( reference_normal ) < 0 end
Also aliased as: ccw?
flip()
click to toggle source
# File lib/geo3d/triangle.rb, line 19 def flip f = clone f.flip! f end
flip!()
click to toggle source
# File lib/geo3d/triangle.rb, line 15 def flip! @b, @c = @c, @b end
normal()
click to toggle source
# File lib/geo3d/triangle.rb, line 25 def normal (b - a).cross(c - a).normalize end
points()
click to toggle source
# File lib/geo3d/triangle.rb, line 5 def points [a, b, c] end
signed_area(reference_normal = Vector.new(0,0,-1))
click to toggle source
# File lib/geo3d/triangle.rb, line 29 def signed_area reference_normal = Vector.new(0,0,-1) sum = Vector.new 0, 0, 0, 0 points.each_with_index do |current_point, i| next_point = points[(i == points.size - 1) ? 0 : i+1] sum += current_point.cross next_point end reference_normal.dot(sum) / 2.0 end