1 // Reference : http://www.cam.hi-ho.ne.jp/strong_warriors/teacher/chapter0{4,5}.html
\r
3 function point(x, y){
\r
8 function getCrossPoint(x11, y11, x12, y12, x21, y21, x22, y22){ // point
\r
11 var c1 = -1 * a1 * x11 - b1 * y11;
\r
14 var c2 = -1 * a2 * x21 - b2 * y21;
\r
16 var temp = b1 * a2 - b2 * a1;
\r
17 if(temp == 0){ // parallel
\r
20 return new point((c1 * b2 - c2 * b1) / temp, (a1 * c2 - a2 * c1) / temp);
\r
23 function isCross(x11, y11, x12, y12, x21, y21, x22, y22){ // boolean
\r
24 var temp = getCrossPoint(x11, y11, x12, y12, x21, y21, x22, y22);
\r
25 if(!temp){ return false; }
\r
26 if(x11 < x12 && (temp.x < x11 || x12 < temp.x) ||
\r
27 x11 > x12 && (temp.x < x12 || x11 < temp.x) ||
\r
28 y11 < y12 && (temp.y < y11 || y12 < temp.y) ||
\r
29 y11 > y12 && (temp.y < y12 || y11 < temp.y)
\r
33 if(x21 < x22 && (temp.x < x21 || x22 < temp.x) ||
\r
34 x21 > x22 && (temp.x < x22 || x21 < temp.x) ||
\r
35 y21 < y22 && (temp.y < y21 || y22 < temp.y) ||
\r
36 y21 > y22 && (temp.y < y22 || y21 < temp.y)
\r
43 function isCrossBox(x1, y1, x2, y2, bx1, by1, bx2, by2){ // boolean
\r
44 if(isCross(x1, y1, x2, y2, bx1, by1, bx2, by1)){ return true; }
\r
45 if(isCross(x1, y1, x2, y2, bx2, by1, bx2, by2)){ return true; }
\r
46 if(isCross(x1, y1, x2, y2, bx1, by2, bx2, by2)){ return true; }
\r
47 if(isCross(x1, y1, x2, y2, bx1, by1, bx1, by2)){ return true; }
\r
51 function isCrossBoxWithOthers(strokesArray, i, bx1, by1, bx2, by2){ // boolean
\r
52 for(var j = 0; j < strokesArray.length; j++){
\r
53 if(i == j){ continue; }
\r
54 switch(strokesArray[j][0]){
\r
61 if(isCrossBox(strokesArray[j][7],
\r
64 strokesArray[j][10],
\r
65 bx1, by1, bx2, by2)){
\r
71 if(isCrossBox(strokesArray[j][5],
\r
75 bx1, by1, bx2, by2)){
\r
79 if(isCrossBox(strokesArray[j][3],
\r
83 bx1, by1, bx2, by2)){
\r
91 function isCrossWithOthers(strokesArray, i, bx1, by1, bx2, by2){ // boolean
\r
92 for(var j = 0; j < strokesArray.length; j++){
\r
93 if(i == j){ continue; }
\r
94 switch(strokesArray[j][0]){
\r
101 if(isCross(strokesArray[j][7],
\r
102 strokesArray[j][8],
\r
103 strokesArray[j][9],
\r
104 strokesArray[j][10],
\r
105 bx1, by1, bx2, by2)){
\r
111 if(isCross(strokesArray[j][5],
\r
112 strokesArray[j][6],
\r
113 strokesArray[j][7],
\r
114 strokesArray[j][8],
\r
115 bx1, by1, bx2, by2)){
\r
119 if(isCross(strokesArray[j][3],
\r
120 strokesArray[j][4],
\r
121 strokesArray[j][5],
\r
122 strokesArray[j][6],
\r
123 bx1, by1, bx2, by2)){
\r