예제 #1
0
파일: Math3d.cpp 프로젝트: AaronMK/Meega
	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);
	}
예제 #2
0
파일: Math3d.cpp 프로젝트: AaronMK/Meega
	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);
	}
예제 #3
0
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;
}