Created
February 11, 2016 19:02
-
-
Save danicheman/68514c6bfb3530cbddf1 to your computer and use it in GitHub Desktop.
Topcoder.com Airplane Easy question
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
| public class Airways { | |
| public double distance(int n, int east, int north) { | |
| double distance = 0; | |
| double angleInterval = 360 / n; | |
| //form a triangle using the angles before and after the east/north position angle | |
| int quadrantOffset = quadrantOffset(east, north); | |
| double offset = Math.atan2(Math.abs(east), Math.abs(north)); | |
| double totalOffset = offset + quadrantOffset; | |
| double beforeAngle = 0; | |
| double afterAngle = 0; | |
| //get nearest angles before and after totalOffset | |
| for(double angleIter = 0; angleIter < 360; angleIter += angleInterval) { | |
| if(angleIter < totalOffset) { | |
| beforeAngle = angleIter; | |
| } else { | |
| afterAngle = angleIter; | |
| break; | |
| } | |
| } | |
| //pythagorus | |
| double hyp = Math.sqrt(Math.pow(east,2) + Math.pow(north,2)); | |
| //start with afterAngle | |
| if (afterAngle == totalOffset) { | |
| return hyp; | |
| } else { | |
| //math time! | |
| //find the angles to the hypotenuse | |
| double angle = totalOffset - beforeAngle; | |
| //double angle2 = afterAngle - totalOffset; | |
| //soh cah, solve for o, a | |
| double opp = hyp * Math.sin(angle); | |
| double adj = hyp * Math.cos(angle); | |
| return opp + adj; | |
| } | |
| // if afterangle > totalOffset | |
| } | |
| int quadrantOffset(int east, int north) { | |
| if(east > 0) { | |
| if(north > 0) { | |
| return 270; | |
| } else { | |
| return 0; | |
| } | |
| } else { | |
| if(north > 0) { | |
| return 180; | |
| } else { | |
| return 90; | |
| } | |
| } | |
| } | |
| } |
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment