TEST_F(Vector2Test, dot_product_with_perp_vector_is_zero) { auto perp_vec = perp_vector(random_vector); EXPECT_EQ(0.0, dot_product(random_vector, perp_vec)); EXPECT_EQ(0.0, dot_product(perp_vec, random_vector)); }
TEST_F(Vector2Test, perpendicular_vector_is_zero_vector_for_zero_vector) { const Math::Vec2d vector; auto perp_vec = perp_vector(vector); EXPECT_EQ(0.0, perp_vec[0]); EXPECT_EQ(0.0, perp_vec[1]); }
/*-- Cat lbxgl;Entity;Query Form int LBXGL_Entity_QueryLine(LBXGL_Entity *ents, \ LBXGL_Entity **array, int max, \ double *start, double *end); Description Query entities which intersect with the line defined by start and end. array is used to hold the query results, and max is the maximal \ number of entities that can be placed in array (at least max+1 \ entries should exist within array to handle the trailing NULL). This returns the number of entities placed in array. --*/ int LBXGL_Entity_QueryLine(LBXGL_Entity *ents, LBXGL_Entity **array, int max, double *start, double *end) { LBXGL_Entity *cur; int i, j; double *corg, *cmins, *cmaxs; double crad, dx, dy, dz, dl, de; double dir[3], px[3], py[3]; double rorg[3]; for(i=0; i<3; i++)dir[i]=end[i]-start[i]; vecnorm(dir); perp_vector(dir, px); veccross(dir, px, py); for(i=0; i<3; i++)rorg[i]=end[i]-start[i]; de=vecdot(rorg, dir); cur=ents; i=0; while(cur && (i<max)) { corg=LBXGL_Entity_GetProperty(cur, "origin"); if(!corg) { cur=cur->next; continue; } for(j=0; j<3; j++)rorg[j]=corg[j]-start[j]; dx=vecdot(rorg, px); dy=vecdot(rorg, py); dz=vecdot(rorg, dir); dl=sqrt((dx*dx)+(dy*dy)); crad=LBXGL_Entity_GetRadius(cur); if((dl<=crad) && (dz>=0) && (dz<=de)) { array[i++]=cur; array[i]=NULL; } cur=cur->next; } return(i); }
TEST_F(Vector2Test, perpendicular_vector_of_non_zero_vector_is_non_zero) { auto perp_vec = perp_vector(random_vector); EXPECT_TRUE(perp_vec[0] != 0.0 || perp_vec[1] != 0.0); }
typename quan::meta::binary_op<quan::two_d::vect<T>, quan::meta::times, float>::type operator() (quan::two_d::vect<T> const & in) const { return in * m_cos_theta + perp_vector(in) * m_sin_theta; }