#include #include struct POINT { float x; float y; }; void get_point(POINT *pt) { scanf(" (%f,%f)",&pt->x,&pt->y); } POINT lines[50][100][2]; int count[50]; int main() { char name[50]; char c; char shape[100]; int i; bool mat[32][32]; bool used[32]; for (i=0;i<32;i++) { int j; used[i]=false; for (j=0;j<32;j++) mat[i][j]=false; } while (scanf(" %c",&c),c!='.') { int i; int idx=0; //TODO: nulovat do { used[c-'A']=true; name[idx]=c; scanf("%s",shape); // printf("%s",shape); if (!strcmp(shape,"square")) { POINT p1,p2,p3,p4,s; get_point(&p1); get_point(&p3); s.x=(p1.x+p3.x)/2; s.y=(p1.y+p3.y)/2; p2.x=-(p3.y-s.y)+s.x; p2.y=p3.x-s.x+s.y; p4.x=p3.y-s.y+s.x; p4.y=-(p3.x-s.x)+s.y; lines[idx][0][0].x=p1.x; lines[idx][0][0].y=p1.y; lines[idx][0][1].x=p2.x; lines[idx][0][1].y=p2.y; lines[idx][1][0].x=p2.x; lines[idx][1][0].y=p2.y; lines[idx][1][1].x=p3.x; lines[idx][1][1].y=p3.y; lines[idx][2][0].x=p3.x; lines[idx][2][0].y=p3.y; lines[idx][2][1].x=p4.x; lines[idx][2][1].y=p4.y; lines[idx][3][0].x=p4.x; lines[idx][3][0].y=p4.y; lines[idx][3][1].x=p1.x; lines[idx][3][1].y=p1.y; count[idx++]=4; } if (!strcmp(shape,"rectangle")) { POINT p1,p2,p3,p4,s; get_point(&p1); get_point(&p2); get_point(&p3); s.x=(p1.x+p3.x); s.y=(p1.y+p3.y); p4.x=s.x-p2.x; p4.y=s.y-p2.y; lines[idx][0][0].x=p1.x; lines[idx][0][0].y=p1.y; lines[idx][0][1].x=p2.x; lines[idx][0][1].y=p2.y; lines[idx][1][0].x=p2.x; lines[idx][1][0].y=p2.y; lines[idx][1][1].x=p3.x; lines[idx][1][1].y=p3.y; lines[idx][2][0].x=p3.x; lines[idx][2][0].y=p3.y; lines[idx][2][1].x=p4.x; lines[idx][2][1].y=p4.y; lines[idx][3][0].x=p4.x; lines[idx][3][0].y=p4.y; lines[idx][3][1].x=p1.x; lines[idx][3][1].y=p1.y; count[idx++]=4; } if (!strcmp(shape,"line")) { POINT pt1,pt2; get_point(&pt1); get_point(&pt2); lines[idx][0][0].x=pt1.x; lines[idx][0][0].y=pt1.y; lines[idx][0][1].x=pt2.y; lines[idx][0][1].y=pt2.x; count[idx++]=1; } if (!strcmp(shape,"triangle")||!strcmp(shape,"polygon")) { POINT pt1,pt2; int n; if (!strcmp(shape,"polygon")) scanf("%d",&n); else n=3; int j; POINT fp; get_point(&fp); pt1=fp; for (j=0;jlines[k][l][1].y) { if (y>=lines[k][l][1].y && y<=lines[k][l][0].y) ++inter; } else { if (y>=lines[k][l][0].y && y<=lines[k][l][1].y) ++inter; } if (lines[k][l][0].x>lines[k][l][1].x) { if (x>=lines[k][l][1].x && x<=lines[k][l][0].x) ++inter; } else { if (x>=lines[k][l][0].x && x<=lines[k][l][1].x) ++inter; } if (lines[i][j][0].y>lines[i][j][1].y) { if (y>=lines[i][j][1].y && y<=lines[i][j][0].y) ++inter; } else { if (y>=lines[i][j][0].y && y<=lines[i][j][1].y) ++inter; } if (lines[i][j][0].x>lines[i][j][1].x) { if (x>=lines[i][j][1].x && x<=lines[i][j][0].x) ++inter; } else { if (x>=lines[i][j][0].x && x<=lines[i][j][1].x) ++inter; } if (inter>=4) binter=true; inter=0; } if (binter)//printf("%c %c\n",name[i],name[k]); mat[name[i]-'A'][name[k]-'A']=true; } } } for (i=0;i<32;i++) { if (used[i]) { int count=0; char p[32]; int j; for (j=0;j<32;j++) { if (mat[i][j]) p[count++]=j; } if (!count) printf("%c has no intersections\n",i+'A'); else { printf("%c intersects with ",i+'A'); if (count==1) printf("%c\n",p[0]+'A'); else if (count==2) { printf("%c and %c\n",p[0]+'A',p[1]+'A'); } else { for (j=0;j