+++ /dev/null
-function divide_curve(kage, x1, y1, sx1, sy1, x2, y2, curve, div_curve, off_curve){\r
- var rate = 0.5;\r
- var cut = Math.floor(curve.length * rate);\r
- var cut_rate = cut / curve.length;\r
- var tx1 = x1 + (sx1 - x1) * cut_rate;\r
- var ty1 = y1 + (sy1 - y1) * cut_rate;\r
- var tx2 = sx1 + (x2 - sx1) * cut_rate;\r
- var ty2 = sy1 + (y2 - sy1) * cut_rate;\r
- var tx3 = tx1 + (tx2 - tx1) * cut_rate;\r
- var ty3 = ty1 + (ty2 - ty1) * cut_rate;\r
- \r
- div_curve[0] = new Array();\r
- div_curve[1] = new Array();\r
- off_curve[0] = new Array(6);\r
- off_curve[1] = new Array(6);\r
- \r
- // must think about 0 : <0\r
- var i;\r
- for(i = 0; i <= cut; i++){\r
- div_curve[0].push(curve[i]);\r
- }\r
- off_curve[0][0] = x1;\r
- off_curve[0][1] = y1;\r
- off_curve[0][2] = tx1;\r
- off_curve[0][3] = ty1;\r
- off_curve[0][4] = tx3;\r
- off_curve[0][5] = ty3;\r
- \r
- for(i = cut; i < curve.length; i++){\r
- div_curve[1].push(curve[i]);\r
- }\r
- off_curve[1][0] = tx3;\r
- off_curve[1][1] = ty3;\r
- off_curve[1][2] = tx2;\r
- off_curve[1][3] = ty2;\r
- off_curve[1][4] = x2;\r
- off_curve[1][5] = y2;\r
-}\r
-\r
-// ------------------------------------------------------------------\r
-function find_offcurve(kage, curve, sx, sy, result){\r
- var nx1, ny1, nx2, ny2, tx, ty;\r
- var minx, miny, count, diff;\r
- var tt, t, x, y, ix, iy;\r
- var mindiff = 100000;\r
- var area = 8;\r
- var mesh = 2;\r
- // area = 10 mesh = 5 -> 281 calcs\r
- // area = 10 mesh = 4 -> 180 calcs\r
- // area = 8 mesh = 4 -> 169 calcs\r
- // area = 7.5 mesh = 3 -> 100 calcs\r
- // area = 8 mesh = 2 -> 97 calcs\r
- // area = 7 mesh = 2 -> 80 calcs\r
- \r
- nx1 = curve[0][0];\r
- ny1 = curve[0][1];\r
- nx2 = curve[curve.length - 1][0];\r
- ny2 = curve[curve.length - 1][1];\r
- \r
- for(tx = sx - area; tx < sx + area; tx += mesh){\r
- for(ty = sy - area; ty < sy + area; ty += mesh){\r
- count = 0;\r
- diff = 0;\r
- for(tt = 0; tt < curve.length; tt++){\r
- t = tt / curve.length;\r
- \r
- //calculate a dot\r
- x = ((1.0 - t) * (1.0 - t) * nx1 + 2.0 * t * (1.0 - t) * tx + t * t * nx2);\r
- y = ((1.0 - t) * (1.0 - t) * ny1 + 2.0 * t * (1.0 - t) * ty + t * t * ny2);\r
- \r
- //KATAMUKI of vector by BIBUN\r
- ix = (nx1 - 2.0 * tx + nx2) * 2.0 * t + (-2.0 * nx1 + 2.0 * tx);\r
- iy = (ny1 - 2.0 * ty + ny2) * 2.0 * t + (-2.0 * ny1 + 2.0 * ty);\r
- \r
- diff += (curve[count][0] - x) * (curve[count][0] - x) + (curve[count][1] - y) * (curve[count][1] - y);\r
- if(diff > mindiff){\r
- tt = curve.length;\r
- }\r
- count++;\r
- }\r
- if(diff < mindiff){\r
- minx = tx;\r
- miny = ty;\r
- mindiff = diff;\r
- }\r
- }\r
- }\r
- \r
- for(tx = minx - mesh + 1; tx <= minx + mesh - 1; tx += 0.5){\r
- for(ty = miny - mesh + 1; ty <= miny + mesh - 1; ty += 0.5){\r
- count = 0;\r
- diff = 0;\r
- for(tt = 0; tt < curve.length; tt++){\r
- t = tt / curve.length;\r
- \r
- //calculate a dot\r
- x = ((1.0 - t) * (1.0 - t) * nx1 + 2.0 * t * (1.0 - t) * tx + t * t * nx2);\r
- y = ((1.0 - t) * (1.0 - t) * ny1 + 2.0 * t * (1.0 - t) * ty + t * t * ny2);\r
- \r
- //KATAMUKI of vector by BIBUN\r
- ix = (nx1 - 2.0 * tx + nx2) * 2.0 * t + (-2.0 * nx1 + 2.0 * tx);\r
- iy = (ny1 - 2.0 * ty + ny2) * 2.0 * t + (-2.0 * ny1 + 2.0 * ty);\r
- \r
- diff += (curve[count][0] - x) * (curve[count][0] - x) + (curve[count][1] - y) * (curve[count][1] - y);\r
- if(diff > mindiff){\r
- tt = curve.length;\r
- }\r
- count++;\r
- }\r
- if(diff < mindiff){\r
- minx = tx;\r
- miny = ty;\r
- mindiff = diff;\r
- }\r
- }\r
- }\r
- \r
- result[0] = nx1;\r
- result[1] = ny1;\r
- result[2] = minx;\r
- result[3] = miny;\r
- result[4] = nx2;\r
- result[5] = ny2;\r
- result[6] = mindiff;\r
-}\r
-\r
-// ------------------------------------------------------------------\r
-function get_candidate(kage, curve, a1, a2, x1, y1, sx1, sy1, x2, y2, opt3, opt4){\r
- var x, y, ix, iy, ir, ia, ib, tt, t, deltad;\r
- var hosomi = 0.5;\r
- \r
- curve[0] = new Array();\r
- curve[1] = new Array();\r
- \r
- for(tt = 0; tt <= 1000; tt = tt + kage.kRate){\r
- t = tt / 1000;\r
- \r
- //calculate a dot\r
- x = ((1.0 - t) * (1.0 - t) * x1 + 2.0 * t * (1.0 - t) * sx1 + t * t * x2);\r
- y = ((1.0 - t) * (1.0 - t) * y1 + 2.0 * t * (1.0 - t) * sy1 + t * t * y2);\r
- \r
- //KATAMUKI of vector by BIBUN\r
- ix = (x1 - 2.0 * sx1 + x2) * 2.0 * t + (-2.0 * x1 + 2.0 * sx1);\r
- iy = (y1 - 2.0 * sy1 + y2) * 2.0 * t + (-2.0 * y1 + 2.0 * sy1);\r
- //line SUICHOKU by vector\r
- if(ix != 0 && iy != 0){\r
- ir = Math.atan(iy / ix * -1);\r
- ia = Math.sin(ir) * (kage.kMinWidthT);\r
- ib = Math.cos(ir) * (kage.kMinWidthT);\r
- }\r
- else if(ix == 0){\r
- ia = kage.kMinWidthT;\r
- ib = 0;\r
- }\r
- else{\r
- ia = 0;\r
- ib = kage.kMinWidthT;\r
- }\r
- \r
- if(a1 == 7 && a2 == 0){ // L2RD: fatten\r
- deltad = Math.pow(t, hosomi) * kage.kL2RDfatten;\r
- }\r
- else if(a1 == 7){\r
- deltad = Math.pow(t, hosomi);\r
- }\r
- else if(a2 == 7){\r
- deltad = Math.pow(1.0 - t, hosomi);\r
- }\r
- else if(opt3 > 0){\r
- deltad = (((kage.kMinWidthT - opt4 / 2) - opt3 / 2) / (kage.kMinWidthT - opt4 / 2)) + opt3 / 2 / (kage.kMinWidthT - opt4) * t;\r
- }\r
- else{ deltad = 1; }\r
- \r
- if(deltad < 0.15){\r
- deltad = 0.15;\r
- }\r
- ia = ia * deltad;\r
- ib = ib * deltad;\r
- \r
- //reverse if vector is going 2nd/3rd quadrants\r
- if(ix <= 0){\r
- ia = ia * -1;\r
- ib = ib * -1;\r
- }\r
- \r
- temp = new Array(2);\r
- temp[0] = x - ia;\r
- temp[1] = y - ib;\r
- curve[0].push(temp);\r
- temp = new Array(2);\r
- temp[0] = x + ia;\r
- temp[1] = y + ib;\r
- curve[1].push(temp);\r
- }\r
-}\r