#include <stdio.h>
#ifndef __min
#define __min(a, b) ((a)<(b)? (a):(b))
#endif
#ifndef __max
#define __max(a, b) ((a)>(b)? (a):(b))
#endif
//
typedef struct _tagPOINT
{
char x;
char y;
} POINT;
POINT pts[90];
int pts_top; //Queue 指针
// (Pi->Pk) * (Pi->Pj) 从 PI-PK 转向 PI-PJ 的方向
// > 0: 左转
// < 0: 右转
// = 0: 共线
int Direction(int xi, int yi,
int xj, int yj,
int xk, int yk)
{
return (xk-xi)*(yj-yi) - (xj-xi)*(yk-yi);
}
int main(int argc, char* argv[])
{
//三角形的三个顶点(逆时针方向)
int x0, y0, x1, y1, x2, y2, x, y;
int left, top, right, bottom;
int min_x, i, j, cur_y;
printf("Program 4 by team X\n");
while(scanf("%d %d %d %d %d %d",
&x0, &y0, &x1, &y1, &x2, &y2) != EOF)
{
//初始化case
pts_top = -1;
min_x = 10;
left = __min(__min(x0, x1), x2);
top = __max(__max(y0, y1), y2);
right = __max(__max(x0, x1), x2);
bottom = __min(__min(y0, y1), y2);
//在矩形整数阵列中搜寻三角形内部的点
for(y = top; y >= bottom; y--)
{
for(x = left; x <= right; x++)
{
if( Direction(x0, y0, x1, y1, x, y) <= 0) continue;
if( Direction(x1, y1, x2, y2, x, y) <= 0) continue;
if( Direction(x2, y2, x0, y0, x, y) <= 0) continue;
//这是一个内部的点
++pts_top;
pts[pts_top].x = x;
pts[pts_top].y = y;
//更新最左的点
if(x < min_x) min_x = x;
}
}
//打印输出结果!
cur_y = -10; //当前y坐标
for(i = 0; i <= pts_top; i++)
{
//换行了?
if(pts[i].y != cur_y)
{
cur_y = pts[i].y;
//不是第一行,则换行!
if(i > 0) printf("\n");
//本行前面的前导打印多少个空格?
for(j = 0; j < ( pts[i].x - min_x ) * 9; j++)
printf(" ");
}
else
{
//没有换行,则在两个点之间打印一个空格
if(i > 0) printf(" ");
}
printf("(%2d, %2d)", pts[i].x, pts[i].y);
}
//case结束后还需要输出一个空行!
printf("\n\n");
}
printf("End of program 4 by team X\n");
return 0;
}