5 void cdDrawBezier(double x1, double y1,
\r
6 double x2, double y2,
\r
7 double x3, double y3,
\r
8 double x4, double y4,
\r
13 double ix, iy, ia, ib, ir;
\r
17 double XX, XY, YX, YY;
\r
19 if(kShotai == kMincho){ // mincho
\r
23 delta = -1 * kMinWidthY * 0.5;
\r
40 if(y1 < y2){ y1 = y1 - delta; }
\r
41 else{ y1 = y1 + delta; }
\r
44 if(x1 < x2){ x1 = x1 - delta; }
\r
45 else{ x1 = x1 + delta; }
\r
48 rad = atan((double)(y2 - y1) / (double)(x2 - x1));
\r
49 if(x1 < x2){ v = 1; } else{ v = -1; }
\r
50 x1 = x1 - delta * cos(rad) * v;
\r
51 y1 = y1 - delta * sin(rad) * v;
\r
71 if(y3 < y4){ y4 = y4 + delta; }
\r
72 else{ y4 = y4 - delta; }
\r
75 if(x3 < x4){ x4 = x4 + delta; }
\r
76 else{ x4 = x4 - delta; }
\r
79 rad = atan((double)(y4 - y3) / (double)(x4 - x3));
\r
80 if(x3 < x4){ v = 1; } else{ v = -1; }
\r
81 x4 = x4 + delta * cos(rad) * v;
\r
82 y4 = y4 + delta * sin(rad) * v;
\r
87 for(tt = 0; tt <= 1000; tt = tt + kRate){
\r
88 t = (double)(tt) / 1000;
\r
91 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
92 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
93 //KATAMUKI of vector by BIBUN
\r
94 ix = t * t * (-3 * x1 + 9 * x2 + -9 * x3 + 3 * x4) + t * (6 * x1 + -12 * x2 + 6 * x3) + -3 * x1 + 3 * x2;
\r
95 iy = t * t * (-3 * y1 + 9 * y2 + -9 * y3 + 3 * y4) + t * (6 * y1 + -12 * y2 + 6 * y3) + -3 * y1 + 3 * y2;
\r
97 //line SUICHOKU by vector
\r
98 if(ix != 0 && iy != 0){
\r
99 ir = atan(iy / ix * -1);
\r
100 ia = sin(ir) * (double)(kMinWidthT);
\r
101 ib = cos(ir) * (double)(kMinWidthT);
\r
112 if(a1 == 7){ deltad = sqrt(t); }
\r
113 else if(a2 == 7){ deltad = sqrt(1.0 - t); }
\r
114 else{ deltad = 1; }
\r
118 //reverse if vector is going 2nd/3rd quadrants
\r
124 //copy to polygon structuer
\r
125 poly[count].X = x - ia;
\r
126 poly[count].Y = y - ib;
\r
127 poly[(1000 / kRate + 1) * 2 - 1 - count].X = x + ia;
\r
128 poly[(1000 / kRate + 1) * 2 - 1 - count].Y = y + ib;
\r
132 icPolygon(poly, (1000 / kRate + 1) * 2);
\r
134 //process for head of stroke
\r
135 rad = atan((double)(y2 - y1) / (double)(x2 - x1));
\r
136 if(x1 < x2){ v = 1; } else{ v = -1; }
\r
138 XY = cos(rad) * v * -1;
\r
144 poly2[0].X = x1 - kMinWidthT;
\r
146 poly2[1].X = x1 + kMinWidthT;
\r
148 poly2[2].X = x1 - kMinWidthT;
\r
149 poly2[2].Y = y1 - kMinWidthT;
\r
150 icPolygon(poly2, 3);
\r
153 poly2[0].X = x1 - kMinWidthT * XX;
\r
154 poly2[0].Y = y1 - kMinWidthT * XY;
\r
155 poly2[1].X = x1 + kMinWidthT * XX;
\r
156 poly2[1].Y = y1 + kMinWidthT * XY;
\r
157 poly2[2].X = x1 - kMinWidthT * XX - kMinWidthT * YX;
\r
158 poly2[2].Y = y1 - kMinWidthT * XY - kMinWidthT * YY;
\r
159 icPolygon(poly2, 3);
\r
164 if(y1 <= y4){ //from up to bottom
\r
166 poly2[0].X = x1 - kMinWidthT;
\r
168 poly2[1].X = x1 + kMinWidthT;
\r
170 poly2[2].X = x1 - kMinWidthT;
\r
171 poly2[2].Y = y1 - kMinWidthY;
\r
172 icPolygon(poly2, 3);
\r
175 poly2[0].X = x1 - kMinWidthT * XX;
\r
176 poly2[0].Y = y1 - kMinWidthT * XY;
\r
177 poly2[1].X = x1 + kMinWidthT * XX;
\r
178 poly2[1].Y = y1 + kMinWidthT * XY;
\r
179 poly2[2].X = x1 - kMinWidthT * XX - kMinWidthY * YX;
\r
180 poly2[2].Y = y1 - kMinWidthT * XY - kMinWidthY * YY;
\r
181 icPolygon(poly2, 3);
\r
184 else{ //bottom to up
\r
185 if(x1 == x2){ //is it right?
\r
186 poly2[0].X = x1 - kMinWidthT;
\r
188 poly2[1].X = x1 + kMinWidthT;
\r
190 poly2[2].X = x1 - kMinWidthT;
\r
191 poly2[2].Y = y1 + kMinWidthY;
\r
192 icPolygon(poly2, 3);
\r
195 poly2[0].X = x1 - kMinWidthT * XX;
\r
196 poly2[0].Y = y1 - kMinWidthT * XY;
\r
197 poly2[1].X = x1 + kMinWidthT * XX;
\r
198 poly2[1].Y = y1 + kMinWidthT * XY;
\r
199 poly2[2].X = x1 + kMinWidthT * XX - kMinWidthY * YX;
\r
200 poly2[2].Y = y1 + kMinWidthT * XY - kMinWidthY * YY;
\r
201 icPolygon(poly2, 3);
\r
206 if(a1 == 22){ //box's up-right corner, any time same degree
\r
207 poly3[0].X = x1 - kMinWidthT;
\r
208 poly3[0].Y = y1 - kMinWidthY;
\r
210 poly3[1].Y = y1 - kMinWidthY - kWidth;
\r
211 poly3[2].X = x1 + kMinWidthT + kWidth;
\r
212 poly3[2].Y = y1 + kMinWidthY;
\r
213 poly3[3].X = x1 + kMinWidthT;
\r
214 poly3[3].Y = y1 + kMinWidthT;
\r
215 poly3[4].X = x1 - kMinWidthT;
\r
217 icPolygon(poly3, 5);
\r
220 if(a1 == 0){ //beginning of the stroke
\r
221 if(y1 <= y4){ //from up to bottom
\r
223 poly2[0].X = x1 + kMinWidthT;
\r
224 poly2[0].Y = y1 + kMinWidthY * 0.5;
\r
225 poly2[1].X = x1 + kMinWidthT + kMinWidthT * 0.5;
\r
226 poly2[1].Y = y1 + kMinWidthY * 0.5 + kMinWidthY;
\r
227 poly2[2].X = x1 + kMinWidthT;
\r
228 poly2[2].Y = y1 + kMinWidthY * 0.5 + kMinWidthY * 2;
\r
229 icPolygon(poly2, 3);
\r
232 poly2[0].X = x1 + kMinWidthT * XX + (kMinWidthY * 0.5) * YX;
\r
233 poly2[0].Y = y1 + kMinWidthT * XY + (kMinWidthY * 0.5) * YY;
\r
234 poly2[1].X = x1 + (kMinWidthT + kMinWidthT * 0.5) * XX + (kMinWidthY * 0.5 + kMinWidthY) * YX;
\r
235 poly2[1].Y = y1 + (kMinWidthT + kMinWidthT * 0.5) * XY + (kMinWidthY * 0.5 + kMinWidthY) * YY;
\r
236 poly2[2].X = x1 + kMinWidthT * XX + (kMinWidthY * 0.5 + kMinWidthY * 2) * YX;
\r
237 poly2[2].Y = y1 + kMinWidthT * XY + (kMinWidthY * 0.5 + kMinWidthY * 2) * YY;
\r
238 icPolygon(poly2, 3);
\r
241 else{ //from bottom to up
\r
242 if(x1 == x2){ //is it right?
\r
243 poly2[0].X = x1 + kMinWidthT;
\r
244 poly2[0].Y = y1 - kMinWidthY * 0.5;
\r
245 poly2[1].X = x1 + kMinWidthT + kMinWidthT * 0.5;
\r
246 poly2[1].Y = y1 - kMinWidthY * 0.5 - kMinWidthY;
\r
247 poly2[2].X = x1 + kMinWidthT;
\r
248 poly2[2].Y = y1 - kMinWidthY * 0.5 - kMinWidthY * 2;
\r
249 icPolygon(poly2, 3);
\r
251 else //SETSUGOUMEN GA KAKERUNODE HOKYOU
\r
252 poly3[0].X = x1 - (kMinWidthT - 1) * XX + (kMinWidthY * 0.5) * YX;
\r
253 poly3[0].Y = y1 - (kMinWidthT - 1) * XY + (kMinWidthY * 0.5) * YY;
\r
254 poly3[1].X = x1 - (kMinWidthT - 0) * XX + (kMinWidthY * 0.5) * YX;
\r
255 poly3[1].Y = y1 - (kMinWidthT - 0) * XY + (kMinWidthY * 0.5) * YY;
\r
256 poly3[2].X = x1 - (kMinWidthT + kMinWidthT * 0.5) * XX + (kMinWidthY * 0.5 + kMinWidthY) * YX;
\r
257 poly3[2].Y = y1 - (kMinWidthT + kMinWidthT * 0.5) * XY + (kMinWidthY * 0.5 + kMinWidthY) * YY;
\r
258 poly3[3].X = x1 - (kMinWidthT - 0) * XX + (kMinWidthY * 0.5 + kMinWidthY * 2) * YX;
\r
259 poly3[3].Y = y1 - (kMinWidthT - 0) * XY + (kMinWidthY * 0.5 + kMinWidthY * 2) * YY;
\r
260 poly3[4].X = x1 - (kMinWidthT - 1) * XX + (kMinWidthY * 0.5 + kMinWidthY * 2) * YX;
\r
261 poly3[4].Y = y1 - (kMinWidthT - 1) * XY + (kMinWidthY * 0.5 + kMinWidthY * 2) * YY;
\r
262 icPolygon(poly3, 5);
\r
267 rad = atan((double)(y4 - y3) / (double)(x4 - x3));
\r
268 if(x3 < x4){ v = 1; } else{ v = -1; }
\r
269 YX = sin(rad) * v * -1;
\r
274 if(a2 == 1 || a2 == 8 || a2 == 15){ //the last filled circle
\r
276 poly3[0].X = x4 - kMinWidthT;
\r
278 poly3[1].X = x4 - kMinWidthT * 0.6;
\r
279 poly3[1].Y = y4 + kMinWidthT * 0.6;
\r
281 poly3[2].Y = y4 + kMinWidthT;
\r
282 poly3[3].X = x4 + kMinWidthT * 0.6;
\r
283 poly3[3].Y = y4 + kMinWidthT * 0.6;
\r
284 poly3[4].X = x4 + kMinWidthT;
\r
286 icPolygon(poly3, 5);
\r
290 poly3[0].Y = y4 - kMinWidthT;
\r
291 poly3[1].X = x4 + kMinWidthT * 0.6;
\r
292 poly3[1].Y = y4 - kMinWidthT * 0.6;
\r
293 poly3[2].X = x4 + kMinWidthT;
\r
295 poly3[3].X = x4 + kMinWidthT * 0.6;
\r
296 poly3[3].Y = y4 + kMinWidthT * 0.6;
\r
298 poly3[4].Y = y4 + kMinWidthT;
\r
299 icPolygon(poly3, 5);
\r
302 poly3[0].X = x4 + sin(rad) * kMinWidthT * v;
\r
303 poly3[0].Y = y4 - cos(rad) * kMinWidthT * v;
\r
304 poly3[1].X = x4 + cos(rad) * kMinWidthT * 0.8 * v + sin(rad) * kMinWidthT * 0.6 * v;
\r
305 poly3[1].Y = y4 + sin(rad) * kMinWidthT * 0.8 * v - cos(rad) * kMinWidthT * 0.6 * v;
\r
306 poly3[2].X = x4 + cos(rad) * kMinWidthT * v;
\r
307 poly3[2].Y = y4 + sin(rad) * kMinWidthT * v;
\r
308 poly3[3].X = x4 + cos(rad) * kMinWidthT * 0.8 * v - sin(rad) * kMinWidthT * 0.6 * v;
\r
309 poly3[3].Y = y4 + sin(rad) * kMinWidthT * 0.8 * v + cos(rad) * kMinWidthT * 0.6 * v;
\r
310 poly3[4].X = x4 - sin(rad) * kMinWidthT * v;
\r
311 poly3[4].Y = y4 + cos(rad) * kMinWidthT * v;
\r
312 icPolygon(poly3, 5);
\r
316 if(a2 == 9 || (a1 == 7 && a2 == 0)){ // Sinnyu & L2RD Harai
\r
319 poly2[0].Y = y4 + kMinWidthT;
\r
321 poly2[1].Y = y4 - kMinWidthT;
\r
322 poly2[2].X = x4 + kMinWidthT;
\r
323 poly2[2].Y = y4 - kMinWidthT;
\r
324 icPolygon(poly2, 3);
\r
327 poly2[0].X = x4 + kMinWidthT * YX;
\r
328 poly2[0].Y = y4 + kMinWidthT * YY;
\r
329 poly2[1].X = x4 - kMinWidthT * YX;
\r
330 poly2[1].Y = y4 - kMinWidthT * YY;
\r
331 poly2[2].X = x4 + kMinWidthT * XX - kMinWidthT * YX;
\r
332 poly2[2].Y = y4 + kMinWidthT * XY - kMinWidthT * YY;
\r
333 icPolygon(poly2, 3);
\r
337 if(a2 == 15){ //jump up
\r
340 poly4[0].Y = y4 - kMinWidthT + 1;
\r
341 poly4[1].X = x4 + 2;
\r
342 poly4[1].Y = y4 - kMinWidthT - kWidth * 5;
\r
344 poly4[2].Y = y4 - kMinWidthT - kWidth * 5;
\r
345 poly4[3].X = x4 - kMinWidthT;
\r
346 poly4[3].Y = y4 - kMinWidthT + 1;
\r
347 icPolygon(poly4, 4);
\r
350 poly4[0].X = x4 + (kMinWidthT - 1) * sin(rad) * v;
\r
351 poly4[0].Y = y4 - (kMinWidthT - 1) * cos(rad) * v;
\r
352 poly4[1].X = x4 + 2 * cos(rad) * v + (kMinWidthT + kWidth * 5) * sin(rad) * v;
\r
353 poly4[1].Y = y4 + 2 * sin(rad) * v - (kMinWidthT + kWidth * 5) * cos(rad) * v;
\r
354 poly4[2].X = x4 + (kMinWidthT + kWidth * 5) * sin(rad) * v;
\r
355 poly4[2].Y = y4 - (kMinWidthT + kWidth * 5) * cos(rad) * v;
\r
356 poly4[3].X = x4 + (kMinWidthT - 1) * sin(rad) * v - kMinWidthT * cos(rad) * v;
\r
357 poly4[3].Y = y4 - (kMinWidthT - 1) * cos(rad) * v - kMinWidthT * sin(rad) * v;
\r
358 icPolygon(poly4, 4);
\r
362 if(a2 == 14){ //jump to left, allways go left
\r
366 poly4[1].Y = y4 - kMinWidthT;
\r
367 poly4[2].X = x4 - kWidth * 4;
\r
368 poly4[2].Y = y4 - kMinWidthT;
\r
369 poly4[3].X = x4 - kWidth * 4;
\r
370 poly4[3].Y = y4 - kMinWidthT * 0.5;
\r
371 icPolygon(poly4, 4);
\r
377 if(y1 < y2){ y1 = y1 - kWidth; } else{ y1 = y1 + kWidth; }
\r
380 if(x1 < x2){ x1 = x1 - kWidth; } else{ x1 = x1 + kWidth; }
\r
383 rad = atan((double)(y2 - y1) / (double)(x2 - x1));
\r
384 if(x1 < x2){ v = 1; } else{ v = -1; }
\r
385 x1 = x1 - kWidth * cos(rad) * v;
\r
386 y1 = y1 - kWidth * sin(rad) * v;
\r
393 y1 = y1 - kWidth * kKakato;
\r
396 y1 = y1 + kWidth * kKakato;
\r
401 x1 = x1 - kWidth * kKakato;
\r
404 x1 = x1 + kWidth * kKakato;
\r
408 rad = atan((double)(y2 - y1) / (double)(x2 - x1));
\r
409 if(x1 < x2){ v = 1; } else{ v = -1; }
\r
410 x1 = x1 - kWidth * cos(rad) * v * kKakato;
\r
411 y1 = y1 - kWidth * sin(rad) * v * kKakato;
\r
416 if(y3 < y4){ y4 = y4 + kWidth; } else{ y4 = y4 - kWidth; }
\r
419 if(x3 < x4){ x4 = x4 + kWidth; } else{ x4 = x4 - kWidth; }
\r
422 rad = atan((double)(y4 - y3) / (double)(x4 - x3));
\r
423 if(x3 < x4){ v = 1; } else{ v = -1; }
\r
424 x4 = x4 + kWidth * cos(rad) * v;
\r
425 y4 = y4 + kWidth * sin(rad) * v;
\r
432 y4 = y4 + kWidth * kKakato;
\r
435 y4 = y4 - kWidth * kKakato;
\r
440 x4 = x4 + kWidth * kKakato;
\r
443 x4 = x4 - kWidth * kKakato;
\r
447 rad = atan((double)(y4 - y3) / (double)(x4 - x3));
\r
448 if(x3 < x4){ v = 1; } else{ v = -1; }
\r
449 x4 = x4 + kWidth * cos(rad) * v * kKakato;
\r
450 y4 = y4 + kWidth * sin(rad) * v * kKakato;
\r
456 for(tt = 0; tt <= 1000; tt = tt + kRate){
\r
457 t = (double)tt / 1000;
\r
460 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
461 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
462 //KATAMUKI of vector by BIBUN
\r
463 ix = t * t * (-3 * x1 + 9 * x2 + -9 * x3 + 3 * x4) + t * (6 * x1 + -12 * x2 + 6 * x3) + -3 * x1 + 3 * x2;
\r
464 iy = t * t * (-3 * y1 + 9 * y2 + -9 * y3 + 3 * y4) + t * (6 * y1 + -12 * y2 + 6 * y3) + -3 * y1 + 3 * y2;
\r
466 //SESSEN NI SUICHOKU NA CHOKUSEN NO KEISAN
\r
467 if(kShotai == kMincho){ //always false ?
\r
468 if(ix != 0 && iy != 0){
\r
469 ir = atan(iy / ix * -1.0);
\r
470 ia = sin(ir) * (double)kMinWidthT;
\r
471 ib = cos(ir) * (double)kMinWidthT;
\r
481 ia = ia * sqrt(1.0 - t);
\r
482 ib = ib * sqrt(1.0 - t);
\r
485 if(ix != 0 && iy != 0){
\r
486 ir = atan(iy / ix * -1.0);
\r
487 ia = sin(ir) * (double)kWidth;
\r
488 ib = cos(ir) * (double)kWidth;
\r
500 //reverse if vector is going 2nd/3rd quadrants
\r
507 poly[count].X = x - ia;
\r
508 poly[count].Y = y - ib;
\r
509 poly[(1000 / kRate + 1) * 2 - 1 - count].X = x + ia;
\r
510 poly[(1000 / kRate + 1) * 2 - 1 - count].Y = y + ib;
\r
514 icPolygon(poly, (1000 / kRate + 1) * 2);
\r
518 void cdDrawCurve(double x1, double y1,
\r
519 double x2, double y2,
\r
520 double x3, double y3,
\r
525 double ix, iy, ia, ib, ir;
\r
529 double XX, XY, YX, YY;
\r
531 if(kShotai == kMincho){ // mincho
\r
535 delta = -1 * kMinWidthY * 0.5;
\r
545 delta = kMinWidthY;
\r
552 if(y1 < y2){ y1 = y1 - delta; }
\r
553 else{ y1 = y1 + delta; }
\r
556 if(x1 < x2){ x1 = x1 - delta; }
\r
557 else{ x1 = x1 + delta; }
\r
560 rad = atan((double)(y2 - y1) / (double)(x2 - x1));
\r
561 if(x1 < x2){ v = 1; } else{ v = -1; }
\r
562 x1 = x1 - delta * cos(rad) * v;
\r
563 y1 = y1 - delta * sin(rad) * v;
\r
583 if(y2 < y3){ y3 = y3 + delta; }
\r
584 else{ y3 = y3 - delta; }
\r
587 if(x2 < x3){ x3 = x3 + delta; }
\r
588 else{ x3 = x3 - delta; }
\r
591 rad = atan((double)(y3 - y2) / (double)(x3 - x2));
\r
592 if(x2 < x3){ v = 1; } else{ v = -1; }
\r
593 x3 = x3 + delta * cos(rad) * v;
\r
594 y3 = y3 + delta * sin(rad) * v;
\r
599 for(tt = 0; tt <= 1000; tt = tt + kRate){
\r
600 t = (double)(tt) / 1000;
\r
603 x = ((1.0 - t) * (1.0 - t) * x1 + 2.0 * t * (1.0 - t) * x2 + t * t * x3);
\r
604 y = ((1.0 - t) * (1.0 - t) * y1 + 2.0 * t * (1.0 - t) * y2 + t * t * y3);
\r
606 //KATAMUKI of vector by BIBUN
\r
607 ix = (x1 - 2.0 * x2 + x3) * 2.0 * t + (-2.0 * x1 + 2.0 * x2);
\r
608 iy = (y1 - 2.0 * y2 + y3) * 2.0 * t + (-2.0 * y1 + 2.0 * y2);
\r
610 //line SUICHOKU by vector
\r
611 if(ix != 0 && iy != 0){
\r
612 ir = atan(iy / ix * -1);
\r
613 ia = sin(ir) * (double)(kMinWidthT);
\r
614 ib = cos(ir) * (double)(kMinWidthT);
\r
625 if(a1 == 7 && a2 == 0){ deltad = sqrt(t) * kL2RDfatten; } //L2RD: fatten
\r
626 else if(a1 == 7){ deltad = sqrt(t); }
\r
627 else if(a2 == 7){ deltad = sqrt(1.0 - t); }
\r
628 else{ deltad = 1; }
\r
632 //reverse if vector is going 2nd/3rd quadrants
\r
638 //copy to polygon structuer
\r
639 poly[count].X = x - ia;
\r
640 poly[count].Y = y - ib;
\r
641 poly[(1000 / kRate + 1) * 2 - 1 - count].X = x + ia;
\r
642 poly[(1000 / kRate + 1) * 2 - 1 - count].Y = y + ib;
\r
646 icPolygon(poly, (1000 / kRate + 1) * 2);
\r
648 //process for head of stroke
\r
649 rad = atan((double)(y2 - y1) / (double)(x2 - x1));
\r
650 if(x1 < x2){ v = 1; } else{ v = -1; }
\r
652 XY = cos(rad) * v * -1;
\r
658 poly2[0].X = x1 - kMinWidthT;
\r
660 poly2[1].X = x1 + kMinWidthT;
\r
662 poly2[2].X = x1 - kMinWidthT;
\r
663 poly2[2].Y = y1 - kMinWidthT;
\r
664 icPolygon(poly2, 3);
\r
667 poly2[0].X = x1 - kMinWidthT * XX;
\r
668 poly2[0].Y = y1 - kMinWidthT * XY;
\r
669 poly2[1].X = x1 + kMinWidthT * XX;
\r
670 poly2[1].Y = y1 + kMinWidthT * XY;
\r
671 poly2[2].X = x1 - kMinWidthT * XX - kMinWidthT * YX;
\r
672 poly2[2].Y = y1 - kMinWidthT * XY - kMinWidthT * YY;
\r
673 icPolygon(poly2, 3);
\r
678 if(y1 <= y3){ //from up to bottom
\r
680 poly2[0].X = x1 - kMinWidthT;
\r
682 poly2[1].X = x1 + kMinWidthT;
\r
684 poly2[2].X = x1 - kMinWidthT;
\r
685 poly2[2].Y = y1 - kMinWidthY;
\r
686 icPolygon(poly2, 3);
\r
689 poly2[0].X = x1 - kMinWidthT * XX;
\r
690 poly2[0].Y = y1 - kMinWidthT * XY;
\r
691 poly2[1].X = x1 + kMinWidthT * XX;
\r
692 poly2[1].Y = y1 + kMinWidthT * XY;
\r
693 poly2[2].X = x1 - kMinWidthT * XX - kMinWidthY * YX;
\r
694 poly2[2].Y = y1 - kMinWidthT * XY - kMinWidthY * YY;
\r
695 icPolygon(poly2, 3);
\r
698 else{ //bottom to up
\r
699 if(x1 == x2){ //is it right?
\r
700 poly2[0].X = x1 - kMinWidthT;
\r
702 poly2[1].X = x1 + kMinWidthT;
\r
704 poly2[2].X = x1 - kMinWidthT;
\r
705 poly2[2].Y = y1 + kMinWidthY;
\r
706 icPolygon(poly2, 3);
\r
709 poly2[0].X = x1 - kMinWidthT * XX;
\r
710 poly2[0].Y = y1 - kMinWidthT * XY;
\r
711 poly2[1].X = x1 + kMinWidthT * XX;
\r
712 poly2[1].Y = y1 + kMinWidthT * XY;
\r
713 poly2[2].X = x1 + kMinWidthT * XX - kMinWidthY * YX;
\r
714 poly2[2].Y = y1 + kMinWidthT * XY - kMinWidthY * YY;
\r
715 icPolygon(poly2, 3);
\r
720 if(a1 == 22){ //box's up-right corner, any time same degree
\r
721 poly3[0].X = x1 - kMinWidthT;
\r
722 poly3[0].Y = y1 - kMinWidthY;
\r
724 poly3[1].Y = y1 - kMinWidthY - kWidth;
\r
725 poly3[2].X = x1 + kMinWidthT + kWidth;
\r
726 poly3[2].Y = y1 + kMinWidthY;
\r
727 poly3[3].X = x1 + kMinWidthT;
\r
728 poly3[3].Y = y1 + kMinWidthT;
\r
729 poly3[4].X = x1 - kMinWidthT;
\r
731 icPolygon(poly3, 5);
\r
734 if(a1 == 0){ //beginning of the stroke
\r
735 if(y1 <= y3){ //from up to bottom
\r
737 poly2[0].X = x1 + kMinWidthT;
\r
738 poly2[0].Y = y1 + kMinWidthY * 0.5;
\r
739 poly2[1].X = x1 + kMinWidthT + kMinWidthT * 0.5;
\r
740 poly2[1].Y = y1 + kMinWidthY * 0.5 + kMinWidthY;
\r
741 poly2[2].X = x1 + kMinWidthT;
\r
742 poly2[2].Y = y1 + kMinWidthY * 0.5 + kMinWidthY * 2;
\r
743 icPolygon(poly2, 3);
\r
746 poly2[0].X = x1 + kMinWidthT * XX + (kMinWidthY * 0.5) * YX;
\r
747 poly2[0].Y = y1 + kMinWidthT * XY + (kMinWidthY * 0.5) * YY;
\r
748 poly2[1].X = x1 + (kMinWidthT + kMinWidthT * 0.5) * XX + (kMinWidthY * 0.5 + kMinWidthY) * YX;
\r
749 poly2[1].Y = y1 + (kMinWidthT + kMinWidthT * 0.5) * XY + (kMinWidthY * 0.5 + kMinWidthY) * YY;
\r
750 poly2[2].X = x1 + kMinWidthT * XX + (kMinWidthY * 0.5 + kMinWidthY * 2) * YX;
\r
751 poly2[2].Y = y1 + kMinWidthT * XY + (kMinWidthY * 0.5 + kMinWidthY * 2) * YY;
\r
752 icPolygon(poly2, 3);
\r
755 else{ //from bottom to up
\r
756 if(x1 == x2){ //is it right?
\r
757 poly2[0].X = x1 + kMinWidthT;
\r
758 poly2[0].Y = y1 - kMinWidthY * 0.5;
\r
759 poly2[1].X = x1 + kMinWidthT + kMinWidthT * 0.5;
\r
760 poly2[1].Y = y1 - kMinWidthY * 0.5 - kMinWidthY;
\r
761 poly2[2].X = x1 + kMinWidthT;
\r
762 poly2[2].Y = y1 - kMinWidthY * 0.5 - kMinWidthY * 2;
\r
763 icPolygon(poly2, 3);
\r
765 else //SETSUGOUMEN GA KAKERUNODE HOKYOU
\r
766 poly3[0].X = x1 - (kMinWidthT - 1) * XX + (kMinWidthY * 0.5) * YX;
\r
767 poly3[0].Y = y1 - (kMinWidthT - 1) * XY + (kMinWidthY * 0.5) * YY;
\r
768 poly3[1].X = x1 - (kMinWidthT - 0) * XX + (kMinWidthY * 0.5) * YX;
\r
769 poly3[1].Y = y1 - (kMinWidthT - 0) * XY + (kMinWidthY * 0.5) * YY;
\r
770 poly3[2].X = x1 - (kMinWidthT + kMinWidthT * 0.5) * XX + (kMinWidthY * 0.5 + kMinWidthY) * YX;
\r
771 poly3[2].Y = y1 - (kMinWidthT + kMinWidthT * 0.5) * XY + (kMinWidthY * 0.5 + kMinWidthY) * YY;
\r
772 poly3[3].X = x1 - (kMinWidthT - 0) * XX + (kMinWidthY * 0.5 + kMinWidthY * 2) * YX;
\r
773 poly3[3].Y = y1 - (kMinWidthT - 0) * XY + (kMinWidthY * 0.5 + kMinWidthY * 2) * YY;
\r
774 poly3[4].X = x1 - (kMinWidthT - 1) * XX + (kMinWidthY * 0.5 + kMinWidthY * 2) * YX;
\r
775 poly3[4].Y = y1 - (kMinWidthT - 1) * XY + (kMinWidthY * 0.5 + kMinWidthY * 2) * YY;
\r
776 icPolygon(poly3, 5);
\r
781 rad = atan((double)(y3 - y2) / (double)(x3 - x2));
\r
782 if(x2 < x3){ v = 1; } else{ v = -1; }
\r
783 YX = sin(rad) * v * -1;
\r
788 if(a2 == 1 || a2 == 8 || a2 == 15){ //the last filled circle
\r
790 poly3[0].X = x3 - kMinWidthT;
\r
792 poly3[1].X = x3 - kMinWidthT * 0.6;
\r
793 poly3[1].Y = y3 + kMinWidthT * 0.6;
\r
795 poly3[2].Y = y3 + kMinWidthT;
\r
796 poly3[3].X = x3 + kMinWidthT * 0.6;
\r
797 poly3[3].Y = y3 + kMinWidthT * 0.6;
\r
798 poly3[4].X = x3 + kMinWidthT;
\r
800 icPolygon(poly3, 5);
\r
804 poly3[0].Y = y3 - kMinWidthT;
\r
805 poly3[1].X = x3 + kMinWidthT * 0.6;
\r
806 poly3[1].Y = y3 - kMinWidthT * 0.6;
\r
807 poly3[2].X = x3 + kMinWidthT;
\r
809 poly3[3].X = x3 + kMinWidthT * 0.6;
\r
810 poly3[3].Y = y3 + kMinWidthT * 0.6;
\r
812 poly3[4].Y = y3 + kMinWidthT;
\r
813 icPolygon(poly3, 5);
\r
816 poly3[0].X = x3 + sin(rad) * kMinWidthT * v;
\r
817 poly3[0].Y = y3 - cos(rad) * kMinWidthT * v;
\r
818 poly3[1].X = x3 + cos(rad) * kMinWidthT * 0.8 * v + sin(rad) * kMinWidthT * 0.6 * v;
\r
819 poly3[1].Y = y3 + sin(rad) * kMinWidthT * 0.8 * v - cos(rad) * kMinWidthT * 0.6 * v;
\r
820 poly3[2].X = x3 + cos(rad) * kMinWidthT * v;
\r
821 poly3[2].Y = y3 + sin(rad) * kMinWidthT * v;
\r
822 poly3[3].X = x3 + cos(rad) * kMinWidthT * 0.8 * v - sin(rad) * kMinWidthT * 0.6 * v;
\r
823 poly3[3].Y = y3 + sin(rad) * kMinWidthT * 0.8 * v + cos(rad) * kMinWidthT * 0.6 * v;
\r
824 poly3[4].X = x3 - sin(rad) * kMinWidthT * v;
\r
825 poly3[4].Y = y3 + cos(rad) * kMinWidthT * v;
\r
826 icPolygon(poly3, 5);
\r
830 if(a2 == 9 || (a1 == 7 && a2 == 0)){ // Sinnyu & L2RD Harai
\r
833 poly2[0].Y = y3 + kMinWidthT * kL2RDfatten;
\r
835 poly2[1].Y = y3 - kMinWidthT * kL2RDfatten;
\r
836 poly2[2].X = x3 + kMinWidthT * kL2RDfatten;
\r
837 poly2[2].Y = y3 - kMinWidthT * kL2RDfatten;
\r
838 icPolygon(poly2, 3);
\r
841 poly2[0].X = x3 + kMinWidthT * kL2RDfatten * YX;
\r
842 poly2[0].Y = y3 + kMinWidthT * kL2RDfatten * YY;
\r
843 poly2[1].X = x3 - kMinWidthT * kL2RDfatten * YX;
\r
844 poly2[1].Y = y3 - kMinWidthT * kL2RDfatten * YY;
\r
845 poly2[2].X = x3 + kMinWidthT * kL2RDfatten * XX - kMinWidthT * kL2RDfatten * YX;
\r
846 poly2[2].Y = y3 + kMinWidthT * kL2RDfatten * XY - kMinWidthT * kL2RDfatten * YY;
\r
847 icPolygon(poly2, 3);
\r
851 if(a2 == 15){ //jump up
\r
854 poly4[0].Y = y3 - kMinWidthT + 1;
\r
855 poly4[1].X = x3 + 2;
\r
856 poly4[1].Y = y3 - kMinWidthT - kWidth * 5;
\r
858 poly4[2].Y = y3 - kMinWidthT - kWidth * 5;
\r
859 poly4[3].X = x3 - kMinWidthT;
\r
860 poly4[3].Y = y3 - kMinWidthT + 1;
\r
861 icPolygon(poly4, 4);
\r
864 poly4[0].X = x3 + (kMinWidthT - 1) * sin(rad) * v;
\r
865 poly4[0].Y = y3 - (kMinWidthT - 1) * cos(rad) * v;
\r
866 poly4[1].X = x3 + 2 * cos(rad) * v + (kMinWidthT + kWidth * 5) * sin(rad) * v;
\r
867 poly4[1].Y = y3 + 2 * sin(rad) * v - (kMinWidthT + kWidth * 5) * cos(rad) * v;
\r
868 poly4[2].X = x3 + (kMinWidthT + kWidth * 5) * sin(rad) * v;
\r
869 poly4[2].Y = y3 - (kMinWidthT + kWidth * 5) * cos(rad) * v;
\r
870 poly4[3].X = x3 + (kMinWidthT - 1) * sin(rad) * v - kMinWidthT * cos(rad) * v;
\r
871 poly4[3].Y = y3 - (kMinWidthT - 1) * cos(rad) * v - kMinWidthT * sin(rad) * v;
\r
872 icPolygon(poly4, 4);
\r
876 if(a2 == 14){ //jump to left, allways go left
\r
880 poly4[1].Y = y3 - kMinWidthT;
\r
881 poly4[2].X = x3 - kWidth * 4;
\r
882 poly4[2].Y = y3 - kMinWidthT;
\r
883 poly4[3].X = x3 - kWidth * 4;
\r
884 poly4[3].Y = y3 - kMinWidthT * 0.5;
\r
885 icPolygon(poly4, 4);
\r
891 if(y1 < y2){ y1 = y1 - kWidth; } else{ y1 = y1 + kWidth; }
\r
894 if(x1 < x2){ x1 = x1 - kWidth; } else{ x1 = x1 + kWidth; }
\r
897 rad = atan((double)(y2 - y1) / (double)(x2 - x1));
\r
898 if(x1 < x2){ v = 1; } else{ v = -1; }
\r
899 x1 = x1 - kWidth * cos(rad) * v;
\r
900 y1 = y1 - kWidth * sin(rad) * v;
\r
907 y1 = y1 - kWidth * kKakato;
\r
910 y1 = y1 + kWidth * kKakato;
\r
915 x1 = x1 - kWidth * kKakato;
\r
918 x1 = x1 + kWidth * kKakato;
\r
922 rad = atan((double)(y2 - y1) / (double)(x2 - x1));
\r
923 if(x1 < x2){ v = 1; } else{ v = -1; }
\r
924 x1 = x1 - kWidth * cos(rad) * v * kKakato;
\r
925 y1 = y1 - kWidth * sin(rad) * v * kKakato;
\r
930 if(y2 < y3){ y3 = y3 + kWidth; } else{ y3 = y3 - kWidth; }
\r
933 if(x2 < x3){ x3 = x3 + kWidth; } else{ x3 = x3 - kWidth; }
\r
936 rad = atan((double)(y3 - y2) / (double)(x3 - x2));
\r
937 if(x2 < x3){ v = 1; } else{ v = -1; }
\r
938 x3 = x3 + kWidth * cos(rad) * v;
\r
939 y3 = y3 + kWidth * sin(rad) * v;
\r
946 y3 = y3 + kWidth * kKakato;
\r
949 y3 = y3 - kWidth * kKakato;
\r
954 x3 = x3 + kWidth * kKakato;
\r
957 x3 = x3 - kWidth * kKakato;
\r
961 rad = atan((double)(y3 - y2) / (double)(x3 - x2));
\r
962 if(x2 < x3){ v = 1; } else{ v = -1; }
\r
963 x3 = x3 + kWidth * cos(rad) * v * kKakato;
\r
964 y3 = y3 + kWidth * sin(rad) * v * kKakato;
\r
970 for(tt = 0; tt <= 1000; tt = tt + kRate){
\r
971 t = (double)tt / 1000;
\r
973 //calculating each point
\r
974 x = ((1.0 - t) * (1.0 - t) * x1 + 2.0 * t * (1.0 - t) * x2 + t * t * x3);
\r
975 y = ((1.0 - t) * (1.0 - t) * y1 + 2.0 * t * (1.0 - t) * y2 + t * t * y3);
\r
977 //SESSEN NO KATAMUKI NO KEISAN(BIBUN)
\r
978 ix = (x1 - 2.0 * x2 + x3) * 2.0 * t + (-2.0 * x1 + 2.0 * x2);
\r
979 iy = (y1 - 2.0 * y2 + y3) * 2.0 * t + (-2.0 * y1 + 2.0 * y2);
\r
981 //SESSEN NI SUICHOKU NA CHOKUSEN NO KEISAN
\r
982 if(kShotai == kMincho){ //always false ?
\r
983 if(ix != 0 && iy != 0){
\r
984 ir = atan(iy / ix * -1.0);
\r
985 ia = sin(ir) * (double)kMinWidthT;
\r
986 ib = cos(ir) * (double)kMinWidthT;
\r
996 ia = ia * sqrt(1.0 - t);
\r
997 ib = ib * sqrt(1.0 - t);
\r
1000 if(ix != 0 && iy != 0){
\r
1001 ir = atan(iy / ix * -1.0);
\r
1002 ia = sin(ir) * (double)kWidth;
\r
1003 ib = cos(ir) * (double)kWidth;
\r
1015 //reverse if vector is going 2nd/3rd quadrants
\r
1022 poly[count].X = x - ia;
\r
1023 poly[count].Y = y - ib;
\r
1024 poly[(1000 / kRate + 1) * 2 - 1 - count].X = x + ia;
\r
1025 poly[(1000 / kRate + 1) * 2 - 1 - count].Y = y + ib;
\r
1029 icPolygon(poly, (1000 / kRate + 1) * 2);
\r
1033 void cdDrawLine(double tx1, double ty1, double tx2, double ty2, int ta1, int ta2){
\r
1035 double v, x1, y1, x2, y2;
\r
1037 double XX, XY, YX, YY;
\r
1039 if(kShotai == kMincho){ //mincho
\r
1047 if(x1 == x2){ //if TATE stroke, use y-axis
\r
1050 poly[3].X = x1 - kMinWidthT;
\r
1051 poly[3].Y = y1 - kMinWidthY / 2;
\r
1052 poly[0].X = x1 + kMinWidthT;
\r
1053 poly[0].Y = y1 + kMinWidthY / 2;
\r
1058 poly[3].X = x1 - kMinWidthT;
\r
1060 poly[0].X = x1 + kMinWidthT;
\r
1064 poly[3].X = x1 - kMinWidthT;
\r
1065 poly[3].Y = y1 - kMinWidthY - kMinWidthT;
\r
1066 poly[0].X = x1 + kMinWidthT;
\r
1067 poly[0].Y = y1 - kMinWidthY;
\r
1070 poly[3].X = x1 - kMinWidthT;
\r
1071 poly[3].Y = y1 - kMinWidthY;
\r
1072 poly[0].X = x1 + kMinWidthT;
\r
1073 poly[0].Y = y1 - kMinWidthY;
\r
1079 if(a1 == 6){ //KAGI's tail
\r
1080 poly[2].X = x2 - kMinWidthT;
\r
1082 poly[1].X = x2 + kMinWidthT;
\r
1086 poly[2].X = x2 - kMinWidthT;
\r
1087 poly[2].Y = y2 + kMinWidthT / 2;
\r
1088 poly[1].X = x2 + kMinWidthT;
\r
1089 poly[1].Y = y2 - kMinWidthT / 2;
\r
1093 poly[2].X = x2 - kMinWidthT;
\r
1095 poly[1].X = x2 + kMinWidthT;
\r
1099 poly[2].X = x2 - kMinWidthT;
\r
1100 poly[2].Y = y2 + kWidth * kKakato + kMinWidthT;
\r
1101 poly[1].X = x2 + kMinWidthT;
\r
1102 poly[1].Y = y2 + kWidth * kKakato;
\r
1105 poly[2].X = x2 - kMinWidthT;
\r
1106 poly[2].Y = y2 + kWidth * kKakato * 0.5 + kMinWidthT;
\r
1107 poly[1].X = x2 + kMinWidthT;
\r
1108 poly[1].Y = y2 + kWidth * kKakato * 0.5;
\r
1111 poly[2].X = x2 - kMinWidthT;
\r
1112 poly[2].Y = y2 + kMinWidthY;
\r
1113 poly[1].X = x2 + kMinWidthT;
\r
1114 poly[1].Y = y2 + kMinWidthY;
\r
1118 icPolygon(poly, 4);
\r
1120 if(a1 == 22){ //box's right top corner
\r
1121 poly3[0].X = x1 - kMinWidthT;
\r
1122 poly3[0].Y = y1 - kMinWidthY;
\r
1124 poly3[1].Y = y1 - kMinWidthY - kWidth;
\r
1125 poly3[2].X = x1 + kMinWidthT + kWidth;
\r
1126 poly3[2].Y = y1 + kMinWidthY;
\r
1127 poly3[3].X = x1 + kMinWidthT;
\r
1128 poly3[3].Y = y1 + kMinWidthT;
\r
1129 poly3[4].X = x1 - kMinWidthT;
\r
1131 icPolygon(poly3, 5);
\r
1134 if(a1 == 0){ //beginning of the stroke
\r
1135 poly2[0].X = x1 + kMinWidthT;
\r
1136 poly2[0].Y = y1 + kMinWidthY * 0.5;
\r
1137 poly2[1].X = x1 + kMinWidthT + kMinWidthT * 0.5;
\r
1138 poly2[1].Y = y1 + kMinWidthY * 0.5 + kMinWidthY;
\r
1139 poly2[2].X = x1 + kMinWidthT;
\r
1140 poly2[2].Y = y1 + kMinWidthY * 0.5 + kMinWidthY * 2;
\r
1141 icPolygon(poly2, 3);
\r
1144 if((a1 == 6 && a2 == 0) || a2 == 1){ //KAGI NO YOKO BOU NO SAIGO NO MARU
\r
1145 poly3[4].X = x2 - kMinWidthT;
\r
1147 poly3[3].X = x2 - kMinWidthT * 0.6;
\r
1148 poly3[3].Y = y2 + kMinWidthT * 0.6;
\r
1150 poly3[2].Y = y2 + kMinWidthT;
\r
1151 poly3[1].X = x2 + kMinWidthT * 0.6;
\r
1152 poly3[1].Y = y2 + kMinWidthT * 0.6;
\r
1153 poly3[0].X = x2 + kMinWidthT;
\r
1155 icPolygon(poly3, 5);
\r
1158 else if(y1 == y2){ //if it is YOKO stroke, use x-axis
\r
1159 if(a1 == 6){ //if it is KAGI's YOKO stroke, get bold
\r
1161 poly[0].Y = y1 - kMinWidthT;
\r
1163 poly[1].Y = y2 - kMinWidthT;
\r
1165 poly[2].Y = y2 + kMinWidthT;
\r
1167 poly[3].Y = y1 + kMinWidthT;
\r
1168 icPolygon(poly, 4);
\r
1170 if(a2 == 1 || a2 == 0 || a2 == 5){
\r
1171 //KAGI NO YOKO BOU NO SAIGO NO MARU
\r
1173 poly3[0].Y = y2 - kMinWidthT;
\r
1174 poly3[1].X = x2 + kMinWidthT * 0.6;
\r
1175 poly3[1].Y = y2 - kMinWidthT * 0.6;
\r
1176 poly3[2].X = x2 + kMinWidthT;
\r
1178 poly3[3].X = x2 + kMinWidthT * 0.6;
\r
1179 poly3[3].Y = y2 + kMinWidthT * 0.6;
\r
1181 poly3[4].Y = y2 + kMinWidthT;
\r
1182 icPolygon(poly3, 5);
\r
1186 //KAGI NO YOKO BOU NO HANE
\r
1188 poly[0].Y = y2 - kMinWidthT + 1;
\r
1189 poly[1].X = x2 + 2;
\r
1190 poly[1].Y = y2 - kMinWidthT - kWidth * 5;
\r
1192 poly[2].Y = y2 - kMinWidthT - kWidth * 5;
\r
1193 poly[3].X = x2 - kMinWidthT;
\r
1194 poly[3].Y = y2 - kMinWidthT + 1;
\r
1195 icPolygon(poly, 4);
\r
1202 poly[0].Y = y1 - kMinWidthY;
\r
1204 poly[3].Y = y1 + kMinWidthY;
\r
1207 poly[0].X = x1 - kMinWidthT;
\r
1208 poly[0].Y = y1 - kMinWidthY;
\r
1209 poly[3].X = x1 - kMinWidthT;
\r
1210 poly[3].Y = y1 + kMinWidthY;
\r
1217 poly[1].Y = y2 - kMinWidthY;
\r
1219 poly[2].Y = y2 + kMinWidthY;
\r
1222 poly[1].X = x2 + kMinWidthT;
\r
1223 poly[1].Y = y2 - kMinWidthY;
\r
1224 poly[2].X = x2 + kMinWidthT;
\r
1225 poly[2].Y = y2 + kMinWidthY;
\r
1228 icPolygon(poly, 4);
\r
1233 poly2[0].Y = y2 - kMinWidthY;
\r
1234 poly2[1].X = x2 - 24;
\r
1236 poly2[2].X = x2 - 12;
\r
1237 poly2[2].Y = y2 - 12;
\r
1238 icPolygon(poly2, 3);
\r
1242 else{ //for others, use x-axis
\r
1243 rad = atan((double)(y2 - y1) / (double)(x2 - x1));
\r
1244 if((abs(y2 - y1) < abs(x2 - x1)) && (a1 != 6) && (a2 != 6)){ //ASAI KAUDO
\r
1245 switch(a1){ //must be 0 or 2
\r
1247 poly[0].X = x1 + sin(rad) * kMinWidthY;
\r
1248 poly[0].Y = y1 - cos(rad) * kMinWidthY;
\r
1249 poly[3].X = x1 - sin(rad) * kMinWidthY;
\r
1250 poly[3].Y = y1 + cos(rad) * kMinWidthY;
\r
1253 poly[0].X = x1 + sin(rad) * kMinWidthY - kMinWidthT * cos(rad);
\r
1254 poly[0].Y = y1 - cos(rad) * kMinWidthY - kMinWidthT * sin(rad);
\r
1255 poly[3].X = x1 - sin(rad) * kMinWidthY - kMinWidthT * cos(rad);
\r
1256 poly[3].Y = y1 + cos(rad) * kMinWidthY - kMinWidthT * sin(rad);
\r
1260 switch(a2){ //must be 0 or 2
\r
1262 poly[1].X = x2 + sin(rad) * kMinWidthY;
\r
1263 poly[1].Y = y2 - cos(rad) * kMinWidthY;
\r
1264 poly[2].X = x2 - sin(rad) * kMinWidthY;
\r
1265 poly[2].Y = y2 + cos(rad) * kMinWidthY;
\r
1268 poly[1].X = x2 + sin(rad) * kMinWidthY + kMinWidthT * cos(rad);
\r
1269 poly[1].Y = y2 - cos(rad) * kMinWidthY + kMinWidthT * sin(rad);
\r
1270 poly[2].X = x2 - sin(rad) * kMinWidthY + kMinWidthT * cos(rad);
\r
1271 poly[2].Y = y2 + cos(rad) * kMinWidthY + kMinWidthT * sin(rad);
\r
1274 icPolygon(poly, 4);
\r
1278 poly2[0].X = x2 + sin(rad) * kMinWidthY;
\r
1279 poly2[0].Y = y2 - cos(rad) * kMinWidthY;
\r
1280 poly2[1].X = x2 - cos(rad) * 24;
\r
1281 poly2[1].Y = y2 - sin(rad) * 24;
\r
1282 poly2[2].X = x2 - cos(rad) * 12 + sin(rad) * 12;
\r
1283 poly2[2].Y = y2 - sin(rad) * 12 - cos(rad) * 12;
\r
1284 icPolygon(poly2, 3);
\r
1288 else{ //KAKUDO GA FUKAI or KAGI NO YOKO BOU
\r
1289 if(x1 > x2){ v = -1; } else{ v = 1; }
\r
1292 poly[0].X = x1 + sin(rad) * kMinWidthT * v + kMinWidthY * cos(rad) * 0.5 * v;
\r
1293 poly[0].Y = y1 - cos(rad) * kMinWidthT * v + kMinWidthY * sin(rad) * 0.5 * v;
\r
1294 poly[3].X = x1 - sin(rad) * kMinWidthT * v - kMinWidthY * cos(rad) * 0.5 * v;
\r
1295 poly[3].Y = y1 + cos(rad) * kMinWidthT * v - kMinWidthY * sin(rad) * 0.5 * v;
\r
1300 poly[0].X = x1 + sin(rad) * kMinWidthT * v;
\r
1301 poly[0].Y = y1 - cos(rad) * kMinWidthT * v;
\r
1302 poly[3].X = x1 - sin(rad) * kMinWidthT * v;
\r
1303 poly[3].Y = y1 + cos(rad) * kMinWidthT * v;
\r
1306 poly[0].X = x1 + sin(rad) * kMinWidthT * v - kMinWidthY * cos(rad) * v;
\r
1307 poly[0].Y = y1 - cos(rad) * kMinWidthT * v - kMinWidthY * sin(rad) * v;
\r
1308 poly[3].X = x1 - sin(rad) * kMinWidthT * v - (kMinWidthT + kMinWidthY) * cos(rad) * v;
\r
1309 poly[3].Y = y1 + cos(rad) * kMinWidthT * v - (kMinWidthT + kMinWidthY) * sin(rad) * v;
\r
1312 poly[0].X = x1 + sin(rad) * kMinWidthT * v - kMinWidthY * cos(rad) * v;
\r
1313 poly[0].Y = y1 - cos(rad) * kMinWidthT * v - kMinWidthY * sin(rad) * v;
\r
1314 poly[3].X = x1 - sin(rad) * kMinWidthT * v - kMinWidthY * cos(rad) * v;
\r
1315 poly[3].Y = y1 + cos(rad) * kMinWidthT * v - kMinWidthY * sin(rad) * v;
\r
1322 poly[1].X = x2 + sin(rad) * kMinWidthT * v;
\r
1323 poly[1].Y = y2 - cos(rad) * kMinWidthT * v;
\r
1324 poly[2].X = x2 - sin(rad) * kMinWidthT * v;
\r
1325 poly[2].Y = y2 + cos(rad) * kMinWidthT * v;
\r
1328 poly[1].X = x2 + sin(rad) * kMinWidthT * v - kMinWidthT * 0.5 * cos(rad) * v;
\r
1329 poly[1].Y = y2 - cos(rad) * kMinWidthT * v - kMinWidthT * 0.5 * sin(rad) * v;
\r
1330 poly[2].X = x2 - sin(rad) * kMinWidthT * v + kMinWidthT * 0.5 * cos(rad) * v;
\r
1331 poly[2].Y = y2 + cos(rad) * kMinWidthT * v + kMinWidthT * 0.5 * sin(rad) * v;
\r
1336 poly[1].X = x2 + sin(rad) * kMinWidthT * v;
\r
1337 poly[1].Y = y2 - cos(rad) * kMinWidthT * v;
\r
1338 poly[2].X = x2 - sin(rad) * kMinWidthT * v;
\r
1339 poly[2].Y = y2 + cos(rad) * kMinWidthT * v;
\r
1342 poly[1].X = x2 + sin(rad) * kMinWidthT * v + kWidth * kKakato * cos(rad) * v;
\r
1343 poly[1].Y = y2 - cos(rad) * kMinWidthT * v + kWidth * kKakato * sin(rad) * v;
\r
1344 poly[2].X = x2 - sin(rad) * kMinWidthT * v + (kWidth * kKakato + kMinWidthT) * cos(rad) * v;
\r
1345 poly[2].Y = y2 + cos(rad) * kMinWidthT * v + (kWidth * kKakato + kMinWidthT) * sin(rad) * v;
\r
1348 poly[1].X = x2 + sin(rad) * kMinWidthT * v + kWidth * kKakato * 0.5 * cos(rad) * v;
\r
1349 poly[1].Y = y2 - cos(rad) * kMinWidthT * v + kWidth * kKakato * 0.5 * sin(rad) * v;
\r
1350 poly[2].X = x2 - sin(rad) * kMinWidthT * v + (kWidth * kKakato * 0.5 + kMinWidthT) * cos(rad) * v;
\r
1351 poly[2].Y = y2 + cos(rad) * kMinWidthT * v + (kWidth * kKakato * 0.5 + kMinWidthT) * sin(rad) * v;
\r
1354 poly[1].X = x2 + sin(rad) * kMinWidthT * v + kMinWidthY * cos(rad) * v;
\r
1355 poly[1].Y = y2 - cos(rad) * kMinWidthT * v + kMinWidthY * sin(rad) * v;
\r
1356 poly[2].X = x2 - sin(rad) * kMinWidthT * v + kMinWidthY * cos(rad) * v;
\r
1357 poly[2].Y = y2 + cos(rad) * kMinWidthT * v + kMinWidthY * sin(rad) * v;
\r
1361 icPolygon(poly, 4);
\r
1363 if((a1 == 6) && (a2 == 0 || a2 == 5)){ //KAGI NO YOKO BOU NO SAIGO NO MARU
\r
1364 poly3[0].X = x2 + sin(rad) * kMinWidthT * v;
\r
1365 poly3[0].Y = y2 - cos(rad) * kMinWidthT * v;
\r
1366 poly3[1].X = x2 + cos(rad) * kMinWidthT * 0.8 * v + sin(rad) * kMinWidthT * 0.6 * v;
\r
1367 poly3[1].Y = y2 + sin(rad) * kMinWidthT * 0.8 * v - cos(rad) * kMinWidthT * 0.6 * v;
\r
1368 poly3[2].X = x2 + cos(rad) * kMinWidthT * v;
\r
1369 poly3[2].Y = y2 + sin(rad) * kMinWidthT * v;
\r
1370 poly3[3].X = x2 + cos(rad) * kMinWidthT * 0.8 * v - sin(rad) * kMinWidthT * 0.6 * v;
\r
1371 poly3[3].Y = y2 + sin(rad) * kMinWidthT * 0.8 * v + cos(rad) * kMinWidthT * 0.6 * v;
\r
1372 poly3[4].X = x2 - sin(rad) * kMinWidthT * v;
\r
1373 poly3[4].Y = y2 + cos(rad) * kMinWidthT * v;
\r
1374 icPolygon(poly3, 5);
\r
1377 if(a1 == 6 && a2 == 5){
\r
1378 //KAGI NO YOKO BOU NO HANE
\r
1379 poly[0].X = x2 + (kMinWidthT - 1) * sin(rad) * v;
\r
1380 poly[0].Y = y2 - (kMinWidthT - 1) * cos(rad) * v;
\r
1381 poly[1].X = x2 + 2 * cos(rad) * v + (kMinWidthT + kWidth * 5) * sin(rad) * v;
\r
1382 poly[1].Y = y2 + 2 * sin(rad) * v - (kMinWidthT + kWidth * 5) * cos(rad) * v;
\r
1383 poly[2].X = x2 + (kMinWidthT + kWidth * 5) * sin(rad) * v;
\r
1384 poly[2].Y = y2 - (kMinWidthT + kWidth * 5) * cos(rad) * v;
\r
1385 poly[3].X = x2 + (kMinWidthT - 1) * sin(rad) * v - kMinWidthT * cos(rad) * v;
\r
1386 poly[3].Y = y2 - (kMinWidthT - 1) * cos(rad) * v - kMinWidthT * sin(rad) * v;
\r
1387 icPolygon(poly, 4);
\r
1390 if(a1 == 22){ //SHIKAKU MIGIUE UROKO NANAME DEMO MASSUGU MUKI
\r
1391 poly3[0].X = x1 - kMinWidthT;
\r
1392 poly3[0].Y = y1 - kMinWidthY;
\r
1394 poly3[1].Y = y1 - kMinWidthY - kWidth;
\r
1395 poly3[2].X = x1 + kMinWidthT + kWidth;
\r
1396 poly3[2].Y = y1 + kMinWidthY;
\r
1397 poly3[3].X = x1 + kMinWidthT;
\r
1398 poly3[3].Y = y1 + kMinWidthT;
\r
1399 poly3[4].X = x1 - kMinWidthT;
\r
1401 icPolygon(poly3, 5);
\r
1404 XX = sin(rad) * v;
\r
1405 XY = cos(rad) * v * -1;
\r
1406 YX = cos(rad) * v;
\r
1407 YY = sin(rad) * v;
\r
1409 if(a1 == 0){ //beginning of the storke
\r
1410 poly2[0].X = x1 + kMinWidthT * XX + (kMinWidthY * 0.5) * YX;
\r
1411 poly2[0].Y = y1 + kMinWidthT * XY + (kMinWidthY * 0.5) * YY;
\r
1412 poly2[1].X = x1 + (kMinWidthT + kMinWidthT * 0.5) * XX + (kMinWidthY * 0.5 + kMinWidthY) * YX;
\r
1413 poly2[1].Y = y1 + (kMinWidthT + kMinWidthT * 0.5) * XY + (kMinWidthY * 0.5 + kMinWidthY) * YY;
\r
1414 poly2[2].X = x1 + kMinWidthT * XX + (kMinWidthY * 0.5 + kMinWidthY * 2) * YX;
\r
1415 poly2[2].Y = y1 + kMinWidthT * XY + (kMinWidthY * 0.5 + kMinWidthY * 2) * YY;
\r
1416 icPolygon(poly2, 3);
\r
1422 if(tx1 == tx2){ //if TATE stroke, use y-axis
\r
1440 if(a1 % 10 == 2){ y1 = y1 - kWidth; }
\r
1441 if(a2 % 10 == 2){ y2 = y2 + kWidth; }
\r
1442 if(a1 % 10 == 3){ y1 = y1 - kWidth * kKakato; }
\r
1443 if(a2 % 10 == 3){ y2 = y2 + kWidth * kKakato; }
\r
1445 poly[3].X = x1 - kWidth;
\r
1447 poly[2].X = x2 - kWidth;
\r
1449 poly[1].X = x2 + kWidth;
\r
1451 poly[0].X = x1 + kWidth;
\r
1454 icPolygon(poly, 4);
\r
1456 else if(ty1 == ty2){ //if YOKO stroke, use x-axis
\r
1473 if(a1 % 10 == 2){ x1 = x1 - kWidth; }
\r
1474 if(a2 % 10 == 2){ x2 = x2 + kWidth; }
\r
1475 if(a1 % 10 == 3){ x1 = x1 - kWidth * kKakato; }
\r
1476 if(a2 % 10 == 3){ x2 = x2 + kWidth * kKakato; }
\r
1479 poly[0].Y = y1 - kWidth;
\r
1481 poly[1].Y = y2 - kWidth;
\r
1483 poly[2].Y = y2 + kWidth;
\r
1485 poly[3].Y = y1 + kWidth;
\r
1487 icPolygon(poly, 4);
\r
1489 else{ //for others, use x-axis
\r
1506 rad = atan((double)(y2 - y1) / (double)(x2 - x1));
\r
1508 x1 = x1 - kWidth * cos(rad);
\r
1509 y1 = y1 - kWidth * sin(rad);
\r
1512 x2 = x2 + kWidth * cos(rad);
\r
1513 y2 = y2 + kWidth * sin(rad);
\r
1516 x1 = x1 - kWidth * cos(rad) * kKakato;
\r
1517 y1 = y1 - kWidth * sin(rad) * kKakato;
\r
1520 x2 = x2 + kWidth * cos(rad) * kKakato;
\r
1521 y2 = y2 + kWidth * sin(rad) * kKakato;
\r
1524 //SUICHOKU NO ICHI ZURASHI HA sin TO cos NO IREKAE + x-axis MAINASU KA
\r
1525 poly[0].X = x1 + sin(rad) * kWidth;
\r
1526 poly[0].Y = y1 - cos(rad) * kWidth;
\r
1527 poly[1].X = x2 + sin(rad) * kWidth;
\r
1528 poly[1].Y = y2 - cos(rad) * kWidth;
\r
1529 poly[2].X = x2 - sin(rad) * kWidth;
\r
1530 poly[2].Y = y2 + cos(rad) * kWidth;
\r
1531 poly[3].X = x1 - sin(rad) * kWidth;
\r
1532 poly[3].Y = y1 + cos(rad) * kWidth;
\r
1534 icPolygon(poly, 4);
\r