void QtDrawing3d::Look () // assign the viewing parameters { // begin // compute the tangent of the field of view half-angle double distance = 1; // compute the distance from the eye to the view plane_3d son_vector3d_t vpn,u,v,tmp,tmp1; son_point3d_t vrp; unit_vector3d(&eye, &vpn); tmp.v[0] = 0.0; tmp.v[1] = 1.0; tmp.v[2] = 0.0; cross_product_3d(&tmp, &vpn, &tmp1); unit_vector3d(&tmp1, &u); cross_product_3d(&vpn, &u, &v);// calculate the y' axis vector_3d mult_vector3d(&vpn, -distance); add_2_point3d(&eye, &vpn, &vrp); //viewing = ViewMatrix (u, v, vpn, vrp) * Perspective (distance); // set up the viewing transformation matrix_3d /* View matrix */ double dot = 0; m_modelViewMatrix.m[0][0] = u.v[0]; // assign the first column m_modelViewMatrix.m[1][0] = u.v[1]; m_modelViewMatrix.m[2][0] = u.v[2]; dot_product_3d(&vrp, &u, &dot); m_modelViewMatrix.m[3] [0] = -(dot); m_modelViewMatrix.m[0][1] = v.v[0]; // assign the second column m_modelViewMatrix.m[1][1] = v.v[1]; m_modelViewMatrix.m[2][1] = v.v[2]; dot_product_3d(&vrp, &v, &dot); m_modelViewMatrix.m[3][1] = -(dot); m_modelViewMatrix.m[0][2] = vpn.v[0]; // assign the third column m_modelViewMatrix.m[1][2] = vpn.v[1]; m_modelViewMatrix.m[2][2] = vpn.v[2]; dot_product_3d(&vrp, &vpn, &dot); m_modelViewMatrix.m[3][2] = -(dot); m_modelViewMatrix.m[0][3] = (0.0); // assign the fourth column m_modelViewMatrix.m[1][3] = (0.0); m_modelViewMatrix.m[2][3] = (0.0); m_modelViewMatrix.m[3][3] = (1.0); }
void ellipsiod2Axes(Ellipsoid3D *pellipsoid, Vect3D *paxis1, Vect3D *paxis2, Vect3D *paxis3) { double az1, az2, dip1, dip2; double cosd1, cosd2; /* strike angles positive CCW from East = 0 */ az1 = 90.0 - pellipsoid->az1; az2 = 90.0 - pellipsoid->az2; /* dip angles increasing downwards from horiz = 0 */ dip1 = -pellipsoid->dip1; dip2 = -pellipsoid->dip2; /* get 3D vector axes */ cosd1 = cos(DE2RA * pellipsoid->dip1); paxis1->x = cos(DE2RA * az1) * cosd1; paxis1->y = sin(DE2RA * az1) * cosd1; paxis1->z = -sin(DE2RA * dip1); cosd2 = cos(DE2RA * pellipsoid->dip2); paxis2->x = cos(DE2RA * az2) * cosd2; paxis2->y = sin(DE2RA * az2) * cosd2; paxis2->z = -sin(DE2RA * dip2); cross_product_3d( paxis1->x, paxis1->y, paxis1->z, paxis2->x, paxis2->y, paxis2->z, &paxis3->x, &paxis3->y, &paxis3->z); paxis1->x *= pellipsoid->len1; paxis1->y *= pellipsoid->len1; paxis1->z *= pellipsoid->len1; paxis2->x *= pellipsoid->len2; paxis2->y *= pellipsoid->len2; paxis2->z *= pellipsoid->len2; paxis3->x *= pellipsoid->len3; paxis3->y *= pellipsoid->len3; paxis3->z *= pellipsoid->len3; }