Advertisement
Guest User

Untitled

a guest
Jun 24th, 2018
72
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
text 3.19 KB | None | 0 0
  1. var conns = [];
  2. var ii=0;
  3. do
  4. {
  5. console.log("conns.length = "+conns.length)
  6. //start with the nearest
  7. var testNode=list[ii].node;
  8. var dest = {x:nodes[testNode].y,y:nodes[testNode].y}
  9. var col = false;
  10. //now test innerwalls, outerwalls, and shapes.
  11. if (ray_intersects_polygon(innerWalls,nodes[i],dest))
  12. {
  13. col = true;
  14. console.log("Intersection innerwall polygon")
  15. }
  16. if (!col)
  17. {
  18. if (ray_intersects_polygon(new_outerWalls,nodes[i],dest))
  19. {
  20. col = true;
  21. console.log("Intersection outerwall polygon")
  22. }
  23. }
  24. if (!col)
  25. {
  26. for (var iii=0; iii<innersections.length; iii++)
  27. {
  28. if (ray_intersects_polygon(innersections[iii].poly,nodes[i],dest))
  29. {
  30. col=true;
  31. console.log("Intersection shape "+iii+" polygon")
  32. }
  33. }
  34. }
  35.  
  36. if (!col)
  37. {
  38. console.log("Making connection. Will be road "+(conns.length+roads.length-1))
  39. console.log("New road should go from "+nodes[testNode].x+","+nodes[testNode].y+" to ")
  40. var newCon = {nodeid:testNode}
  41. newCon.id= (conns.length+roads.length-1)
  42. conns.push(newCon)
  43.  
  44. }
  45. else
  46. {
  47. }
  48.  
  49. ii++
  50. }
  51. while (conns.length<4 && ii<list.length)
  52.  
  53. //now we have 4 or less non-intersecting nodes. Add roads for each.
  54. for (var ii=0; ii<conns.length; ii++)
  55. {
  56. var newroad = {start:{x:nodes[i].x,y:nodes[i].y},end:{x:nodes[conns[ii].nodeid].x,y:nodes[conns[ii].nodeid].y},id:conns[ii].id};
  57. newroad.dis = point_distance(newroad.start,newroad.end);
  58. roads.push(newroad)
  59. }
  60.  
  61.  
  62. function ray_intersects_polygon(polygon, ray1, ray2){
  63.  
  64. var col=false;
  65.  
  66. for (var i=0; i<polygon.length-1; i++)
  67. {
  68. if (segment_intersection(polygon[i],polygon[i+1],ray1,ray2))
  69. {
  70. col=segment_intersection(polygon[i],polygon[i+1],ray1,ray2);
  71. col.i = i;
  72. }
  73. }
  74.  
  75. if (segment_intersection(polygon[0],polygon[polygon.length-1],ray1,ray2))
  76. {
  77. col=segment_intersection(polygon[0],polygon[polygon.length-1],ray1,ray2)
  78. col.i = 0;
  79. }
  80.  
  81. return col;
  82. }
  83.  
  84. function segment_intersection(p1,p2, p3,p4) {
  85. x1=p1.x
  86. y1=p1.y
  87.  
  88. x2=p2.x
  89. y2=p2.y
  90.  
  91. x3=p3.x
  92. y3=p3.y
  93.  
  94. x4=p4.x
  95. y4=p4.y
  96.  
  97. var x=((x1*y2-y1*x2)*(x3-x4)-(x1-x2)*(x3*y4-y3*x4)) /
  98. ((x1-x2)*(y3-y4)-(y1-y2)*(x3-x4));
  99. var y=((x1*y2-y1*x2)*(y3-y4)-(y1-y2)*(x3*y4-y3*x4)) /
  100. ((x1-x2)*(y3-y4)-(y1-y2)*(x3-x4));
  101. if (isNaN(x)||isNaN(y)) {
  102. return false;
  103. } else {
  104. if (x1>=x2) {
  105. if (!between(x2, x, x1)) {return false;}
  106. } else {
  107. if (!between(x1, x, x2)) {return false;}
  108. }
  109. if (y1>=y2) {
  110. if (!between(y2, y, y1)) {return false;}
  111. } else {
  112. if (!between(y1, y, y2)) {return false;}
  113. }
  114. if (x3>=x4) {
  115. if (!between(x4, x, x3)) {return false;}
  116. } else {
  117. if (!between(x3, x, x4)) {return false;}
  118. }
  119. if (y3>=y4) {
  120. if (!between(y4, y, y3)) {return false;}
  121. } else {
  122. if (!between(y3, y, y4)) {return false;}
  123. }
  124. }
  125. return {x: x, y: y};
  126. }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement