aboutsummaryrefslogtreecommitdiff
path: root/challenge-101/abigail/python/ch-2.py
diff options
context:
space:
mode:
author冯昶 <seaker@qq.com>2021-03-15 18:13:51 +0800
committer冯昶 <seaker@qq.com>2021-03-15 18:13:51 +0800
commit8b6be37fe4dac8b4c6489a95e55514b76b298d15 (patch)
treeae36c8ec2c71f606c0e36adaa19dba366a68a0b4 /challenge-101/abigail/python/ch-2.py
parent865acfd056fb6f409ec6b1a81d60b931cbcb69fe (diff)
parentc9aec2da6bcb04b488183f09ca94bee488557aff (diff)
downloadperlweeklychallenge-club-8b6be37fe4dac8b4c6489a95e55514b76b298d15.tar.gz
perlweeklychallenge-club-8b6be37fe4dac8b4c6489a95e55514b76b298d15.tar.bz2
perlweeklychallenge-club-8b6be37fe4dac8b4c6489a95e55514b76b298d15.zip
Merge branch 'master' of github.com:seaker/perlweeklychallenge-club
Diffstat (limited to 'challenge-101/abigail/python/ch-2.py')
-rw-r--r--challenge-101/abigail/python/ch-2.py48
1 files changed, 48 insertions, 0 deletions
diff --git a/challenge-101/abigail/python/ch-2.py b/challenge-101/abigail/python/ch-2.py
new file mode 100644
index 0000000000..1ed4dc151f
--- /dev/null
+++ b/challenge-101/abigail/python/ch-2.py
@@ -0,0 +1,48 @@
+#!/opt/local/bin/python
+
+#
+# See ../README.md
+#
+
+#
+# Run as python ch-2.py < input-file
+#
+
+import fileinput
+
+#
+# This determines on which side of the line through (x1, y1) and
+# (x2, y2) the origin lies. If > 0, then the origin lies to the left
+# of the line, if < 0, the origin lies to the right of the line, if
+# = 0, the origin lies on the line.
+#
+def side (x1, y1, x2, y2):
+ return (y2 - y1) * x2 - (x2 - x1) * y2
+
+
+for line in fileinput . input ():
+ #
+ # Parse input. We need an explicite conversion from strings to floats
+ #
+ x1, y1, x2, y2, x3, y3 = map (lambda f: float (f), line . split ())
+
+ #
+ # Determine where the origin is relative to the three lines
+ # through the vertices of the triangle. Note we have to go
+ # in a specific order through the points. (Either clock wise,
+ # or counter clockwise, as long as we're consistent).
+ #
+ s1 = side (x2, y2, x3, y3)
+ s2 = side (x3, y3, x1, y1)
+ s3 = side (x1, y1, x2, y2)
+
+ #
+ # If the origin either lies to the left (or on) each of the
+ # lines, or to the right (or on) each of the lines, the origin
+ # lies inside the triangle. If not, it does not.
+ #
+ if s1 <= 0 and s2 <= 0 and s3 <= 0 or \
+ s1 >= 0 and s2 >= 0 and s3 >= 0:
+ print (1)
+ else:
+ print (0)