fork(1) download
  1. from __future__ import division
  2. import math
  3.  
  4. pos = dict()
  5. angle = dict()
  6.  
  7. def checkThird(n1, n2, n3):
  8. x1 = pos[n1][0]
  9. y1 = pos[n1][1]
  10. x2 = pos[n2][0]
  11. y2 = pos[n2][1]
  12. th1 = math.radians(angle[(n1,n3)])
  13. th2 = math.radians(angle[(n2,n3)])
  14. c1 = math.cos(th1)
  15. c2 = math.cos(th2)
  16. s1 = math.sin(th1)
  17. s2 = math.sin(th2)
  18. l1 = ((y2-y1)*c2-(x2-x1)*s2)/(s1*c2-c1*s2)
  19. l2 = ((y2-y1)*c1-(x2-x1)*s1)/(s1*c2-c1*s2)
  20. return (x1+l1*c1, y1+l1*s1)
  21.  
  22. def makeThird(n1,n2,n3):
  23. p3 = checkThird(n1,n2,n3)
  24. pos[n3] = p3
  25. return p3
  26.  
  27.  
  28. def set_pos(n, x, y):
  29. pos[n] = (x,y)
  30.  
  31. # convert D.A.R.C.I. to degrees
  32. # 0 on the left of middle = 0 = North = +x = 0 deg
  33. # 5 in middle = 5 = West = +y = 90 deg
  34. # 0 on the right = 10 = South = -x = 180 deg
  35. # 5 on the side = 15 = East = -y = 270 deg
  36. def darci_to_deg(a):
  37. return (18*a)
  38.  
  39. def set_angle(n1, n2, deg):
  40. angle[(n1,n2)] = deg
  41. angle[(n2,n1)] = 180+deg
  42.  
  43. def set_d_angle(n1, n2, d):
  44. angle[(n1,n2)] = darci_to_deg(d)
  45. angle[(n2,n1)] = darci_to_deg(d+10)
  46.  
  47. def pr(n):
  48. if n in pos:
  49. p = pos[n]
  50. else:
  51. p = (9999999999999999999999,9999999999999999999999)
  52. print n,", (",round(p[0],2),",",round(p[1],2),")"
  53.  
  54. #sanity check
  55. set_pos("test1",0,0)
  56. set_pos("test2",0,3)
  57. set_angle("test1","test3",30)
  58. set_angle("test2","test3",-30)
  59. print makeThird("test1","test2","test3")
  60. print makeThird("test2","test1","test3")
  61.  
  62. set_pos("x", 5,0)
  63. set_pos("y", 0, 10)
  64. set_d_angle("x","p",5)
  65. set_d_angle("y","p",0)
  66. print "5,10?",makeThird("y","x","p")
  67. print "5,10?",makeThird("x","y","p")
  68.  
  69.  
  70.  
  71.  
  72.  
  73. ingress = "ingress"
  74. hallowed = "hallowed"
  75. prophet = "prophet"
  76. sky = "sky"
  77. infinite = "infinite"
  78. binary = "binary"
  79. shattered = "shattered"
  80. deep = "deep"
  81.  
  82. # distances are in meters, +/- 2 meters
  83. # angles are in degrees, +/- 3 degrees
  84.  
  85. set_pos(ingress,0.0,0.0)
  86. set_pos(hallowed,0.0,50.0)
  87.  
  88. set_d_angle(ingress, hallowed, 5)
  89. set_d_angle(ingress, prophet, 1.375)
  90. set_d_angle(ingress, sky, 3)
  91. set_d_angle(ingress, binary, 4.5)
  92. set_d_angle(ingress, deep, 8.25)
  93. set_d_angle(hallowed, prophet, 19.875)
  94. set_d_angle(hallowed, sky, 2.25)
  95. set_d_angle(hallowed, binary, 3.75)
  96. set_d_angle(hallowed, shattered, 7.25)
  97. set_d_angle(hallowed, deep, 9.5)
  98. set_d_angle(prophet, sky, 5)
  99. set_d_angle(prophet, binary, 9.125)
  100. set_d_angle(sky, infinite, 19.75)
  101. set_d_angle(sky, binary, 12)
  102. set_d_angle(infinite, binary, 15.75)
  103. set_d_angle(binary, shattered, 8)
  104. set_d_angle(shattered, deep, 13.5)
  105.  
  106. makeThird(ingress, hallowed, deep)
  107. makeThird(ingress, hallowed, prophet)
  108. makeThird(ingress, prophet, sky)
  109. makeThird(ingress,prophet, binary)
  110. makeThird(binary, sky, infinite)
  111. makeThird(deep, binary, shattered)
  112.  
  113.  
  114.  
  115. pr(ingress)
  116. pr(hallowed)
  117. pr(binary)
  118. pr(sky)
  119. pr(prophet)
  120. pr(infinite)
  121. pr(shattered)
  122. pr(deep)
  123. # output
  124. """
  125. ingress , ( 0.0 , 0.0 )
  126. hallowed , ( 0.0 , 50.0 )
  127. binary , ( 11.26 , 71.08 )
  128. sky , ( 99.94 , 137.56 )
  129. prophet , ( 99.94 , 46.07 )
  130. infinite , ( -6.72 , 145.95 )
  131. shattered , ( -75.9 , 134.41 )
  132. deep , ( -110.03 , 67.43 )
  133. """
Success #stdin #stdout 0s 23296KB
stdin
Standard input is empty
stdout
(2.5980762113533165, 1.5)
(2.5980762113533165, 1.5)
5,10? (5.000000000000001, 10.0)
5,10? (5.000000000000001, 10.0)
ingress , ( 0.0 , 0.0 )
hallowed , ( 0.0 , 50.0 )
binary , ( 11.26 , 71.08 )
sky , ( 99.94 , 137.56 )
prophet , ( 99.94 , 46.07 )
infinite , ( -6.72 , 145.95 )
shattered , ( -75.9 , 134.41 )
deep , ( -110.03 , 67.43 )