+ }\r
+ //detect crossing point of each vector\r
+ else if((tpoly[i].Y < j && j <= tpoly[i + 1].Y) ||\r
+ (tpoly[i + 1].Y <= j && j < tpoly[i].Y)){\r
+ a = (tpoly[i + 1].Y - tpoly[i].Y) \r
+ / (tpoly[i + 1].X - tpoly[i].X);\r
+ b = tpoly[i].Y - a * tpoly[i].X;\r
+ cross[num] = (j - b) / a;\r
+ num++;\r
+ //spearhead: add one more\r
+ if(tpoly[i + 1].Y == j &&\r
+ ((tpoly[i].Y > tpoly[i + 1].Y &&\r
+ tpoly[i + 1].Y < tpoly[i + 2].Y) ||\r
+ (tpoly[i].Y < tpoly[i + 1].Y &&\r
+ tpoly[i + 1].Y > tpoly[i + 2].Y))){\r
+ cross[num] = tpoly[i + 1].X;\r
+ num++;\r
+ }\r
+ }\r
+ }\r
+ if(num != 0){\r
+ //(for debug)\r
+ if(num % 2 != 0){\r
+ fprintf(stderr,"y:%d(%d)\n",j,num);\r
+ for(k=0;k<num;k++) fprintf(stderr,"%d+",cross[k]);\r
+ }\r
+ //sort crossing point\r
+ for(k = 0; k < num - 1; k++){\r
+ for(l = num - 1; l > k; l--){\r
+ if(cross[l] < cross[l - 1]){\r
+ m = cross[l];\r
+ cross[l] = cross[l - 1];\r
+ cross[l - 1] = m;\r
+ }\r
+ }\r
+ }\r
+ //draw to vram\r
+ for(k = 0 ; k < num; k = k + 2){\r
+ for(l = cross[k]; l <= cross[k + 1]; l++){\r
+ if(0 <= j && j < canvasHeight && 0 <= l && l < canvasWidth)\r
+ image[j][l] = col;\r
+ }\r
+ }\r
+ }\r
+ }\r