void orthonormalBasis(vec4 *Forward, vec4 *Up, vec4 *Right) { assert( (*Forward)[3] != 0.0f && (*Up)[3] != 0.0f && (*Right)[3] != 0.0f ); *Forward /= (*Forward)[3]; *Right = crossR(*Up, *Forward); *Up = crossR(*Forward, *Right); }
void orthonormalBasis(vec3 *Forward, vec3 *Up, vec3 *Right) { *Right = crossR(*Up, *Forward); *Up = crossR(*Forward, *Right); *Up = normalize(*Up); *Forward = normalize(*Forward); *Right = normalize(*Right); }
int main(int argc, char **argv) { int a,b,c,w,h,i,j,k; double len; scanf("%d%d%d%d%d", &a, &b, &c, &w, &h); for(i = 0; i < a; i++) { scanf("%d%d", &xs[i], &ys[i]); } for(i = 0; i < b; i++) { scanf("%d%d%d%d", &ss[i], &ts[i], &us[i], &vs[i]); xs[a+c+i*4+0] = xs[a+c+i*4+1] = ss[i]; xs[a+c+i*4+2] = xs[a+c+i*4+3] = us[i]; ys[a+c+i*4+0] = ys[a+c+i*4+2] = ts[i]; ys[a+c+i*4+1] = ys[a+c+i*4+3] = vs[i]; } for(i = 0; i < c; i++) { scanf("%d%d", &xs[a+i], &ys[a+i]); } for(i = 0; i < a+c+b*4; i++) { for(j = 0; j < a+c+b*4; j++) { wf[i][j]=w*h; } } for(i = 0; i < a+c+b*4; i++) { for(j = 0; j < a+c+b*4; j++) { int flag = 1; wf[i][j]=w*h; for(k = 0; k < b; k++) { if(crossR(ss[k],ts[k],us[k],vs[k],xs[i],ys[i],xs[j],ys[j])) { flag = 0; } } if(flag) { wf[i][j] = hypot(xs[i]-xs[j],ys[i]-ys[j]); } if(i<a && j<a)wf[i][j]=0; } } for(k = 0; k < a+c+b*4; k++) { for(i = 0; i < a+c+b*4; i++) { for(j = 0; j < a+c+b*4; j++) { if(wf[i][j]>wf[i][k]+wf[k][j]) { wf[i][j]=wf[i][k]+wf[k][j]; } } } } len = 0; for(i = 0; i < c; i++) { len += wf[0][a+i]; } printf("%0.3f\n",len*2); return 0; }