>>535はなんか勘違いしてるね。
距離でやるならこんなとこか。
double distance2(double p1[], double p2[]){return (p1[0]-p2[0])*(p1[0]-p2[0])+(p1[1]-p2[1])*(p1[1]-p2[1]);}
int congruence(struct triangle *a, struct triangle *b){
 double da[3] = { distance2(a->p1,a->p2),distance2(a->p2,a->p3),distance2(a->p3,a->p1)};
 double db[3] = { distance2(b->p1,b->p2),distance2(b->p2,b->p3),distance2(b->p3,b->p1)};
 int i;
 for(i=0;i<3;++i) if(da[0]==db[i%3]&&da[1]==db[(i+1)%3]&&da[2]==db[(i+2)%3]) return 1;
 return 0;
}