class GreinerHormann::Vertex
Attributes
corresponding[RW]
distance[RW]
is_entry[RW]
is_intersection[RW]
next_node[RW]
prev_node[RW]
visited[RW]
x[RW]
y[RW]
Public Class Methods
create_intersection(x, y, distance)
click to toggle source
# File lib/greiner_hormann/vertex.rb, line 15 def self.create_intersection(x, y, distance) vert = Vertex.new(x, y) vert.distance = distance vert.is_intersection = true vert.is_entry = false vert end
new(x, y)
click to toggle source
# File lib/greiner_hormann/vertex.rb, line 5 def initialize(x, y) self.x = x self.y = y self.next_node = self.prev_node = self.corresponding = nil self.distance = 0.0 self.is_entry = true self.is_intersection = self.visited = false end
Public Instance Methods
==(v)
click to toggle source
# File lib/greiner_hormann/vertex.rb, line 30 def ==(v) x == v.x && y == v.y end
equals(v)
click to toggle source
# File lib/greiner_hormann/vertex.rb, line 34 def equals(v) self == v end
is_inside(poly)
click to toggle source
# File lib/greiner_hormann/vertex.rb, line 38 def is_inside(poly) odd_nodes = false vert = poly.first next_n = vert.next_node loop do if (vert.y < y && next_n.y >= y || next_n.y < y && vert.y >= y) && (vert.x <= x || next_n.x <= x) odd_nodes ^= vert.x + (y - vert.y) / (next_n.y - vert.y) * (next_n.x - vert.x) < x end vert = vert.next_node next_n = vert.next_node || poly.first break if vert == poly.first end odd_nodes end
visit()
click to toggle source
# File lib/greiner_hormann/vertex.rb, line 23 def visit self.visited = true if !corresponding.nil? && !corresponding.visited corresponding.visit end end