Advertisement
Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- var conns = [];
- var ii=0;
- do
- {
- console.log("conns.length = "+conns.length)
- //start with the nearest
- var testNode=list[ii].node;
- var dest = {x:nodes[testNode].y,y:nodes[testNode].y}
- var col = false;
- //now test innerwalls, outerwalls, and shapes.
- if (ray_intersects_polygon(innerWalls,nodes[i],dest))
- {
- col = true;
- console.log("Intersection innerwall polygon")
- }
- if (!col)
- {
- if (ray_intersects_polygon(new_outerWalls,nodes[i],dest))
- {
- col = true;
- console.log("Intersection outerwall polygon")
- }
- }
- if (!col)
- {
- for (var iii=0; iii<innersections.length; iii++)
- {
- if (ray_intersects_polygon(innersections[iii].poly,nodes[i],dest))
- {
- col=true;
- console.log("Intersection shape "+iii+" polygon")
- }
- }
- }
- if (!col)
- {
- console.log("Making connection. Will be road "+(conns.length+roads.length-1))
- console.log("New road should go from "+nodes[testNode].x+","+nodes[testNode].y+" to ")
- var newCon = {nodeid:testNode}
- newCon.id= (conns.length+roads.length-1)
- conns.push(newCon)
- }
- else
- {
- }
- ii++
- }
- while (conns.length<4 && ii<list.length)
- //now we have 4 or less non-intersecting nodes. Add roads for each.
- for (var ii=0; ii<conns.length; ii++)
- {
- 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};
- newroad.dis = point_distance(newroad.start,newroad.end);
- roads.push(newroad)
- }
- function ray_intersects_polygon(polygon, ray1, ray2){
- var col=false;
- for (var i=0; i<polygon.length-1; i++)
- {
- if (segment_intersection(polygon[i],polygon[i+1],ray1,ray2))
- {
- col=segment_intersection(polygon[i],polygon[i+1],ray1,ray2);
- col.i = i;
- }
- }
- if (segment_intersection(polygon[0],polygon[polygon.length-1],ray1,ray2))
- {
- col=segment_intersection(polygon[0],polygon[polygon.length-1],ray1,ray2)
- col.i = 0;
- }
- return col;
- }
- function segment_intersection(p1,p2, p3,p4) {
- x1=p1.x
- y1=p1.y
- x2=p2.x
- y2=p2.y
- x3=p3.x
- y3=p3.y
- x4=p4.x
- y4=p4.y
- var x=((x1*y2-y1*x2)*(x3-x4)-(x1-x2)*(x3*y4-y3*x4)) /
- ((x1-x2)*(y3-y4)-(y1-y2)*(x3-x4));
- var y=((x1*y2-y1*x2)*(y3-y4)-(y1-y2)*(x3*y4-y3*x4)) /
- ((x1-x2)*(y3-y4)-(y1-y2)*(x3-x4));
- if (isNaN(x)||isNaN(y)) {
- return false;
- } else {
- if (x1>=x2) {
- if (!between(x2, x, x1)) {return false;}
- } else {
- if (!between(x1, x, x2)) {return false;}
- }
- if (y1>=y2) {
- if (!between(y2, y, y1)) {return false;}
- } else {
- if (!between(y1, y, y2)) {return false;}
- }
- if (x3>=x4) {
- if (!between(x4, x, x3)) {return false;}
- } else {
- if (!between(x3, x, x4)) {return false;}
- }
- if (y3>=y4) {
- if (!between(y4, y, y3)) {return false;}
- } else {
- if (!between(y3, y, y4)) {return false;}
- }
- }
- return {x: x, y: y};
- }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement