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

ccw?(reference_normal = Vector.new(0,0,-1))
Alias for: counter_clockwise?
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?
cw?(reference_normal = Vector.new(0,0,-1))
Alias for: clockwise?
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