//\r
#include "kage.h"\r
\r
-void cdDrawCurve(int x1, int y1,\r
- int x2, int y2,\r
- int x3, int y3,\r
+void cdDrawCurve(double x1, double y1,\r
+ double x2, double y2,\r
+ double x3, double y3,\r
int a1, int a2){\r
\r
double rad, t;\r
double x, y, v;\r
double ix, iy, ia, ib, ir;\r
- int ox1, oy1, ox2, oy2;\r
int count, tt;\r
- int delta;\r
+ double delta;\r
double deltad;\r
double XX, XY, YX, YY;\r
\r
\r
//line SUICHOKU by vector\r
if(ix != 0 && iy != 0){\r
- ir = atan(iy / ix * -1.0);\r
+ ir = atan(iy / ix * -1);\r
ia = sin(ir) * (double)(kMinWidthT);\r
ib = cos(ir) * (double)(kMinWidthT);\r
}\r
ia = ia * deltad;\r
ib = ib * deltad;\r
\r
- //swap if two lines are crossing\r
- if(((x + ia) - ox1) * ((x + ia) - ox1) +\r
- ((y + ib) - oy1) * ((y + ib) - oy1) >\r
- ((x - ia) - ox1) * ((x - ia) - ox1) +\r
- ((y - ib) - oy1) * ((y - ib) - oy1) && count != 0){\r
- ia = ia * -1;\r
- ib = ib * -1;\r
+ //reverse if vector is going 2nd/3rd quadrants\r
+ if(ix <= 0){\r
+ ia = ia * -1;\r
+ ib = ib * -1;\r
}\r
\r
- //copy as an old point\r
- ox1 = x + ia;\r
- oy1 = y + ib;\r
- ox2 = x - ia;\r
- oy2 = y - ib;\r
- \r
//copy to polygon structuer\r
- poly[count].X = x + ia;\r
- poly[count].Y = y + ib;\r
- poly[(1000 / kRate + 1) * 2 - 1 - count].X = x - ia;\r
- poly[(1000 / kRate + 1) * 2 - 1 - count].Y = y - ib;\r
+ poly[count].X = x - ia;\r
+ poly[count].Y = y - ib;\r
+ poly[(1000 / kRate + 1) * 2 - 1 - count].X = x + ia;\r
+ poly[(1000 / kRate + 1) * 2 - 1 - count].Y = y + ib;\r
count += 1;\r
}\r
\r
ib = kWidth;\r
}\r
}\r
- \r
- //if it is crossing, swap each other\r
- if(((x + ia) - ox1) * ((x + ia) - ox1) +\r
- ((y + ib) - oy1) * ((y + ib) - oy1) >\r
- ((x - ia) - ox1) * ((x - ia) - ox1) +\r
- ((y - ib) - oy1) * ((y - ib) - oy1) && count != 0){\r
- ia = ia * -1;\r
- ib = ib * -1;\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
- //save old points for calculate crossing\r
- ox1 = x + ia;\r
- oy1 = y + ib;\r
- ox2 = x - ia;\r
- oy2 = y - ib;\r
- \r
+ \r
//save to polygon\r
- poly[count].X = x + ia;\r
- poly[count].Y = y + ib;\r
- poly[(1000 / kRate + 1) * 2 - 1 - count].X = x - ia;\r
- poly[(1000 / kRate + 1) * 2 - 1 - count].Y = y - ib;\r
+ poly[count].X = x - ia;\r
+ poly[count].Y = y - ib;\r
+ poly[(1000 / kRate + 1) * 2 - 1 - count].X = x + ia;\r
+ poly[(1000 / kRate + 1) * 2 - 1 - count].Y = y + ib;\r
count += 1;\r
}\r
\r
}\r
}\r
\r
-void cdDrawLine(int tx1, int ty1, int tx2, int ty2, int ta1, int ta2){\r
+void cdDrawLine(double tx1, double ty1, double tx2, double ty2, int ta1, int ta2){\r
double rad;\r
- int v, x1, y1, x2, y2, a1, a2;\r
+ double v, x1, y1, x2, y2;\r
+ int a1, a2;\r
double XX, XY, YX, YY;\r
\r
if(kShotai == kMincho){ //mincho\r
if(x1 == x2){ //if TATE stroke, use y-axis\r
switch(a1){\r
case 0:\r
- poly[0].X = x1 - kMinWidthT;\r
- poly[0].Y = y1 - kMinWidthY / 2;\r
- poly[3].X = x1 + kMinWidthT;\r
- poly[3].Y = y1 + kMinWidthY / 2;\r
+ poly[3].X = x1 - kMinWidthT;\r
+ poly[3].Y = y1 - kMinWidthY / 2;\r
+ poly[0].X = x1 + kMinWidthT;\r
+ poly[0].Y = y1 + kMinWidthY / 2;\r
break;\r
case 1:\r
case 6:\r
case 22:\r
- poly[0].X = x1 - kMinWidthT;\r
- poly[0].Y = y1;\r
- poly[3].X = x1 + kMinWidthT;\r
+ poly[3].X = x1 - kMinWidthT;\r
poly[3].Y = y1;\r
+ poly[0].X = x1 + kMinWidthT;\r
+ poly[0].Y = y1;\r
break;\r
case 12:\r
- poly[0].X = x1 - kMinWidthT;\r
- poly[0].Y = y1 - kMinWidthY - kMinWidthT;\r
- poly[3].X = x1 + kMinWidthT;\r
- poly[3].Y = y1 - kMinWidthY;\r
+ poly[3].X = x1 - kMinWidthT;\r
+ poly[3].Y = y1 - kMinWidthY - kMinWidthT;\r
+ poly[0].X = x1 + kMinWidthT;\r
+ poly[0].Y = y1 - kMinWidthY;\r
break;\r
case 32:\r
- poly[0].X = x1 - kMinWidthT;\r
- poly[0].Y = y1 - kMinWidthY;\r
- poly[3].X = x1 + kMinWidthT;\r
+ poly[3].X = x1 - kMinWidthT;\r
poly[3].Y = y1 - kMinWidthY;\r
+ poly[0].X = x1 + kMinWidthT;\r
+ poly[0].Y = y1 - kMinWidthY;\r
break;\r
}\r
\r
switch(a2){\r
case 0:\r
if(a1 == 6){ //KAGI's tail\r
- poly[1].X = x2 - kMinWidthT;\r
- poly[1].Y = y2;\r
- poly[2].X = x2 + kMinWidthT;\r
+ poly[2].X = x2 - kMinWidthT;\r
poly[2].Y = y2;\r
+ poly[1].X = x2 + kMinWidthT;\r
+ poly[1].Y = y2;\r
}\r
else{\r
- poly[1].X = x2 - kMinWidthT;\r
- poly[1].Y = y2 + kMinWidthT / 2;\r
- poly[2].X = x2 + kMinWidthT;\r
- poly[2].Y = y2 - kMinWidthT / 2;\r
+ poly[2].X = x2 - kMinWidthT;\r
+ poly[2].Y = y2 + kMinWidthT / 2;\r
+ poly[1].X = x2 + kMinWidthT;\r
+ poly[1].Y = y2 - kMinWidthT / 2;\r
}\r
break;\r
case 1:\r
- poly[1].X = x2 - kMinWidthT;\r
- poly[1].Y = y2;\r
- poly[2].X = x2 + kMinWidthT;\r
+ poly[2].X = x2 - kMinWidthT;\r
poly[2].Y = y2;\r
+ poly[1].X = x2 + kMinWidthT;\r
+ poly[1].Y = y2;\r
break;\r
case 13:\r
- poly[1].X = x2 - kMinWidthT;\r
- poly[1].Y = y2 + kWidth * kKakato + kMinWidthT;\r
- poly[2].X = x2 + kMinWidthT;\r
- poly[2].Y = y2 + kWidth * kKakato;\r
+ poly[2].X = x2 - kMinWidthT;\r
+ poly[2].Y = y2 + kWidth * kKakato + kMinWidthT;\r
+ poly[1].X = x2 + kMinWidthT;\r
+ poly[1].Y = y2 + kWidth * kKakato;\r
break;\r
case 23:\r
- poly[1].X = x2 - kMinWidthT;\r
- poly[1].Y = y2 + kWidth * kKakato * 0.5 + kMinWidthT;\r
- poly[2].X = x2 + kMinWidthT;\r
- poly[2].Y = y2 + kWidth * kKakato * 0.5;\r
+ poly[2].X = x2 - kMinWidthT;\r
+ poly[2].Y = y2 + kWidth * kKakato * 0.5 + kMinWidthT;\r
+ poly[1].X = x2 + kMinWidthT;\r
+ poly[1].Y = y2 + kWidth * kKakato * 0.5;\r
break;\r
case 32:\r
- poly[1].X = x2 - kMinWidthT;\r
- poly[1].Y = y2 + kMinWidthY;\r
- poly[2].X = x2 + kMinWidthT;\r
+ poly[2].X = x2 - kMinWidthT;\r
poly[2].Y = y2 + kMinWidthY;\r
+ poly[1].X = x2 + kMinWidthT;\r
+ poly[1].Y = y2 + kMinWidthY;\r
break;\r
}\r
\r
}\r
\r
if((a1 == 6 && a2 == 0) || a2 == 1){ //KAGI NO YOKO BOU NO SAIGO NO MARU\r
- poly3[0].X = x2 - kMinWidthT;\r
- poly3[0].Y = y2;\r
- poly3[1].X = x2 - kMinWidthT * 0.6;\r
- poly3[1].Y = y2 + kMinWidthT * 0.6;\r
+ poly3[4].X = x2 - kMinWidthT;\r
+ poly3[4].Y = y2;\r
+ poly3[3].X = x2 - kMinWidthT * 0.6;\r
+ poly3[3].Y = y2 + kMinWidthT * 0.6;\r
poly3[2].X = x2;\r
poly3[2].Y = y2 + kMinWidthT;\r
- poly3[3].X = x2 + kMinWidthT * 0.6;\r
- poly3[3].Y = y2 + kMinWidthT * 0.6;\r
- poly3[4].X = x2 + kMinWidthT;\r
- poly3[4].Y = y2;\r
+ poly3[1].X = x2 + kMinWidthT * 0.6;\r
+ poly3[1].Y = y2 + kMinWidthT * 0.6;\r
+ poly3[0].X = x2 + kMinWidthT;\r
+ poly3[0].Y = y2;\r
icPolygon(poly3, 5);\r
}\r
}\r
if(a1 % 10 == 3){ y1 = y1 - kWidth * kKakato; }\r
if(a2 % 10 == 3){ y2 = y2 + kWidth * kKakato; }\r
\r
- poly[0].X = x1 - kWidth;\r
- poly[0].Y = y1;\r
- poly[1].X = x2 - kWidth;\r
- poly[1].Y = y2;\r
- poly[2].X = x2 + kWidth;\r
- poly[2].Y = y2;\r
- poly[3].X = x1 + kWidth;\r
+ poly[3].X = x1 - kWidth;\r
poly[3].Y = y1;\r
+ poly[2].X = x2 - kWidth;\r
+ poly[2].Y = y2;\r
+ poly[1].X = x2 + kWidth;\r
+ poly[1].Y = y2;\r
+ poly[0].X = x1 + kWidth;\r
+ poly[0].Y = y1;\r
\r
icPolygon(poly, 4);\r
}\r