lib/mageo/triangle.rb in mageo-0.0.2 vs lib/mageo/triangle.rb in mageo-0.0.3

- old
+ new

@@ -72,11 +72,11 @@ axes = internal_axes #一次独立チェックは initialize 時にされている筈。 pos = (pos - @vertices[0]).to_v3d - internal_pos = pos.to_v3di(axes) + internal_pos = pos.internal_coordinates(axes) return false if internal_pos[2].abs > tolerance #面の外にあれば false return false if (internal_pos[0] < 0.0 ) return false if (1.0 < internal_pos[0]) return false if (internal_pos[1] < 0.0 ) return false if (1.0 < internal_pos[1]) @@ -101,11 +101,11 @@ # 平行のとき、例外。 raise NoIntersectionError if parallel_segment?(segment) # 面内の直線のとき、例外。 endpoints_v3di = segment.endpoints.map do |v| - (v - @vertices[0]).to_v3di(internal_axes) + (v - @vertices[0]).internal_coordinates(internal_axes) end if ( (endpoints_v3di[0][2] == 0.0) && (endpoints_v3di[1][2] == 0.0) ) raise NoIntersectionError end @@ -114,28 +114,28 @@ # ベクトルの何倍か? # ゼロ割りになる条件は、ここまでに弾いた条件に含まれる筈。 c_0 = endpoints_v3di[0][2] c_1 = endpoints_v3di[1][2] factor = c_0 / (c_0 - c_1) - intersection = (segment.endpoints[0] + (segment.to_v3d) * factor) + result = (segment.endpoints[0] + (segment.to_v3d) * factor) # 交点が線分上にあるか?すなわち両端点が面を挟んでいるか? raise NoIntersectionError if c_0 * c_1 > 0 # 交点が三角形の内側にあるか? - if (! include?(intersection, tolerance)) + if (! include?(result, tolerance)) raise NoIntersectionError end - return intersection + return result end # 線分と並行であることを判定する。 # 線分が三角形の面内の場合は false になる。 def parallel_segment?(segment) #p segment.endpoints t = segment.endpoints.map{|v| - v.to_v3di(internal_axes) + v.internal_coordinates(internal_axes) } # 傾いてるときは常に false return false if t[0][2] != t[1][2]