summaryrefslogtreecommitdiffhomepage
path: root/dragon/geometry.rb
diff options
context:
space:
mode:
authorAmir Rajan <[email protected]>2021-12-10 00:09:48 -0600
committerAmir Rajan <[email protected]>2021-12-10 00:09:48 -0600
commiteaa29e72939f5edf61735ccbb73c36ee89369f65 (patch)
treec310fac2e39bd799bf7fc1f73d35c12bcc5187b7 /dragon/geometry.rb
parent33dfdde9ae03e3218b4796f3595d3b727f626587 (diff)
downloaddragonruby-game-toolkit-contrib-eaa29e72939f5edf61735ccbb73c36ee89369f65.tar.gz
dragonruby-game-toolkit-contrib-eaa29e72939f5edf61735ccbb73c36ee89369f65.zip
Synced with DragonRuby Game Toolkit v3.2.
Diffstat (limited to 'dragon/geometry.rb')
-rw-r--r--dragon/geometry.rb34
1 files changed, 25 insertions, 9 deletions
diff --git a/dragon/geometry.rb b/dragon/geometry.rb
index 6bceea8..d7c8ffc 100644
--- a/dragon/geometry.rb
+++ b/dragon/geometry.rb
@@ -6,8 +6,8 @@
module GTK
module Geometry
def self.rotate_point point, angle, around = nil
- s = Math.sin a.to_radians
- c = Math.cos a.to_radians
+ s = Math.sin angle.to_radians
+ c = Math.cos angle.to_radians
px = point.x
py = point.y
cx = 0
@@ -188,8 +188,16 @@ S
end
# @gtk
- def self.line_y_intercept line
- line.y - line_slope(line) * line.x
+ def self.line_y_intercept line, replace_infinity: nil
+ line.y - line_slope(line, replace_infinity: replace_infinity) * line.x
+ rescue Exception => e
+raise <<-S
+* ERROR: ~Geometry::line_y_intercept~
+The following exception was thrown for line: #{line}
+#{e}
+
+Consider passing in ~replace_infinity: VALUE~ to handle for vertical lines.
+S
end
# @gtk
@@ -265,14 +273,22 @@ S
end
# @gtk
- def self.line_intersect line_one, line_two
- m1 = line_slope(line_one)
- m2 = line_slope(line_two)
- b1 = line_y_intercept(line_one)
- b2 = line_y_intercept(line_two)
+ def self.line_intersect line_one, line_two, replace_infinity: nil
+ m1 = line_slope(line_one, replace_infinity: replace_infinity)
+ m2 = line_slope(line_two, replace_infinity: replace_infinity)
+ b1 = line_y_intercept(line_one, replace_infinity: replace_infinity)
+ b2 = line_y_intercept(line_two, replace_infinity: replace_infinity)
x = (b1 - b2) / (m2 - m1)
y = (-b2.fdiv(m2) + b1.fdiv(m1)).fdiv(1.fdiv(m1) - 1.fdiv(m2))
[x, y]
+ rescue Exception => e
+raise <<-S
+* ERROR: ~Geometry::line_intersect~
+The following exception was thrown for line_one: #{line_one}, line_two: #{line_two}
+#{e}
+
+Consider passing in ~replace_infinity: VALUE~ to handle for vertical lines.
+S
end
def self.contract_intersect_rect?