PROG0337 - High-voltage cables
A company has to hang a high-voltage cable that goes in a straight line between point $A$ and point $B$. However, there's an obstacle $O$ on the terrain, and the company fears that it might be in the way of the cable. They need your help to determine whether the obstacle is in the way or not.
Although the earth is a globe, the distances here are small enough to assume that we are working in a flat area. We treat the degrees of latitude and longitude as $x$ and $y$ co-ordinates. If the co-ordinates of $A$, $B$ and $O$ respectively are $(x_A,y_A)$, $(x_B,y_B)$ and $(x_O,y_O)$, you can use the following equation to determine whether these points are on the same line: $$\left(y_A-y_B\right)\,x_O - \left(x_A-x_B\right)\,y_O + x_A\,y_B - x_B\,y_A=0$$
If the equation is true, the three points are in one line. However, it is only an issue if the obstacle is situated between $A$ and $B$. Check whether the obstacle is situated between $A$ and $B$, horizontally as well as vertically.
Assignment
Write a function isObstacle that takes 6 co-ordinates (in this order: $x_A, y_A,x_B, y_B, x_O, y_O$). As a result, the function should return a Boolean value, that indicates whether the obstacle is in the way if we want to hang a high-voltage cable between point $A$ and point $B$. For this assignment you may assume that a value is 0, if the deviation is less than $10^{-6}$ .
Example
>>> isObstacle(51.022, 3.7095, 51.028, 3.7185, 51.025, 3.715) False >>> isObstacle(51.022, 3.7095, 51.028, 3.7185, 51.025, 3.714) True
Een bedrijf moet een hoogspanningskabel spannen die in een rechte lijn loopt tussen punt $A$ en punt $B$. Er staat echter een obstakel $O$ op het terrein, waarvan het bedrijf vreest dat het wel eens in de weg van de kabel zou kunnen staan. Ze hebben jou hulp nodig om te bepalen of het obstakel echt wel in de weg staat.
Alhoewel de aarde eigenlijk een bol is, zijn de afstanden hier klein genoeg om ervan uit te gaan dat we in het vlak werken. We behandelen dus de breedte- en lengteligging als $x$- en $y$-coördinaten. Als de coördinaten van $A$, $B$ en $O$ respectievelijk $(x_A,y_A)$, $(x_B,y_B)$ en $(x_O,y_O)$ zijn, dan kan je de volgende vergelijking gebruiken om na te gaan of deze drie punten op één lijn liggen:$$\left(y_A-y_B\right)\,x_O - \left(x_A-x_B\right)\,y_O + x_A\,y_B - x_B\,y_A=0$$
Als deze vergelijking voldaan is, dan liggen de drie punten op één lijn. Er is echter pas een probleem als het obstakel ook effectief tussen punt $A$ en punt $B$ ligt. Controleer daarvoor of het obstakel zowel horizontaal als verticaal tussen het punt $A$ en het punt $B$ ligt.
Opgave
Schrijf een functie isObstakel die 6 coördinaten als argument neemt (in de volgorde $x_A, y_A,x_B, y_B, x_O, y_O$). De functie moet een Booleaanse waarde als resultaat teruggeven, die aangeeft of het obstakel al dan niet in de weg staat voor het spannen van een hoogspanningskabel tussen punt $A$ en punt $B$. Voor deze opgave mag je ervan uitgaan dat een waarde 0 is, als die daar minder dan $10^{-6}$ van afwijkt.
Voorbeeld
>>> isObstakel(51.022, 3.7095, 51.028, 3.7185, 51.025, 3.715) False >>> isObstakel(51.022, 3.7095, 51.028, 3.7185, 51.025, 3.714) True
Added by: | Peter Dawyndt |
Date: | 2013-02-19 |
Time limit: | 10s |
Source limit: | 50000B |
Memory limit: | 1536MB |
Cluster: | Cube (Intel G860) |
Languages: | PY_NBC |
Resource: | None |