6 void cdDrawBezier(double x1, double y1,
\r
7 double x2, double y2,
\r
8 double x3, double y3,
\r
9 double x4, double y4,
\r
14 double ix, iy, ia, ib, ir;
\r
18 double XX, XY, YX, YY;
\r
20 if(kShotai == kMincho){ // mincho
\r
24 delta = -1 * kMinWidthY * 0.5;
\r
41 if(y1 < y2){ y1 = y1 - delta; }
\r
42 else{ y1 = y1 + delta; }
\r
45 if(x1 < x2){ x1 = x1 - delta; }
\r
46 else{ x1 = x1 + delta; }
\r
49 rad = atan((double)(y2 - y1) / (double)(x2 - x1));
\r
50 if(x1 < x2){ v = 1; } else{ v = -1; }
\r
51 x1 = x1 - delta * cos(rad) * v;
\r
52 y1 = y1 - delta * sin(rad) * v;
\r
72 if(y3 < y4){ y4 = y4 + delta; }
\r
73 else{ y4 = y4 - delta; }
\r
76 if(x3 < x4){ x4 = x4 + delta; }
\r
77 else{ x4 = x4 - delta; }
\r
80 rad = atan((double)(y4 - y3) / (double)(x4 - x3));
\r
81 if(x3 < x4){ v = 1; } else{ v = -1; }
\r
82 x4 = x4 + delta * cos(rad) * v;
\r
83 y4 = y4 + delta * sin(rad) * v;
\r
88 for(tt = 0; tt <= 1000; tt = tt + kRate){
\r
89 t = (double)(tt) / 1000;
\r
92 x = (1.0 - t) * (1.0 - t) * (1.0 - t) * x1 + 3.0 * t * (1.0 - t) * (1.0 - t) * x2 + 3 * t * t * (1.0 - t) * x3 + t * t * t * x4;
\r
93 y = (1.0 - t) * (1.0 - t) * (1.0 - t) * y1 + 3.0 * t * (1.0 - t) * (1.0 - t) * y2 + 3 * t * t * (1.0 - t) * y3 + t * t * t * y4;
\r
94 //KATAMUKI of vector by BIBUN
\r
95 ix = t * t * (-3 * x1 + 9 * x2 + -9 * x3 + 3 * x4) + t * (6 * x1 + -12 * x2 + 6 * x3) + -3 * x1 + 3 * x2;
\r
96 iy = t * t * (-3 * y1 + 9 * y2 + -9 * y3 + 3 * y4) + t * (6 * y1 + -12 * y2 + 6 * y3) + -3 * y1 + 3 * y2;
\r
98 //line SUICHOKU by vector
\r
99 if(ix != 0 && iy != 0){
\r
100 ir = atan(iy / ix * -1);
\r
101 ia = sin(ir) * (double)(kMinWidthT);
\r
102 ib = cos(ir) * (double)(kMinWidthT);
\r
113 if(a1 == 7){ deltad = sqrt(t); }
\r
114 else if(a2 == 7){ deltad = sqrt(1.0 - t); }
\r
115 else{ deltad = 1; }
\r
119 //reverse if vector is going 2nd/3rd quadrants
\r
125 //copy to polygon structuer
\r
126 poly[count].X = x - ia;
\r
127 poly[count].Y = y - ib;
\r
128 poly[(1000 / kRate + 1) * 2 - 1 - count].X = x + ia;
\r
129 poly[(1000 / kRate + 1) * 2 - 1 - count].Y = y + ib;
\r
133 icPolygon(poly, (1000 / kRate + 1) * 2);
\r
135 //process for head of stroke
\r
136 rad = atan((double)(y2 - y1) / (double)(x2 - x1));
\r
137 if(x1 < x2){ v = 1; } else{ v = -1; }
\r
139 XY = cos(rad) * v * -1;
\r
145 poly2[0].X = x1 - kMinWidthT;
\r
147 poly2[1].X = x1 + kMinWidthT;
\r
149 poly2[2].X = x1 - kMinWidthT;
\r
150 poly2[2].Y = y1 - kMinWidthT;
\r
151 icPolygon(poly2, 3);
\r
154 poly2[0].X = x1 - kMinWidthT * XX;
\r
155 poly2[0].Y = y1 - kMinWidthT * XY;
\r
156 poly2[1].X = x1 + kMinWidthT * XX;
\r
157 poly2[1].Y = y1 + kMinWidthT * XY;
\r
158 poly2[2].X = x1 - kMinWidthT * XX - kMinWidthT * YX;
\r
159 poly2[2].Y = y1 - kMinWidthT * XY - kMinWidthT * YY;
\r
160 icPolygon(poly2, 3);
\r
165 if(y1 <= y4){ //from up to bottom
\r
167 poly2[0].X = x1 - kMinWidthT;
\r
169 poly2[1].X = x1 + kMinWidthT;
\r
171 poly2[2].X = x1 - kMinWidthT;
\r
172 poly2[2].Y = y1 - kMinWidthY;
\r
173 icPolygon(poly2, 3);
\r
176 poly2[0].X = x1 - kMinWidthT * XX;
\r
177 poly2[0].Y = y1 - kMinWidthT * XY;
\r
178 poly2[1].X = x1 + kMinWidthT * XX;
\r
179 poly2[1].Y = y1 + kMinWidthT * XY;
\r
180 poly2[2].X = x1 - kMinWidthT * XX - kMinWidthY * YX;
\r
181 poly2[2].Y = y1 - kMinWidthT * XY - kMinWidthY * YY;
\r
182 icPolygon(poly2, 3);
\r
185 else{ //bottom to up
\r
186 if(x1 == x2){ //is it right?
\r
187 poly2[0].X = x1 - kMinWidthT;
\r
189 poly2[1].X = x1 + kMinWidthT;
\r
191 poly2[2].X = x1 - kMinWidthT;
\r
192 poly2[2].Y = y1 + kMinWidthY;
\r
193 icPolygon(poly2, 3);
\r
196 poly2[0].X = x1 - kMinWidthT * XX;
\r
197 poly2[0].Y = y1 - kMinWidthT * XY;
\r
198 poly2[1].X = x1 + kMinWidthT * XX;
\r
199 poly2[1].Y = y1 + kMinWidthT * XY;
\r
200 poly2[2].X = x1 + kMinWidthT * XX - kMinWidthY * YX;
\r
201 poly2[2].Y = y1 + kMinWidthT * XY - kMinWidthY * YY;
\r
202 icPolygon(poly2, 3);
\r
207 if(a1 == 22){ //box's up-right corner, any time same degree
\r
208 poly3[0].X = x1 - kMinWidthT;
\r
209 poly3[0].Y = y1 - kMinWidthY;
\r
211 poly3[1].Y = y1 - kMinWidthY - kWidth;
\r
212 poly3[2].X = x1 + kMinWidthT + kWidth;
\r
213 poly3[2].Y = y1 + kMinWidthY;
\r
214 poly3[3].X = x1 + kMinWidthT;
\r
215 poly3[3].Y = y1 + kMinWidthT;
\r
216 poly3[4].X = x1 - kMinWidthT;
\r
218 icPolygon(poly3, 5);
\r
221 if(a1 == 0){ //beginning of the stroke
\r
222 if(y1 <= y4){ //from up to bottom
\r
224 poly2[0].X = x1 + kMinWidthT;
\r
225 poly2[0].Y = y1 + kMinWidthY * 0.5;
\r
226 poly2[1].X = x1 + kMinWidthT + kMinWidthT * 0.5;
\r
227 poly2[1].Y = y1 + kMinWidthY * 0.5 + kMinWidthY;
\r
228 poly2[2].X = x1 + kMinWidthT;
\r
229 poly2[2].Y = y1 + kMinWidthY * 0.5 + kMinWidthY * 2;
\r
230 icPolygon(poly2, 3);
\r
233 poly2[0].X = x1 + kMinWidthT * XX + (kMinWidthY * 0.5) * YX;
\r
234 poly2[0].Y = y1 + kMinWidthT * XY + (kMinWidthY * 0.5) * YY;
\r
235 poly2[1].X = x1 + (kMinWidthT + kMinWidthT * 0.5) * XX + (kMinWidthY * 0.5 + kMinWidthY) * YX;
\r
236 poly2[1].Y = y1 + (kMinWidthT + kMinWidthT * 0.5) * XY + (kMinWidthY * 0.5 + kMinWidthY) * YY;
\r
237 poly2[2].X = x1 + kMinWidthT * XX + (kMinWidthY * 0.5 + kMinWidthY * 2) * YX;
\r
238 poly2[2].Y = y1 + kMinWidthT * XY + (kMinWidthY * 0.5 + kMinWidthY * 2) * YY;
\r
239 icPolygon(poly2, 3);
\r
242 else{ //from bottom to up
\r
243 if(x1 == x2){ //is it right?
\r
244 poly2[0].X = x1 + kMinWidthT;
\r
245 poly2[0].Y = y1 - kMinWidthY * 0.5;
\r
246 poly2[1].X = x1 + kMinWidthT + kMinWidthT * 0.5;
\r
247 poly2[1].Y = y1 - kMinWidthY * 0.5 - kMinWidthY;
\r
248 poly2[2].X = x1 + kMinWidthT;
\r
249 poly2[2].Y = y1 - kMinWidthY * 0.5 - kMinWidthY * 2;
\r
250 icPolygon(poly2, 3);
\r
252 else //SETSUGOUMEN GA KAKERUNODE HOKYOU
\r
253 poly3[0].X = x1 - (kMinWidthT - 1) * XX + (kMinWidthY * 0.5) * YX;
\r
254 poly3[0].Y = y1 - (kMinWidthT - 1) * XY + (kMinWidthY * 0.5) * YY;
\r
255 poly3[1].X = x1 - (kMinWidthT - 0) * XX + (kMinWidthY * 0.5) * YX;
\r
256 poly3[1].Y = y1 - (kMinWidthT - 0) * XY + (kMinWidthY * 0.5) * YY;
\r
257 poly3[2].X = x1 - (kMinWidthT + kMinWidthT * 0.5) * XX + (kMinWidthY * 0.5 + kMinWidthY) * YX;
\r
258 poly3[2].Y = y1 - (kMinWidthT + kMinWidthT * 0.5) * XY + (kMinWidthY * 0.5 + kMinWidthY) * YY;
\r
259 poly3[3].X = x1 - (kMinWidthT - 0) * XX + (kMinWidthY * 0.5 + kMinWidthY * 2) * YX;
\r
260 poly3[3].Y = y1 - (kMinWidthT - 0) * XY + (kMinWidthY * 0.5 + kMinWidthY * 2) * YY;
\r
261 poly3[4].X = x1 - (kMinWidthT - 1) * XX + (kMinWidthY * 0.5 + kMinWidthY * 2) * YX;
\r
262 poly3[4].Y = y1 - (kMinWidthT - 1) * XY + (kMinWidthY * 0.5 + kMinWidthY * 2) * YY;
\r
263 icPolygon(poly3, 5);
\r
268 rad = atan((double)(y4 - y3) / (double)(x4 - x3));
\r
269 if(x3 < x4){ v = 1; } else{ v = -1; }
\r
270 YX = sin(rad) * v * -1;
\r
275 if(a2 == 1 || a2 == 8 || a2 == 15){ //the last filled circle
\r
277 poly3[0].X = x4 - kMinWidthT;
\r
279 poly3[1].X = x4 - kMinWidthT * 0.6;
\r
280 poly3[1].Y = y4 + kMinWidthT * 0.6;
\r
282 poly3[2].Y = y4 + kMinWidthT;
\r
283 poly3[3].X = x4 + kMinWidthT * 0.6;
\r
284 poly3[3].Y = y4 + kMinWidthT * 0.6;
\r
285 poly3[4].X = x4 + kMinWidthT;
\r
287 icPolygon(poly3, 5);
\r
291 poly3[0].Y = y4 - kMinWidthT;
\r
292 poly3[1].X = x4 + kMinWidthT * 0.6;
\r
293 poly3[1].Y = y4 - kMinWidthT * 0.6;
\r
294 poly3[2].X = x4 + kMinWidthT;
\r
296 poly3[3].X = x4 + kMinWidthT * 0.6;
\r
297 poly3[3].Y = y4 + kMinWidthT * 0.6;
\r
299 poly3[4].Y = y4 + kMinWidthT;
\r
300 icPolygon(poly3, 5);
\r
303 poly3[0].X = x4 + sin(rad) * kMinWidthT * v;
\r
304 poly3[0].Y = y4 - cos(rad) * kMinWidthT * v;
\r
305 poly3[1].X = x4 + cos(rad) * kMinWidthT * 0.8 * v + sin(rad) * kMinWidthT * 0.6 * v;
\r
306 poly3[1].Y = y4 + sin(rad) * kMinWidthT * 0.8 * v - cos(rad) * kMinWidthT * 0.6 * v;
\r
307 poly3[2].X = x4 + cos(rad) * kMinWidthT * v;
\r
308 poly3[2].Y = y4 + sin(rad) * kMinWidthT * v;
\r
309 poly3[3].X = x4 + cos(rad) * kMinWidthT * 0.8 * v - sin(rad) * kMinWidthT * 0.6 * v;
\r
310 poly3[3].Y = y4 + sin(rad) * kMinWidthT * 0.8 * v + cos(rad) * kMinWidthT * 0.6 * v;
\r
311 poly3[4].X = x4 - sin(rad) * kMinWidthT * v;
\r
312 poly3[4].Y = y4 + cos(rad) * kMinWidthT * v;
\r
313 icPolygon(poly3, 5);
\r
317 if(a2 == 9 || (a1 == 7 && a2 == 0)){ // Sinnyu & L2RD Harai
\r
320 poly2[0].Y = y4 + kMinWidthT;
\r
322 poly2[1].Y = y4 - kMinWidthT;
\r
323 poly2[2].X = x4 + kMinWidthT;
\r
324 poly2[2].Y = y4 - kMinWidthT;
\r
325 icPolygon(poly2, 3);
\r
328 poly2[0].X = x4 + kMinWidthT * YX;
\r
329 poly2[0].Y = y4 + kMinWidthT * YY;
\r
330 poly2[1].X = x4 - kMinWidthT * YX;
\r
331 poly2[1].Y = y4 - kMinWidthT * YY;
\r
332 poly2[2].X = x4 + kMinWidthT * XX - kMinWidthT * YX;
\r
333 poly2[2].Y = y4 + kMinWidthT * XY - kMinWidthT * YY;
\r
334 icPolygon(poly2, 3);
\r
338 if(a2 == 15){ //jump up
\r
341 poly4[0].Y = y4 - kMinWidthT + 1;
\r
342 poly4[1].X = x4 + 2;
\r
343 poly4[1].Y = y4 - kMinWidthT - kWidth * 5;
\r
345 poly4[2].Y = y4 - kMinWidthT - kWidth * 5;
\r
346 poly4[3].X = x4 - kMinWidthT;
\r
347 poly4[3].Y = y4 - kMinWidthT + 1;
\r
348 icPolygon(poly4, 4);
\r
351 poly4[0].X = x4 + (kMinWidthT - 1) * sin(rad) * v;
\r
352 poly4[0].Y = y4 - (kMinWidthT - 1) * cos(rad) * v;
\r
353 poly4[1].X = x4 + 2 * cos(rad) * v + (kMinWidthT + kWidth * 5) * sin(rad) * v;
\r
354 poly4[1].Y = y4 + 2 * sin(rad) * v - (kMinWidthT + kWidth * 5) * cos(rad) * v;
\r
355 poly4[2].X = x4 + (kMinWidthT + kWidth * 5) * sin(rad) * v;
\r
356 poly4[2].Y = y4 - (kMinWidthT + kWidth * 5) * cos(rad) * v;
\r
357 poly4[3].X = x4 + (kMinWidthT - 1) * sin(rad) * v - kMinWidthT * cos(rad) * v;
\r
358 poly4[3].Y = y4 - (kMinWidthT - 1) * cos(rad) * v - kMinWidthT * sin(rad) * v;
\r
359 icPolygon(poly4, 4);
\r
363 if(a2 == 14){ //jump to left, allways go left
\r
367 poly4[1].Y = y4 - kMinWidthT;
\r
368 poly4[2].X = x4 - kWidth * 4;
\r
369 poly4[2].Y = y4 - kMinWidthT;
\r
370 poly4[3].X = x4 - kWidth * 4;
\r
371 poly4[3].Y = y4 - kMinWidthT * 0.5;
\r
372 icPolygon(poly4, 4);
\r
378 if(y1 < y2){ y1 = y1 - kWidth; } else{ y1 = y1 + kWidth; }
\r
381 if(x1 < x2){ x1 = x1 - kWidth; } else{ x1 = x1 + kWidth; }
\r
384 rad = atan((double)(y2 - y1) / (double)(x2 - x1));
\r
385 if(x1 < x2){ v = 1; } else{ v = -1; }
\r
386 x1 = x1 - kWidth * cos(rad) * v;
\r
387 y1 = y1 - kWidth * sin(rad) * v;
\r
394 y1 = y1 - kWidth * kKakato;
\r
397 y1 = y1 + kWidth * kKakato;
\r
402 x1 = x1 - kWidth * kKakato;
\r
405 x1 = x1 + kWidth * kKakato;
\r
409 rad = atan((double)(y2 - y1) / (double)(x2 - x1));
\r
410 if(x1 < x2){ v = 1; } else{ v = -1; }
\r
411 x1 = x1 - kWidth * cos(rad) * v * kKakato;
\r
412 y1 = y1 - kWidth * sin(rad) * v * kKakato;
\r
417 if(y3 < y4){ y4 = y4 + kWidth; } else{ y4 = y4 - kWidth; }
\r
420 if(x3 < x4){ x4 = x4 + kWidth; } else{ x4 = x4 - kWidth; }
\r
423 rad = atan((double)(y4 - y3) / (double)(x4 - x3));
\r
424 if(x3 < x4){ v = 1; } else{ v = -1; }
\r
425 x4 = x4 + kWidth * cos(rad) * v;
\r
426 y4 = y4 + kWidth * sin(rad) * v;
\r
433 y4 = y4 + kWidth * kKakato;
\r
436 y4 = y4 - kWidth * kKakato;
\r
441 x4 = x4 + kWidth * kKakato;
\r
444 x4 = x4 - kWidth * kKakato;
\r
448 rad = atan((double)(y4 - y3) / (double)(x4 - x3));
\r
449 if(x3 < x4){ v = 1; } else{ v = -1; }
\r
450 x4 = x4 + kWidth * cos(rad) * v * kKakato;
\r
451 y4 = y4 + kWidth * sin(rad) * v * kKakato;
\r
457 for(tt = 0; tt <= 1000; tt = tt + kRate){
\r
458 t = (double)tt / 1000;
\r
461 x = (1.0 - t) * (1.0 - t) * (1.0 - t) * x1 + 3.0 * t * (1.0 - t) * (1.0 - t) * x2 + 3 * t * t * (1.0 - t) * x3 + t * t * t * x4;
\r
462 y = (1.0 - t) * (1.0 - t) * (1.0 - t) * y1 + 3.0 * t * (1.0 - t) * (1.0 - t) * y2 + 3 * t * t * (1.0 - t) * y3 + t * t * t * y4;
\r
463 //KATAMUKI of vector by BIBUN
\r
464 ix = t * t * (-3 * x1 + 9 * x2 + -9 * x3 + 3 * x4) + t * (6 * x1 + -12 * x2 + 6 * x3) + -3 * x1 + 3 * x2;
\r
465 iy = t * t * (-3 * y1 + 9 * y2 + -9 * y3 + 3 * y4) + t * (6 * y1 + -12 * y2 + 6 * y3) + -3 * y1 + 3 * y2;
\r
467 //SESSEN NI SUICHOKU NA CHOKUSEN NO KEISAN
\r
468 if(kShotai == kMincho){ //always false ?
\r
469 if(ix != 0 && iy != 0){
\r
470 ir = atan(iy / ix * -1.0);
\r
471 ia = sin(ir) * (double)kMinWidthT;
\r
472 ib = cos(ir) * (double)kMinWidthT;
\r
482 ia = ia * sqrt(1.0 - t);
\r
483 ib = ib * sqrt(1.0 - t);
\r
486 if(ix != 0 && iy != 0){
\r
487 ir = atan(iy / ix * -1.0);
\r
488 ia = sin(ir) * (double)kWidth;
\r
489 ib = cos(ir) * (double)kWidth;
\r
501 //reverse if vector is going 2nd/3rd quadrants
\r
508 poly[count].X = x - ia;
\r
509 poly[count].Y = y - ib;
\r
510 poly[(1000 / kRate + 1) * 2 - 1 - count].X = x + ia;
\r
511 poly[(1000 / kRate + 1) * 2 - 1 - count].Y = y + ib;
\r
515 icPolygon(poly, (1000 / kRate + 1) * 2);
\r
519 void cdDrawCurve(double x1, double y1,
\r
520 double x2, double y2,
\r
521 double x3, double y3,
\r
526 double ix, iy, ia, ib, ir;
\r
530 double XX, XY, YX, YY;
\r
532 if(kShotai == kMincho){ // mincho
\r
536 delta = -1 * kMinWidthY * 0.5;
\r
546 delta = kMinWidthY;
\r
553 if(y1 < y2){ y1 = y1 - delta; }
\r
554 else{ y1 = y1 + delta; }
\r
557 if(x1 < x2){ x1 = x1 - delta; }
\r
558 else{ x1 = x1 + delta; }
\r
561 rad = atan((double)(y2 - y1) / (double)(x2 - x1));
\r
562 if(x1 < x2){ v = 1; } else{ v = -1; }
\r
563 x1 = x1 - delta * cos(rad) * v;
\r
564 y1 = y1 - delta * sin(rad) * v;
\r
578 case 8: // get shorten for tail's circle
\r
579 delta = -1 * kMinWidthT * 0.5;
\r
586 if(y2 < y3){ y3 = y3 + delta; }
\r
587 else{ y3 = y3 - delta; }
\r
590 if(x2 < x3){ x3 = x3 + delta; }
\r
591 else{ x3 = x3 - delta; }
\r
594 rad = atan((double)(y3 - y2) / (double)(x3 - x2));
\r
595 if(x2 < x3){ v = 1; } else{ v = -1; }
\r
596 x3 = x3 + delta * cos(rad) * v;
\r
597 y3 = y3 + delta * sin(rad) * v;
\r
602 for(tt = 0; tt <= 1000; tt = tt + kRate){
\r
603 t = (double)(tt) / 1000;
\r
606 x = ((1.0 - t) * (1.0 - t) * x1 + 2.0 * t * (1.0 - t) * x2 + t * t * x3);
\r
607 y = ((1.0 - t) * (1.0 - t) * y1 + 2.0 * t * (1.0 - t) * y2 + t * t * y3);
\r
609 //KATAMUKI of vector by BIBUN
\r
610 ix = (x1 - 2.0 * x2 + x3) * 2.0 * t + (-2.0 * x1 + 2.0 * x2);
\r
611 iy = (y1 - 2.0 * y2 + y3) * 2.0 * t + (-2.0 * y1 + 2.0 * y2);
\r
613 //line SUICHOKU by vector
\r
614 if(ix != 0 && iy != 0){
\r
615 ir = atan(iy / ix * -1);
\r
616 ia = sin(ir) * (double)(kMinWidthT);
\r
617 ib = cos(ir) * (double)(kMinWidthT);
\r
628 if(a1 == 7 && a2 == 0){ deltad = sqrt(t) * kL2RDfatten; } //L2RD: fatten
\r
629 else if(a1 == 7){ deltad = sqrt(t); }
\r
630 else if(a2 == 7){ deltad = sqrt(1.0 - t); }
\r
631 else{ deltad = 1; }
\r
635 //reverse if vector is going 2nd/3rd quadrants
\r
641 //copy to polygon structuer
\r
642 poly[count].X = x - ia;
\r
643 poly[count].Y = y - ib;
\r
644 poly[(1000 / kRate + 1) * 2 - 1 - count].X = x + ia;
\r
645 poly[(1000 / kRate + 1) * 2 - 1 - count].Y = y + ib;
\r
649 icPolygon(poly, (1000 / kRate + 1) * 2);
\r
651 //process for head of stroke
\r
652 rad = atan((double)(y2 - y1) / (double)(x2 - x1));
\r
653 if(x1 < x2){ v = 1; } else{ v = -1; }
\r
655 XY = cos(rad) * v * -1;
\r
661 poly2[0].X = x1 - kMinWidthT;
\r
663 poly2[1].X = x1 + kMinWidthT;
\r
665 poly2[2].X = x1 - kMinWidthT;
\r
666 poly2[2].Y = y1 - kMinWidthT;
\r
667 icPolygon(poly2, 3);
\r
670 poly2[0].X = x1 - kMinWidthT * XX;
\r
671 poly2[0].Y = y1 - kMinWidthT * XY;
\r
672 poly2[1].X = x1 + kMinWidthT * XX;
\r
673 poly2[1].Y = y1 + kMinWidthT * XY;
\r
674 poly2[2].X = x1 - kMinWidthT * XX - kMinWidthT * YX;
\r
675 poly2[2].Y = y1 - kMinWidthT * XY - kMinWidthT * YY;
\r
676 icPolygon(poly2, 3);
\r
681 if(y1 <= y3){ //from up to bottom
\r
683 poly2[0].X = x1 - kMinWidthT;
\r
685 poly2[1].X = x1 + kMinWidthT;
\r
687 poly2[2].X = x1 - kMinWidthT;
\r
688 poly2[2].Y = y1 - kMinWidthY;
\r
689 icPolygon(poly2, 3);
\r
692 poly2[0].X = x1 - kMinWidthT * XX;
\r
693 poly2[0].Y = y1 - kMinWidthT * XY;
\r
694 poly2[1].X = x1 + kMinWidthT * XX;
\r
695 poly2[1].Y = y1 + kMinWidthT * XY;
\r
696 poly2[2].X = x1 - kMinWidthT * XX - kMinWidthY * YX;
\r
697 poly2[2].Y = y1 - kMinWidthT * XY - kMinWidthY * YY;
\r
698 icPolygon(poly2, 3);
\r
701 else{ //bottom to up
\r
702 if(x1 == x2){ //is it right?
\r
703 poly2[0].X = x1 - kMinWidthT;
\r
705 poly2[1].X = x1 + kMinWidthT;
\r
707 poly2[2].X = x1 - kMinWidthT;
\r
708 poly2[2].Y = y1 + kMinWidthY;
\r
709 icPolygon(poly2, 3);
\r
712 poly2[0].X = x1 - kMinWidthT * XX;
\r
713 poly2[0].Y = y1 - kMinWidthT * XY;
\r
714 poly2[1].X = x1 + kMinWidthT * XX;
\r
715 poly2[1].Y = y1 + kMinWidthT * XY;
\r
716 poly2[2].X = x1 + kMinWidthT * XX - kMinWidthY * YX;
\r
717 poly2[2].Y = y1 + kMinWidthT * XY - kMinWidthY * YY;
\r
718 icPolygon(poly2, 3);
\r
723 if(a1 == 22){ //box's up-right corner, any time same degree
\r
724 poly3[0].X = x1 - kMinWidthT;
\r
725 poly3[0].Y = y1 - kMinWidthY;
\r
727 poly3[1].Y = y1 - kMinWidthY - kWidth;
\r
728 poly3[2].X = x1 + kMinWidthT + kWidth;
\r
729 poly3[2].Y = y1 + kMinWidthY;
\r
730 poly3[3].X = x1 + kMinWidthT;
\r
731 poly3[3].Y = y1 + kMinWidthT;
\r
732 poly3[4].X = x1 - kMinWidthT;
\r
734 icPolygon(poly3, 5);
\r
737 if(a1 == 0){ //beginning of the stroke
\r
738 if(y1 <= y3){ //from up to bottom
\r
740 poly2[0].X = x1 + kMinWidthT;
\r
741 poly2[0].Y = y1 + kMinWidthY * 0.5;
\r
742 poly2[1].X = x1 + kMinWidthT + kMinWidthT * 0.5;
\r
743 poly2[1].Y = y1 + kMinWidthY * 0.5 + kMinWidthY;
\r
744 poly2[2].X = x1 + kMinWidthT;
\r
745 poly2[2].Y = y1 + kMinWidthY * 0.5 + kMinWidthY * 2;
\r
746 icPolygon(poly2, 3);
\r
749 poly2[0].X = x1 + kMinWidthT * XX + (kMinWidthY * 0.5) * YX;
\r
750 poly2[0].Y = y1 + kMinWidthT * XY + (kMinWidthY * 0.5) * YY;
\r
751 poly2[1].X = x1 + (kMinWidthT + kMinWidthT * 0.5) * XX + (kMinWidthY * 0.5 + kMinWidthY) * YX;
\r
752 poly2[1].Y = y1 + (kMinWidthT + kMinWidthT * 0.5) * XY + (kMinWidthY * 0.5 + kMinWidthY) * YY;
\r
753 poly2[2].X = x1 + kMinWidthT * XX + (kMinWidthY * 0.5 + kMinWidthY * 2) * YX;
\r
754 poly2[2].Y = y1 + kMinWidthT * XY + (kMinWidthY * 0.5 + kMinWidthY * 2) * YY;
\r
755 icPolygon(poly2, 3);
\r
758 else{ //from bottom to up
\r
759 if(x1 == x2){ //is it right?
\r
760 poly2[0].X = x1 + kMinWidthT;
\r
761 poly2[0].Y = y1 - kMinWidthY * 0.5;
\r
762 poly2[1].X = x1 + kMinWidthT + kMinWidthT * 0.5;
\r
763 poly2[1].Y = y1 - kMinWidthY * 0.5 - kMinWidthY;
\r
764 poly2[2].X = x1 + kMinWidthT;
\r
765 poly2[2].Y = y1 - kMinWidthY * 0.5 - kMinWidthY * 2;
\r
766 icPolygon(poly2, 3);
\r
768 else //SETSUGOUMEN GA KAKERUNODE HOKYOU
\r
769 poly3[0].X = x1 - (kMinWidthT - 1) * XX + (kMinWidthY * 0.5) * YX;
\r
770 poly3[0].Y = y1 - (kMinWidthT - 1) * XY + (kMinWidthY * 0.5) * YY;
\r
771 poly3[1].X = x1 - (kMinWidthT - 0) * XX + (kMinWidthY * 0.5) * YX;
\r
772 poly3[1].Y = y1 - (kMinWidthT - 0) * XY + (kMinWidthY * 0.5) * YY;
\r
773 poly3[2].X = x1 - (kMinWidthT + kMinWidthT * 0.5) * XX + (kMinWidthY * 0.5 + kMinWidthY) * YX;
\r
774 poly3[2].Y = y1 - (kMinWidthT + kMinWidthT * 0.5) * XY + (kMinWidthY * 0.5 + kMinWidthY) * YY;
\r
775 poly3[3].X = x1 - (kMinWidthT - 0) * XX + (kMinWidthY * 0.5 + kMinWidthY * 2) * YX;
\r
776 poly3[3].Y = y1 - (kMinWidthT - 0) * XY + (kMinWidthY * 0.5 + kMinWidthY * 2) * YY;
\r
777 poly3[4].X = x1 - (kMinWidthT - 1) * XX + (kMinWidthY * 0.5 + kMinWidthY * 2) * YX;
\r
778 poly3[4].Y = y1 - (kMinWidthT - 1) * XY + (kMinWidthY * 0.5 + kMinWidthY * 2) * YY;
\r
779 icPolygon(poly3, 5);
\r
784 rad = atan((double)(y3 - y2) / (double)(x3 - x2));
\r
785 if(x2 < x3){ v = 1; } else{ v = -1; }
\r
786 YX = sin(rad) * v * -1;
\r
791 if(a2 == 1 || a2 == 8 || a2 == 15){ //the last filled circle
\r
793 poly3[0].X = x3 - kMinWidthT;
\r
795 poly3[1].X = x3 - kMinWidthT * 0.6;
\r
796 poly3[1].Y = y3 + kMinWidthT * 0.6;
\r
798 poly3[2].Y = y3 + kMinWidthT;
\r
799 poly3[3].X = x3 + kMinWidthT * 0.6;
\r
800 poly3[3].Y = y3 + kMinWidthT * 0.6;
\r
801 poly3[4].X = x3 + kMinWidthT;
\r
803 icPolygon(poly3, 5);
\r
807 poly3[0].Y = y3 - kMinWidthT;
\r
808 poly3[1].X = x3 + kMinWidthT * 0.6;
\r
809 poly3[1].Y = y3 - kMinWidthT * 0.6;
\r
810 poly3[2].X = x3 + kMinWidthT;
\r
812 poly3[3].X = x3 + kMinWidthT * 0.6;
\r
813 poly3[3].Y = y3 + kMinWidthT * 0.6;
\r
815 poly3[4].Y = y3 + kMinWidthT;
\r
816 icPolygon(poly3, 5);
\r
819 poly3[0].X = x3 + sin(rad) * kMinWidthT * v;
\r
820 poly3[0].Y = y3 - cos(rad) * kMinWidthT * v;
\r
821 poly3[1].X = x3 + cos(rad) * kMinWidthT * 0.8 * v + sin(rad) * kMinWidthT * 0.6 * v;
\r
822 poly3[1].Y = y3 + sin(rad) * kMinWidthT * 0.8 * v - cos(rad) * kMinWidthT * 0.6 * v;
\r
823 poly3[2].X = x3 + cos(rad) * kMinWidthT * v;
\r
824 poly3[2].Y = y3 + sin(rad) * kMinWidthT * v;
\r
825 poly3[3].X = x3 + cos(rad) * kMinWidthT * 0.8 * v - sin(rad) * kMinWidthT * 0.6 * v;
\r
826 poly3[3].Y = y3 + sin(rad) * kMinWidthT * 0.8 * v + cos(rad) * kMinWidthT * 0.6 * v;
\r
827 poly3[4].X = x3 - sin(rad) * kMinWidthT * v;
\r
828 poly3[4].Y = y3 + cos(rad) * kMinWidthT * v;
\r
829 icPolygon(poly3, 5);
\r
833 if(a2 == 9 || (a1 == 7 && a2 == 0)){ // Sinnyu & L2RD Harai
\r
836 poly2[0].Y = y3 + kMinWidthT * kL2RDfatten;
\r
838 poly2[1].Y = y3 - kMinWidthT * kL2RDfatten;
\r
839 poly2[2].X = x3 + kMinWidthT * kL2RDfatten;
\r
840 poly2[2].Y = y3 - kMinWidthT * kL2RDfatten;
\r
841 icPolygon(poly2, 3);
\r
844 poly2[0].X = x3 + kMinWidthT * kL2RDfatten * YX;
\r
845 poly2[0].Y = y3 + kMinWidthT * kL2RDfatten * YY;
\r
846 poly2[1].X = x3 - kMinWidthT * kL2RDfatten * YX;
\r
847 poly2[1].Y = y3 - kMinWidthT * kL2RDfatten * YY;
\r
848 poly2[2].X = x3 + kMinWidthT * kL2RDfatten * XX - kMinWidthT * kL2RDfatten * YX;
\r
849 poly2[2].Y = y3 + kMinWidthT * kL2RDfatten * XY - kMinWidthT * kL2RDfatten * YY;
\r
850 icPolygon(poly2, 3);
\r
854 if(a2 == 15){ //jump up
\r
857 poly4[0].Y = y3 - kMinWidthT + 1;
\r
858 poly4[1].X = x3 + 2;
\r
859 poly4[1].Y = y3 - kMinWidthT - kWidth * 5;
\r
861 poly4[2].Y = y3 - kMinWidthT - kWidth * 5;
\r
862 poly4[3].X = x3 - kMinWidthT;
\r
863 poly4[3].Y = y3 - kMinWidthT + 1;
\r
864 icPolygon(poly4, 4);
\r
867 poly4[0].X = x3 + (kMinWidthT - 1) * sin(rad) * v;
\r
868 poly4[0].Y = y3 - (kMinWidthT - 1) * cos(rad) * v;
\r
869 poly4[1].X = x3 + 2 * cos(rad) * v + (kMinWidthT + kWidth * 5) * sin(rad) * v;
\r
870 poly4[1].Y = y3 + 2 * sin(rad) * v - (kMinWidthT + kWidth * 5) * cos(rad) * v;
\r
871 poly4[2].X = x3 + (kMinWidthT + kWidth * 5) * sin(rad) * v;
\r
872 poly4[2].Y = y3 - (kMinWidthT + kWidth * 5) * cos(rad) * v;
\r
873 poly4[3].X = x3 + (kMinWidthT - 1) * sin(rad) * v - kMinWidthT * cos(rad) * v;
\r
874 poly4[3].Y = y3 - (kMinWidthT - 1) * cos(rad) * v - kMinWidthT * sin(rad) * v;
\r
875 icPolygon(poly4, 4);
\r
879 if(a2 == 14){ //jump to left, allways go left
\r
883 poly4[1].Y = y3 - kMinWidthT;
\r
884 poly4[2].X = x3 - kWidth * 4;
\r
885 poly4[2].Y = y3 - kMinWidthT;
\r
886 poly4[3].X = x3 - kWidth * 4;
\r
887 poly4[3].Y = y3 - kMinWidthT * 0.5;
\r
888 icPolygon(poly4, 4);
\r
894 if(y1 < y2){ y1 = y1 - kWidth; } else{ y1 = y1 + kWidth; }
\r
897 if(x1 < x2){ x1 = x1 - kWidth; } else{ x1 = x1 + kWidth; }
\r
900 rad = atan((double)(y2 - y1) / (double)(x2 - x1));
\r
901 if(x1 < x2){ v = 1; } else{ v = -1; }
\r
902 x1 = x1 - kWidth * cos(rad) * v;
\r
903 y1 = y1 - kWidth * sin(rad) * v;
\r
910 y1 = y1 - kWidth * kKakato;
\r
913 y1 = y1 + kWidth * kKakato;
\r
918 x1 = x1 - kWidth * kKakato;
\r
921 x1 = x1 + kWidth * kKakato;
\r
925 rad = atan((double)(y2 - y1) / (double)(x2 - x1));
\r
926 if(x1 < x2){ v = 1; } else{ v = -1; }
\r
927 x1 = x1 - kWidth * cos(rad) * v * kKakato;
\r
928 y1 = y1 - kWidth * sin(rad) * v * kKakato;
\r
933 if(y2 < y3){ y3 = y3 + kWidth; } else{ y3 = y3 - kWidth; }
\r
936 if(x2 < x3){ x3 = x3 + kWidth; } else{ x3 = x3 - kWidth; }
\r
939 rad = atan((double)(y3 - y2) / (double)(x3 - x2));
\r
940 if(x2 < x3){ v = 1; } else{ v = -1; }
\r
941 x3 = x3 + kWidth * cos(rad) * v;
\r
942 y3 = y3 + kWidth * sin(rad) * v;
\r
949 y3 = y3 + kWidth * kKakato;
\r
952 y3 = y3 - kWidth * kKakato;
\r
957 x3 = x3 + kWidth * kKakato;
\r
960 x3 = x3 - kWidth * kKakato;
\r
964 rad = atan((double)(y3 - y2) / (double)(x3 - x2));
\r
965 if(x2 < x3){ v = 1; } else{ v = -1; }
\r
966 x3 = x3 + kWidth * cos(rad) * v * kKakato;
\r
967 y3 = y3 + kWidth * sin(rad) * v * kKakato;
\r
973 for(tt = 0; tt <= 1000; tt = tt + kRate){
\r
974 t = (double)tt / 1000;
\r
976 //calculating each point
\r
977 x = ((1.0 - t) * (1.0 - t) * x1 + 2.0 * t * (1.0 - t) * x2 + t * t * x3);
\r
978 y = ((1.0 - t) * (1.0 - t) * y1 + 2.0 * t * (1.0 - t) * y2 + t * t * y3);
\r
980 //SESSEN NO KATAMUKI NO KEISAN(BIBUN)
\r
981 ix = (x1 - 2.0 * x2 + x3) * 2.0 * t + (-2.0 * x1 + 2.0 * x2);
\r
982 iy = (y1 - 2.0 * y2 + y3) * 2.0 * t + (-2.0 * y1 + 2.0 * y2);
\r
984 //SESSEN NI SUICHOKU NA CHOKUSEN NO KEISAN
\r
985 if(kShotai == kMincho){ //always false ?
\r
986 if(ix != 0 && iy != 0){
\r
987 ir = atan(iy / ix * -1.0);
\r
988 ia = sin(ir) * (double)kMinWidthT;
\r
989 ib = cos(ir) * (double)kMinWidthT;
\r
999 ia = ia * sqrt(1.0 - t);
\r
1000 ib = ib * sqrt(1.0 - t);
\r
1003 if(ix != 0 && iy != 0){
\r
1004 ir = atan(iy / ix * -1.0);
\r
1005 ia = sin(ir) * (double)kWidth;
\r
1006 ib = cos(ir) * (double)kWidth;
\r
1018 //reverse if vector is going 2nd/3rd quadrants
\r
1025 poly[count].X = x - ia;
\r
1026 poly[count].Y = y - ib;
\r
1027 poly[(1000 / kRate + 1) * 2 - 1 - count].X = x + ia;
\r
1028 poly[(1000 / kRate + 1) * 2 - 1 - count].Y = y + ib;
\r
1032 icPolygon(poly, (1000 / kRate + 1) * 2);
\r
1036 void cdDrawLine(double tx1, double ty1, double tx2, double ty2, int ta1, int ta2){
\r
1038 double v, x1, y1, x2, y2;
\r
1040 double XX, XY, YX, YY;
\r
1043 if(kShotai == kMincho){ //mincho
\r
1051 if(x1 == x2){ //if TATE stroke, use y-axis
\r
1054 poly[3].X = x1 - kMinWidthT;
\r
1055 poly[3].Y = y1 - kMinWidthY / 2;
\r
1056 poly[0].X = x1 + kMinWidthT;
\r
1057 poly[0].Y = y1 + kMinWidthY / 2;
\r
1062 poly[3].X = x1 - kMinWidthT;
\r
1064 poly[0].X = x1 + kMinWidthT;
\r
1068 poly[3].X = x1 - kMinWidthT;
\r
1069 poly[3].Y = y1 - kMinWidthY - kMinWidthT;
\r
1070 poly[0].X = x1 + kMinWidthT;
\r
1071 poly[0].Y = y1 - kMinWidthY;
\r
1074 poly[3].X = x1 - kMinWidthT;
\r
1075 poly[3].Y = y1 - kMinWidthY;
\r
1076 poly[0].X = x1 + kMinWidthT;
\r
1077 poly[0].Y = y1 - kMinWidthY;
\r
1083 if(a1 == 6){ //KAGI's tail
\r
1084 poly[2].X = x2 - kMinWidthT;
\r
1086 poly[1].X = x2 + kMinWidthT;
\r
1090 poly[2].X = x2 - kMinWidthT;
\r
1091 poly[2].Y = y2 + kMinWidthT / 2;
\r
1092 poly[1].X = x2 + kMinWidthT;
\r
1093 poly[1].Y = y2 - kMinWidthT / 2;
\r
1097 poly[2].X = x2 - kMinWidthT;
\r
1099 poly[1].X = x2 + kMinWidthT;
\r
1103 poly[2].X = x2 - kMinWidthT;
\r
1104 poly[2].Y = y2 + kWidth * kKakato + kMinWidthT;
\r
1105 poly[1].X = x2 + kMinWidthT;
\r
1106 poly[1].Y = y2 + kWidth * kKakato;
\r
1109 poly[2].X = x2 - kMinWidthT;
\r
1110 poly[2].Y = y2 + kWidth * kKakato * 0.5 + kMinWidthT;
\r
1111 poly[1].X = x2 + kMinWidthT;
\r
1112 poly[1].Y = y2 + kWidth * kKakato * 0.5;
\r
1115 poly[2].X = x2 - kMinWidthT;
\r
1116 poly[2].Y = y2 + kMinWidthY;
\r
1117 poly[1].X = x2 + kMinWidthT;
\r
1118 poly[1].Y = y2 + kMinWidthY;
\r
1122 icPolygon(poly, 4);
\r
1124 if(a1 == 22){ //box's right top corner
\r
1125 poly3[0].X = x1 - kMinWidthT;
\r
1126 poly3[0].Y = y1 - kMinWidthY;
\r
1128 poly3[1].Y = y1 - kMinWidthY - kWidth;
\r
1129 poly3[2].X = x1 + kMinWidthT + kWidth;
\r
1130 poly3[2].Y = y1 + kMinWidthY;
\r
1131 poly3[3].X = x1 + kMinWidthT;
\r
1132 poly3[3].Y = y1 + kMinWidthT;
\r
1133 poly3[4].X = x1 - kMinWidthT;
\r
1135 icPolygon(poly3, 5);
\r
1138 if(a1 == 0){ //beginning of the stroke
\r
1139 poly2[0].X = x1 + kMinWidthT;
\r
1140 poly2[0].Y = y1 + kMinWidthY * 0.5;
\r
1141 poly2[1].X = x1 + kMinWidthT + kMinWidthT * 0.5;
\r
1142 poly2[1].Y = y1 + kMinWidthY * 0.5 + kMinWidthY;
\r
1143 poly2[2].X = x1 + kMinWidthT;
\r
1144 poly2[2].Y = y1 + kMinWidthY * 0.5 + kMinWidthY * 2;
\r
1145 icPolygon(poly2, 3);
\r
1148 if((a1 == 6 && a2 == 0) || a2 == 1){ //KAGI NO YOKO BOU NO SAIGO NO MARU
\r
1149 poly3[4].X = x2 - kMinWidthT;
\r
1151 poly3[3].X = x2 - kMinWidthT * 0.6;
\r
1152 poly3[3].Y = y2 + kMinWidthT * 0.6;
\r
1154 poly3[2].Y = y2 + kMinWidthT;
\r
1155 poly3[1].X = x2 + kMinWidthT * 0.6;
\r
1156 poly3[1].Y = y2 + kMinWidthT * 0.6;
\r
1157 poly3[0].X = x2 + kMinWidthT;
\r
1159 icPolygon(poly3, 5);
\r
1162 else if(y1 == y2){ //if it is YOKO stroke, use x-axis
\r
1163 if(a1 == 6){ //if it is KAGI's YOKO stroke, get bold
\r
1165 poly[0].Y = y1 - kMinWidthT;
\r
1167 poly[1].Y = y2 - kMinWidthT;
\r
1169 poly[2].Y = y2 + kMinWidthT;
\r
1171 poly[3].Y = y1 + kMinWidthT;
\r
1172 icPolygon(poly, 4);
\r
1174 if(a2 == 1 || a2 == 0 || a2 == 5){
\r
1175 //KAGI NO YOKO BOU NO SAIGO NO MARU
\r
1177 poly3[0].Y = y2 - kMinWidthT;
\r
1178 poly3[1].X = x2 + kMinWidthT * 0.6;
\r
1179 poly3[1].Y = y2 - kMinWidthT * 0.6;
\r
1180 poly3[2].X = x2 + kMinWidthT;
\r
1182 poly3[3].X = x2 + kMinWidthT * 0.6;
\r
1183 poly3[3].Y = y2 + kMinWidthT * 0.6;
\r
1185 poly3[4].Y = y2 + kMinWidthT;
\r
1186 icPolygon(poly3, 5);
\r
1190 //KAGI NO YOKO BOU NO HANE
\r
1192 poly[0].Y = y2 - kMinWidthT + 1;
\r
1193 poly[1].X = x2 + 2;
\r
1194 poly[1].Y = y2 - kMinWidthT - kWidth * 5;
\r
1196 poly[2].Y = y2 - kMinWidthT - kWidth * 5;
\r
1197 poly[3].X = x2 - kMinWidthT;
\r
1198 poly[3].Y = y2 - kMinWidthT + 1;
\r
1199 icPolygon(poly, 4);
\r
1206 poly[0].Y = y1 - kMinWidthY;
\r
1208 poly[3].Y = y1 + kMinWidthY;
\r
1211 poly[0].X = x1 - kMinWidthT;
\r
1212 poly[0].Y = y1 - kMinWidthY;
\r
1213 poly[3].X = x1 - kMinWidthT;
\r
1214 poly[3].Y = y1 + kMinWidthY;
\r
1221 poly[1].Y = y2 - kMinWidthY;
\r
1223 poly[2].Y = y2 + kMinWidthY;
\r
1226 poly[1].X = x2 + kMinWidthT;
\r
1227 poly[1].Y = y2 - kMinWidthY;
\r
1228 poly[2].X = x2 + kMinWidthT;
\r
1229 poly[2].Y = y2 + kMinWidthY;
\r
1232 icPolygon(poly, 4);
\r
1237 if((x2 - x1 - kWidth) < uroko){
\r
1238 uroko = max((x2 - x1 - kWidth), 4);
\r
1241 poly2[0].Y = y2 - kMinWidthY;
\r
1242 poly2[1].X = x2 - uroko;
\r
1244 poly2[2].X = x2 - uroko / 2;
\r
1245 poly2[2].Y = y2 - uroko / 2;
\r
1246 icPolygon(poly2, 3);
\r
1250 else{ //for others, use x-axis
\r
1251 rad = atan((double)(y2 - y1) / (double)(x2 - x1));
\r
1252 if((abs(y2 - y1) < abs(x2 - x1)) && (a1 != 6) && (a2 != 6) && !(a1 == 22 && a2 == 0)){ //ASAI KAUDO
\r
1253 switch(a1){ //must be 0 or 2
\r
1255 poly[0].X = x1 + sin(rad) * kMinWidthY;
\r
1256 poly[0].Y = y1 - cos(rad) * kMinWidthY;
\r
1257 poly[3].X = x1 - sin(rad) * kMinWidthY;
\r
1258 poly[3].Y = y1 + cos(rad) * kMinWidthY;
\r
1261 poly[0].X = x1 + sin(rad) * kMinWidthY - kMinWidthT * cos(rad);
\r
1262 poly[0].Y = y1 - cos(rad) * kMinWidthY - kMinWidthT * sin(rad);
\r
1263 poly[3].X = x1 - sin(rad) * kMinWidthY - kMinWidthT * cos(rad);
\r
1264 poly[3].Y = y1 + cos(rad) * kMinWidthY - kMinWidthT * sin(rad);
\r
1268 switch(a2){ //must be 0 or 2
\r
1270 poly[1].X = x2 + sin(rad) * kMinWidthY;
\r
1271 poly[1].Y = y2 - cos(rad) * kMinWidthY;
\r
1272 poly[2].X = x2 - sin(rad) * kMinWidthY;
\r
1273 poly[2].Y = y2 + cos(rad) * kMinWidthY;
\r
1276 poly[1].X = x2 + sin(rad) * kMinWidthY + kMinWidthT * cos(rad);
\r
1277 poly[1].Y = y2 - cos(rad) * kMinWidthY + kMinWidthT * sin(rad);
\r
1278 poly[2].X = x2 - sin(rad) * kMinWidthY + kMinWidthT * cos(rad);
\r
1279 poly[2].Y = y2 + cos(rad) * kMinWidthY + kMinWidthT * sin(rad);
\r
1282 icPolygon(poly, 4);
\r
1287 if((x2 - x1 - kWidth * cos(rad)) < uroko * cos(rad)){
\r
1288 uroko = max(((x2 - x1) / cos(rad) - kWidth), 4);
\r
1290 poly2[0].X = x2 + sin(rad) * kMinWidthY;
\r
1291 poly2[0].Y = y2 - cos(rad) * kMinWidthY;
\r
1292 poly2[1].X = x2 - cos(rad) * uroko;
\r
1293 poly2[1].Y = y2 - sin(rad) * uroko;
\r
1294 poly2[2].X = x2 - cos(rad) * uroko / 2 + sin(rad) * uroko / 2;
\r
1295 poly2[2].Y = y2 - sin(rad) * uroko / 2 - cos(rad) * uroko / 2;
\r
1296 icPolygon(poly2, 3);
\r
1300 else{ //KAKUDO GA FUKAI or KAGI NO YOKO BOU
\r
1301 if(x1 > x2){ v = -1; } else{ v = 1; }
\r
1304 poly[0].X = x1 + sin(rad) * kMinWidthT * v + kMinWidthY * cos(rad) * 0.5 * v;
\r
1305 poly[0].Y = y1 - cos(rad) * kMinWidthT * v + kMinWidthY * sin(rad) * 0.5 * v;
\r
1306 poly[3].X = x1 - sin(rad) * kMinWidthT * v - kMinWidthY * cos(rad) * 0.5 * v;
\r
1307 poly[3].Y = y1 + cos(rad) * kMinWidthT * v - kMinWidthY * sin(rad) * 0.5 * v;
\r
1312 poly[0].X = x1 + sin(rad) * kMinWidthT * v;
\r
1313 poly[0].Y = y1 - cos(rad) * kMinWidthT * v;
\r
1314 poly[3].X = x1 - sin(rad) * kMinWidthT * v;
\r
1315 poly[3].Y = y1 + cos(rad) * kMinWidthT * v;
\r
1318 poly[0].X = x1 + sin(rad) * kMinWidthT * v - kMinWidthY * cos(rad) * v;
\r
1319 poly[0].Y = y1 - cos(rad) * kMinWidthT * v - kMinWidthY * sin(rad) * v;
\r
1320 poly[3].X = x1 - sin(rad) * kMinWidthT * v - (kMinWidthT + kMinWidthY) * cos(rad) * v;
\r
1321 poly[3].Y = y1 + cos(rad) * kMinWidthT * v - (kMinWidthT + kMinWidthY) * sin(rad) * v;
\r
1324 poly[0].X = x1 + sin(rad) * kMinWidthT * v - kMinWidthY * cos(rad) * v;
\r
1325 poly[0].Y = y1 - cos(rad) * kMinWidthT * v - kMinWidthY * sin(rad) * v;
\r
1326 poly[3].X = x1 - sin(rad) * kMinWidthT * v - kMinWidthY * cos(rad) * v;
\r
1327 poly[3].Y = y1 + cos(rad) * kMinWidthT * v - kMinWidthY * sin(rad) * v;
\r
1334 poly[1].X = x2 + sin(rad) * kMinWidthT * v;
\r
1335 poly[1].Y = y2 - cos(rad) * kMinWidthT * v;
\r
1336 poly[2].X = x2 - sin(rad) * kMinWidthT * v;
\r
1337 poly[2].Y = y2 + cos(rad) * kMinWidthT * v;
\r
1340 poly[1].X = x2 + sin(rad) * kMinWidthT * v - kMinWidthT * 0.5 * cos(rad) * v;
\r
1341 poly[1].Y = y2 - cos(rad) * kMinWidthT * v - kMinWidthT * 0.5 * sin(rad) * v;
\r
1342 poly[2].X = x2 - sin(rad) * kMinWidthT * v + kMinWidthT * 0.5 * cos(rad) * v;
\r
1343 poly[2].Y = y2 + cos(rad) * kMinWidthT * v + kMinWidthT * 0.5 * sin(rad) * v;
\r
1348 poly[1].X = x2 + sin(rad) * kMinWidthT * v;
\r
1349 poly[1].Y = y2 - cos(rad) * kMinWidthT * v;
\r
1350 poly[2].X = x2 - sin(rad) * kMinWidthT * v;
\r
1351 poly[2].Y = y2 + cos(rad) * kMinWidthT * v;
\r
1354 poly[1].X = x2 + sin(rad) * kMinWidthT * v + kWidth * kKakato * cos(rad) * v;
\r
1355 poly[1].Y = y2 - cos(rad) * kMinWidthT * v + kWidth * kKakato * sin(rad) * v;
\r
1356 poly[2].X = x2 - sin(rad) * kMinWidthT * v + (kWidth * kKakato + kMinWidthT) * cos(rad) * v;
\r
1357 poly[2].Y = y2 + cos(rad) * kMinWidthT * v + (kWidth * kKakato + kMinWidthT) * sin(rad) * v;
\r
1360 poly[1].X = x2 + sin(rad) * kMinWidthT * v + kWidth * kKakato * 0.5 * cos(rad) * v;
\r
1361 poly[1].Y = y2 - cos(rad) * kMinWidthT * v + kWidth * kKakato * 0.5 * sin(rad) * v;
\r
1362 poly[2].X = x2 - sin(rad) * kMinWidthT * v + (kWidth * kKakato * 0.5 + kMinWidthT) * cos(rad) * v;
\r
1363 poly[2].Y = y2 + cos(rad) * kMinWidthT * v + (kWidth * kKakato * 0.5 + kMinWidthT) * sin(rad) * v;
\r
1366 poly[1].X = x2 + sin(rad) * kMinWidthT * v + kMinWidthY * cos(rad) * v;
\r
1367 poly[1].Y = y2 - cos(rad) * kMinWidthT * v + kMinWidthY * sin(rad) * v;
\r
1368 poly[2].X = x2 - sin(rad) * kMinWidthT * v + kMinWidthY * cos(rad) * v;
\r
1369 poly[2].Y = y2 + cos(rad) * kMinWidthT * v + kMinWidthY * sin(rad) * v;
\r
1373 icPolygon(poly, 4);
\r
1375 if((a1 == 6) && (a2 == 0 || a2 == 5)){ //KAGI NO YOKO BOU NO SAIGO NO MARU
\r
1376 poly3[0].X = x2 + sin(rad) * kMinWidthT * v;
\r
1377 poly3[0].Y = y2 - cos(rad) * kMinWidthT * v;
\r
1378 poly3[1].X = x2 + cos(rad) * kMinWidthT * 0.8 * v + sin(rad) * kMinWidthT * 0.6 * v;
\r
1379 poly3[1].Y = y2 + sin(rad) * kMinWidthT * 0.8 * v - cos(rad) * kMinWidthT * 0.6 * v;
\r
1380 poly3[2].X = x2 + cos(rad) * kMinWidthT * v;
\r
1381 poly3[2].Y = y2 + sin(rad) * kMinWidthT * v;
\r
1382 poly3[3].X = x2 + cos(rad) * kMinWidthT * 0.8 * v - sin(rad) * kMinWidthT * 0.6 * v;
\r
1383 poly3[3].Y = y2 + sin(rad) * kMinWidthT * 0.8 * v + cos(rad) * kMinWidthT * 0.6 * v;
\r
1384 poly3[4].X = x2 - sin(rad) * kMinWidthT * v;
\r
1385 poly3[4].Y = y2 + cos(rad) * kMinWidthT * v;
\r
1386 icPolygon(poly3, 5);
\r
1389 if(a1 == 6 && a2 == 5){
\r
1390 //KAGI NO YOKO BOU NO HANE
\r
1391 poly[0].X = x2 + (kMinWidthT - 1) * sin(rad) * v;
\r
1392 poly[0].Y = y2 - (kMinWidthT - 1) * cos(rad) * v;
\r
1393 poly[1].X = x2 + 2 * cos(rad) * v + (kMinWidthT + kWidth * 5) * sin(rad) * v;
\r
1394 poly[1].Y = y2 + 2 * sin(rad) * v - (kMinWidthT + kWidth * 5) * cos(rad) * v;
\r
1395 poly[2].X = x2 + (kMinWidthT + kWidth * 5) * sin(rad) * v;
\r
1396 poly[2].Y = y2 - (kMinWidthT + kWidth * 5) * cos(rad) * v;
\r
1397 poly[3].X = x2 + (kMinWidthT - 1) * sin(rad) * v - kMinWidthT * cos(rad) * v;
\r
1398 poly[3].Y = y2 - (kMinWidthT - 1) * cos(rad) * v - kMinWidthT * sin(rad) * v;
\r
1399 icPolygon(poly, 4);
\r
1402 if(a1 == 22){ //SHIKAKU MIGIUE UROKO NANAME DEMO MASSUGU MUKI
\r
1403 poly3[0].X = x1 - kMinWidthT;
\r
1404 poly3[0].Y = y1 - kMinWidthY;
\r
1406 poly3[1].Y = y1 - kMinWidthY - kWidth;
\r
1407 poly3[2].X = x1 + kMinWidthT + kWidth;
\r
1408 poly3[2].Y = y1 + kMinWidthY;
\r
1409 poly3[3].X = x1 + kMinWidthT;
\r
1410 poly3[3].Y = y1 + kMinWidthT;
\r
1411 poly3[4].X = x1 - kMinWidthT;
\r
1413 icPolygon(poly3, 5);
\r
1416 XX = sin(rad) * v;
\r
1417 XY = cos(rad) * v * -1;
\r
1418 YX = cos(rad) * v;
\r
1419 YY = sin(rad) * v;
\r
1421 if(a1 == 0){ //beginning of the storke
\r
1422 poly2[0].X = x1 + kMinWidthT * XX + (kMinWidthY * 0.5) * YX;
\r
1423 poly2[0].Y = y1 + kMinWidthT * XY + (kMinWidthY * 0.5) * YY;
\r
1424 poly2[1].X = x1 + (kMinWidthT + kMinWidthT * 0.5) * XX + (kMinWidthY * 0.5 + kMinWidthY) * YX;
\r
1425 poly2[1].Y = y1 + (kMinWidthT + kMinWidthT * 0.5) * XY + (kMinWidthY * 0.5 + kMinWidthY) * YY;
\r
1426 poly2[2].X = x1 + kMinWidthT * XX + (kMinWidthY * 0.5 + kMinWidthY * 2) * YX;
\r
1427 poly2[2].Y = y1 + kMinWidthT * XY + (kMinWidthY * 0.5 + kMinWidthY * 2) * YY;
\r
1428 icPolygon(poly2, 3);
\r
1434 if(tx1 == tx2){ //if TATE stroke, use y-axis
\r
1452 if(a1 % 10 == 2){ y1 = y1 - kWidth; }
\r
1453 if(a2 % 10 == 2){ y2 = y2 + kWidth; }
\r
1454 if(a1 % 10 == 3){ y1 = y1 - kWidth * kKakato; }
\r
1455 if(a2 % 10 == 3){ y2 = y2 + kWidth * kKakato; }
\r
1457 poly[3].X = x1 - kWidth;
\r
1459 poly[2].X = x2 - kWidth;
\r
1461 poly[1].X = x2 + kWidth;
\r
1463 poly[0].X = x1 + kWidth;
\r
1466 icPolygon(poly, 4);
\r
1468 else if(ty1 == ty2){ //if YOKO stroke, use x-axis
\r
1485 if(a1 % 10 == 2){ x1 = x1 - kWidth; }
\r
1486 if(a2 % 10 == 2){ x2 = x2 + kWidth; }
\r
1487 if(a1 % 10 == 3){ x1 = x1 - kWidth * kKakato; }
\r
1488 if(a2 % 10 == 3){ x2 = x2 + kWidth * kKakato; }
\r
1491 poly[0].Y = y1 - kWidth;
\r
1493 poly[1].Y = y2 - kWidth;
\r
1495 poly[2].Y = y2 + kWidth;
\r
1497 poly[3].Y = y1 + kWidth;
\r
1499 icPolygon(poly, 4);
\r
1501 else{ //for others, use x-axis
\r
1518 rad = atan((double)(y2 - y1) / (double)(x2 - x1));
\r
1520 x1 = x1 - kWidth * cos(rad);
\r
1521 y1 = y1 - kWidth * sin(rad);
\r
1524 x2 = x2 + kWidth * cos(rad);
\r
1525 y2 = y2 + kWidth * sin(rad);
\r
1528 x1 = x1 - kWidth * cos(rad) * kKakato;
\r
1529 y1 = y1 - kWidth * sin(rad) * kKakato;
\r
1532 x2 = x2 + kWidth * cos(rad) * kKakato;
\r
1533 y2 = y2 + kWidth * sin(rad) * kKakato;
\r
1536 //SUICHOKU NO ICHI ZURASHI HA sin TO cos NO IREKAE + x-axis MAINASU KA
\r
1537 poly[0].X = x1 + sin(rad) * kWidth;
\r
1538 poly[0].Y = y1 - cos(rad) * kWidth;
\r
1539 poly[1].X = x2 + sin(rad) * kWidth;
\r
1540 poly[1].Y = y2 - cos(rad) * kWidth;
\r
1541 poly[2].X = x2 - sin(rad) * kWidth;
\r
1542 poly[2].Y = y2 + cos(rad) * kWidth;
\r
1543 poly[3].X = x1 - sin(rad) * kWidth;
\r
1544 poly[3].Y = y1 + cos(rad) * kWidth;
\r
1546 icPolygon(poly, 4);
\r