Quiz: Geometric intersection in Python
In this quiz, you want to write intersection functions. Assume that lines consist of only two vertices to make things simpler (hopefully).
Total points are 120, so there are 20 bonus points that are not tied to any specific problems. Please create only one script file called FirstLastname_quiz2.py
and include all your functions only there. For derivation, please take a picture of your work and submit it in FirstLastname_work.jpeg
. Please submit only these two files. There will be penalties for violating these submission requirements. I will deduct $-2$ for each violation including function and argument names after prorating your score.
To earn 100% of your score, please submit it in 2 hours. After that, your final score will be linearly reduced by 5% in hourly increments. For example, if you submit it 2 hours and 10 minutes late, your full potential will be $120\times(1-0.05\times 3)=102$. In other words, if you do not submit it in 20 hours after the regular 2 hours of the proctored quiz, you will get a zero!
Only the math
module is allowed. If you use any other modules, you will get 50% of your final prorated score.
Enjoy!
1 Point intersection
20 points
Write a function intersect_point(line, pnt)
that returns True
if pnt
is on line
or False
otherwise. line
is $((x_0, y_0), (x_1, y_1))$ and pnt
is $(s, t)$.
2 Perpendicularity
30 points
Derive an equation for the line that is perpendicular to $y=ax+b$ and passes through $(s, t)$. Submit your full work in JPEG.
3 Snapping
30 points
Write a function snap_point(line, pnt)
that snaps pnt
to line
. If pnt
cannot be projected onto line
perpendicularly, return the closest node of line
.
4 Line intersection
40 points
Write a function intersect_line(line1, line2)
that returns the intersection point of two lines if any or None
otherwise. If line1
overlaps with line2
linearly (i.e., they share a line segment, not a point), return the start and end nodes of the shared line segment in $((x_s, y_s), (x_e, y_e))$.