Changeset View
Changeset View
Standalone View
Standalone View
tests/gtests/blenlib/BLI_math_geom_test.cc
| Context not available. | |||||
| TEST(math_geom, IsectPointPoly2DSimpleSquare) | TEST(math_geom, IsectPointPoly2DSimpleSquare) | ||||
| { | { | ||||
| float square[][2] = {{0.0f, 1.0f}, {-1.0f, 0.0f}, {0.0f, -1.0f}, {1.0f, 0.0f}}; | float square[][2] = {{0.0f, 1.0f}, {-1.0f, 0.0f}, {0.0f, -1.0f}, {1.0f, 0.0f}}, | ||||
| p_inside[1][2] = {{0.0f, 0.0f}}; | p_inside[1][2] = {{0.0f, 0.0f}}, | ||||
| p_outside[4][2] = {{-2.0f, 0.0f}, {2.0f, 0.0f}, {0.0f, -2.0f}, {0.0f, 2.0f}}; | p_outside[4][2] = {{-2.0f, 0.0f}, {2.0f, 0.0f}, {0.0f, -2.0f}, {0.0f, 2.0f}}; | ||||
| Context not available. | |||||
| } | } | ||||
| } | } | ||||
| TEST(math_geom, IsectPointTri2DManyTrianglesOutside) { | TEST(math_geom, IsectPointTri2DManyTrianglesOutside) | ||||
| { | |||||
| for(float x1 = 4.001f; x1 <= 12.0f; x1 += 2.71828f) for(float y1 = 0.001f; y1 <= 10.0f; y1 += 2.71828f) | for(float x1 = 4.001f; x1 <= 12.0f; x1 += 2.71828f) for(float y1 = 0.001f; y1 <= 10.0f; y1 += 2.71828f) | ||||
| for(float x2 = x1 + 0.001f; x2 <= 15.02f; x2 += 2.71828f) for(float y2 = 0.001f; y2 <= y2 - 3.1f; y2 += 2.71828f) | for(float x2 = x1 + 0.001f; x2 <= 15.02f; x2 += 2.71828f) for(float y2 = 0.001f; y2 <= y2 - 3.1f; y2 += 2.71828f) | ||||
| for(float w1 = 0.01f; w1 <= 0.999f; w1 += 0.113f) for(float w2 = 0.001f; w2 <= 1.0f - w1 - 0.0012; w2 += 0.1212f) | |||||
| { | { | ||||
| float a[2] = {0.0f, 0.0f}, | float a[2] = {0.0f, 0.0f}, | ||||
| b[2] = {x1, y1}, | b[2] = {x1, y1}, | ||||
| Context not available. | |||||
| EXPECT_EQ(0,isect_point_tri_v2(p, a, b, c)); | EXPECT_EQ(0,isect_point_tri_v2(p, a, b, c)); | ||||
| } | } | ||||
| } | } | ||||
| TEST(math_geom, InteprWeightsFace3DSingle) | |||||
| { | |||||
| float a[3] = {0.0f, 0.0f, 0.0f}, | |||||
| b[3] = {1.0f, 0.0f, 0.0f}, | |||||
| c[3] = {0.0f, 1.0f, 0.0f}, | |||||
| d[3] = {0.0f, 0.0f, 1.0f}, | |||||
| p[3] = {0.0f, 0.0f, 0.0f}, | |||||
| weights[4] = {0.0f, 0.0f, 0.0f}; | |||||
| interp_weights_face_v3(weights,a,b,c,d,p); | |||||
| EXPECT_NEAR(weights[0],1.0f, 0.000001f); | |||||
| EXPECT_NEAR(weights[1],0.0f, 0.000001f); | |||||
| EXPECT_NEAR(weights[2],0.0f, 0.000001f); | |||||
| EXPECT_NEAR(weights[3],0.0f, 0.000001f); | |||||
| } | |||||
| TEST(math_geom, InteprWeightsFace3DSingleWithNull) | |||||
| { | |||||
| float a[3] = {0.0f, 0.0f, 0.0f}, | |||||
| b[3] = {1.0f, 0.0f, 0.0f}, | |||||
| c[3] = {0.0f, 1.0f, 0.0f}, | |||||
| d[3] = {0.0f, 0.0f, 1.0f}, | |||||
| p[3] = {0.0f, 1.0f, 0.0f}, | |||||
| weights[4] = {0.0f, 0.0f, 0.0f}; | |||||
| interp_weights_face_v3(weights,a,b,c,d,p); | |||||
| EXPECT_NEAR(weights[0],0.0f, 0.000001f); | |||||
| EXPECT_NEAR(weights[1],0.0f, 0.000001f); | |||||
| EXPECT_NEAR(weights[2],1.0f, 0.000001f); | |||||
| EXPECT_NEAR(weights[3],0.0f, 0.000001f); | |||||
| } | |||||
| TEST(math_geom, InteprWeightsFace3DDouble) | |||||
| { | |||||
| float a[3] = {0.0f, 0.0f, 0.0f}, | |||||
| b[3] = {2.0f, 0.0f, 0.0f}, | |||||
| c[3] = {0.0f, 2.0f, 0.0f}, | |||||
| d[3] = {0.0f, 0.0f, 1.0f}, | |||||
| p[3] = {1.0f, 1.0f, 0.0f}, | |||||
| weights[4] = {0.0f, 0.0f, 0.0f}; | |||||
| interp_weights_face_v3(weights,a,b,c,d,p); | |||||
| EXPECT_NEAR(weights[0],0.0f, 0.000001f); | |||||
| EXPECT_NEAR(weights[1],0.5f, 0.000001f); | |||||
| EXPECT_NEAR(weights[2],0.5f, 0.000001f); | |||||
| EXPECT_NEAR(weights[3],0.0f, 0.000001f); | |||||
| } | |||||
| TEST(math_geom, InteprWeightsPoly2DSingle) | |||||
| { | |||||
| float v[][2] = {{0.0f, 0.0f}, | |||||
| {1.0f, 0.0f}, | |||||
| {0.0f, 1.0f}}, | |||||
| p[2] = {0.0f, 0.0f}, | |||||
| weights[3] = {0.0f, 0.0f, 0.0f}; | |||||
| interp_weights_poly_v2(weights,v,3,p); | |||||
| EXPECT_NEAR(weights[0],1.0f, 0.000001f); | |||||
| EXPECT_NEAR(weights[1],0.0f, 0.000001f); | |||||
| EXPECT_NEAR(weights[2],0.0f, 0.000001f); | |||||
| } | |||||
| TEST(math_geom, InteprWeightsPoly2DDouble) | |||||
| { | |||||
| float v[][2] = {{2.0f, 0.0f}, | |||||
| {0.0f, 2.0f}}, | |||||
| p[2] = {1.0f, 1.0f}, | |||||
| weights[2] = {0.0f, 0.0f}; | |||||
| interp_weights_poly_v2(weights,v,2,p); | |||||
| EXPECT_NEAR(weights[0],0.5f, 0.000001f); | |||||
| EXPECT_NEAR(weights[1],0.5f, 0.000001f); | |||||
| } | |||||
| TEST(math_geom, InteprWeightsPoly2DTriple) | |||||
| { | |||||
| float v[][2] = {{2.0f, 0.0f}, | |||||
| {0.0f, 2.0f}, | |||||
| {0.0f, 0.0f}}, | |||||
| p[2] = {0.5f, 0.5f}, | |||||
| weights[3] = {0.0f, 0.0f, 0.0f}; | |||||
| interp_weights_poly_v2(weights,v,3,p); | |||||
| EXPECT_NEAR(weights[0],0.25f, 0.000001f); | |||||
| EXPECT_NEAR(weights[1],0.25f, 0.000001f); | |||||
| EXPECT_NEAR(weights[2],0.5f, 0.000001f); | |||||
| } | |||||
| TEST(math_geom, InteprWeightsPoly2DVariousPolySomePoints) | |||||
| { | |||||
| float v[][2] = {{2.0f, 5.0f}, | |||||
| {3.3f, 1.2f}, | |||||
| {2.1f, 8.9f}, | |||||
| {3.6f, 5.4f}, | |||||
| {0.7f, 9.3f}}, | |||||
| point[][2] = {{7.3f, 1.5f}, | |||||
| {5.6f, 2.9f}, | |||||
| {-0.5f, -3.3f}, | |||||
| {11.5f, -0.5f}, | |||||
| {2.3f, -9.5f}}, | |||||
| weights[5] = {0.0f, 0.0f, 0.0f, 0.0f, 0.0f}; | |||||
| interp_weights_poly_v2(weights,v,5,point[0]); | |||||
| EXPECT_NEAR(weights[0]*v[0][0] + weights[1]*v[1][0] + weights[2]*v[2][0] + weights[3]*v[3][0] + weights[4]*v[4][0],point[0][0], 0.001f); | |||||
| EXPECT_NEAR(weights[0]*v[0][1] + weights[1]*v[1][1] + weights[2]*v[2][1] + weights[3]*v[3][1] + weights[4]*v[4][1],point[0][1], 0.001f); | |||||
| interp_weights_poly_v2(weights,v,5,point[1]); | |||||
| EXPECT_NEAR(weights[0]*v[0][0] + weights[1]*v[1][0] + weights[2]*v[2][0] + weights[3]*v[3][0] + weights[4]*v[4][0],point[1][0], 0.001f); | |||||
| EXPECT_NEAR(weights[0]*v[0][1] + weights[1]*v[1][1] + weights[2]*v[2][1] + weights[3]*v[3][1] + weights[4]*v[4][1],point[1][1], 0.001f); | |||||
| interp_weights_poly_v2(weights,v,5,point[2]); | |||||
| EXPECT_NEAR(weights[0]*v[0][0] + weights[1]*v[1][0] + weights[2]*v[2][0] + weights[3]*v[3][0] + weights[4]*v[4][0],point[2][0], 0.001f); | |||||
| EXPECT_NEAR(weights[0]*v[0][1] + weights[1]*v[1][1] + weights[2]*v[2][1] + weights[3]*v[3][1] + weights[4]*v[4][1],point[2][1], 0.001f); | |||||
| interp_weights_poly_v2(weights,v,5,point[3]); | |||||
| EXPECT_NEAR(weights[0]*v[0][0] + weights[1]*v[1][0] + weights[2]*v[2][0] + weights[3]*v[3][0] + weights[4]*v[4][0],point[3][0], 0.001f); | |||||
| EXPECT_NEAR(weights[0]*v[0][1] + weights[1]*v[1][1] + weights[2]*v[2][1] + weights[3]*v[3][1] + weights[4]*v[4][1],point[3][1], 0.001f); | |||||
| interp_weights_poly_v2(weights,v,5,point[4]); | |||||
| EXPECT_NEAR(weights[0]*v[0][0] + weights[1]*v[1][0] + weights[2]*v[2][0] + weights[3]*v[3][0] + weights[4]*v[4][0],point[4][0], 0.01f); /* that's sad */ | |||||
| EXPECT_NEAR(weights[0]*v[0][1] + weights[1]*v[1][1] + weights[2]*v[2][1] + weights[3]*v[3][1] + weights[4]*v[4][1],point[4][1], 0.01f); | |||||
| } | |||||
| TEST(math_geom, InteprWeightsPoly3DSimple) | |||||
| { | |||||
| float v[][3] = {{0.0f, 0.0f, 0.0f}, | |||||
| {0.0f, 0.0f, 0.1f}, | |||||
| {0.1f, 0.0f, 0.0f}, | |||||
| {0.0f, 0.1f, 0.0f}}, | |||||
| p[3] = {0.0f, 0.0f, 0.0f}, | |||||
| weights[4] = {0.0f, 0.0f, 0.0f}; | |||||
| interp_weights_poly_v3(weights,v,4,p); | |||||
| EXPECT_NEAR(weights[0],1.0f, 0.000001f); | |||||
| EXPECT_NEAR(weights[1],0.0f, 0.000001f); | |||||
| EXPECT_NEAR(weights[2],0.0f, 0.000001f); | |||||
| EXPECT_NEAR(weights[3],0.0f, 0.000001f); | |||||
| } | |||||
| TEST(math_geom, InteprWeightsPoly3DDouble) | |||||
| { | |||||
| float v[][3] = {{2.0f, 0.0f, 0.0f}, | |||||
| {0.0f, 2.0f, 0.0f}}, | |||||
| p[3] = {1.0f, 1.0f, 0.0f}, | |||||
| weights[2] = {0.0f, 0.0f}; | |||||
| interp_weights_poly_v3(weights,v,3,p); | |||||
| EXPECT_NEAR(weights[0],0.5f, 0.000001f); | |||||
| EXPECT_NEAR(weights[1],0.5f, 0.000001f); | |||||
| } | |||||
| TEST(math_geom, InteprWeightsPoly3DTriple) | |||||
| { | |||||
| float v[][3] = {{3.0f, 0.0f, 0.0f}, | |||||
| {0.0f, 3.0f, 0.0f}, | |||||
| {0.0f, 0.0f, 3.0f}}, | |||||
| p[3] = {1.0f, 1.0f, 1.0f}, | |||||
| weights[3] = {0.0f, 0.0f, 0.0f}; | |||||
| interp_weights_poly_v3(weights,v,3,p); | |||||
| EXPECT_NEAR(weights[0],0.333333f, 0.000001f); | |||||
| EXPECT_NEAR(weights[1],0.333333f, 0.000001f); | |||||
| EXPECT_NEAR(weights[2],0.333333f, 0.000001f); | |||||
| } | |||||
| TEST(math_geom, InteprWeightsPoly3DQuadruple) | |||||
| { | |||||
| float v[][3] = {{3.0f, 0.0f, 0.0f}, | |||||
| {0.0f, 3.0f, 0.0f}, | |||||
| {0.0f, 0.0f, 3.0f}, | |||||
| {0.0f, 0.0f, 0.0f},}, | |||||
| p[3] = {0.6f, 0.6f, 0.6f}, | |||||
| weights[4] = {0.0f, 0.0f, 0.0f, 0.0f}; | |||||
| interp_weights_poly_v3(weights,v,4,p); | |||||
| EXPECT_NEAR(weights[0]*v[0][0] + weights[1]*v[1][0] + weights[2]*v[2][0] + weights[3]*v[3][0],p[0], 0.04f); | |||||
| EXPECT_NEAR(weights[0]*v[0][1] + weights[1]*v[1][1] + weights[2]*v[2][1] + weights[3]*v[3][1],p[1], 0.04f); | |||||
| EXPECT_NEAR(weights[0]*v[0][2] + weights[1]*v[1][2] + weights[2]*v[2][2] + weights[3]*v[3][2],p[2], 0.04f); | |||||
| EXPECT_NEAR(weights[0],0.2f, 0.031f); | |||||
| EXPECT_NEAR(weights[1],0.2f, 0.031f); | |||||
| EXPECT_NEAR(weights[2],0.2f, 0.031f); | |||||
| EXPECT_NEAR(weights[3],0.4f, 0.031f); | |||||
| } | |||||
| Context not available. | |||||