test_point_inclusion.cpp
Go to the documentation of this file.
00001 /*********************************************************************
00002 * Software License Agreement (BSD License)
00003 * 
00004 *  Copyright (c) 2008, Willow Garage, Inc.
00005 *  All rights reserved.
00006 * 
00007 *  Redistribution and use in source and binary forms, with or without
00008 *  modification, are permitted provided that the following conditions
00009 *  are met:
00010 * 
00011 *   * Redistributions of source code must retain the above copyright
00012 *     notice, this list of conditions and the following disclaimer.
00013 *   * Redistributions in binary form must reproduce the above
00014 *     copyright notice, this list of conditions and the following
00015 *     disclaimer in the documentation and/or other materials provided
00016 *     with the distribution.
00017 *   * Neither the name of the Willow Garage nor the names of its
00018 *     contributors may be used to endorse or promote products derived
00019 *     from this software without specific prior written permission.
00020 * 
00021 *  THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS
00022 *  "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT
00023 *  LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS
00024 *  FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE
00025 *  COPYRIGHT OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT,
00026 *  INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING,
00027 *  BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES;
00028 *  LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER
00029 *  CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT
00030 *  LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN
00031 *  ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE
00032 *  POSSIBILITY OF SUCH DAMAGE.
00033 *********************************************************************/
00034 
00037 #include <geometric_shapes/bodies.h>
00038 #include <gtest/gtest.h>
00039 
00040 TEST(SpherePointContainment, SimpleInside)
00041 {
00042     shapes::Sphere shape(1.0);
00043     bodies::Body* sphere = new bodies::Sphere(&shape);
00044     sphere->setScale(1.05);
00045     bool contains = sphere->containsPoint(0,0,1.0);
00046     delete sphere;
00047     EXPECT_TRUE(contains);
00048 }
00049 
00050 TEST(SpherePointContainment, SimpleOutside)
00051 { 
00052     shapes::Sphere shape(1.0);
00053     bodies::Body* sphere = new bodies::Sphere(&shape);
00054     sphere->setScale(0.95);
00055     bool contains = sphere->containsPoint(0,0,1.0);
00056     delete sphere;
00057     EXPECT_FALSE(contains);
00058 }
00059 
00060 TEST(SpherePointContainment, ComplexInside)
00061 { 
00062     shapes::Sphere shape(1.0);
00063     bodies::Body* sphere = new bodies::Sphere(&shape);
00064     sphere->setScale(0.95);
00065     tf::Transform pose;
00066     pose.setIdentity();    
00067     pose.setOrigin(tf::Vector3(tfScalar(1),tfScalar(1),tfScalar(1)));
00068     sphere->setPose(pose);
00069     bool contains = sphere->containsPoint(0.5,1,1.0);
00070     delete sphere;
00071     EXPECT_TRUE(contains);
00072 }
00073 
00074 TEST(SpherePointContainment, ComplexOutside)
00075 {   
00076     shapes::Sphere shape(1.0);
00077     bodies::Body* sphere = new bodies::Sphere(&shape);
00078     sphere->setScale(0.95);
00079     tf::Transform pose;
00080     pose.setIdentity();    
00081     pose.setOrigin(tf::Vector3(tfScalar(1),tfScalar(1),tfScalar(1)));
00082     sphere->setPose(pose);
00083     bool contains = sphere->containsPoint(0.5,0.0,0.0);
00084     delete sphere;
00085     EXPECT_FALSE(contains);
00086 }
00087 
00088 TEST(SphereRayIntersection, SimpleRay1)
00089 {
00090     shapes::Sphere shape(1.0);
00091     bodies::Body* sphere = new bodies::Sphere(&shape);
00092     sphere->setScale(1.05);
00093 
00094     tf::Vector3 ray_o(5, 0, 0);
00095     tf::Vector3 ray_d(-1, 0, 0);
00096     std::vector<tf::Vector3> p;
00097     bool intersect = sphere->intersectsRay(ray_o, ray_d, &p);
00098     
00099     delete sphere;
00100     EXPECT_TRUE(intersect);
00101     EXPECT_EQ(2, (int)p.size());
00102     EXPECT_NEAR(p[0].x(), 1.05, 1e-12);
00103     EXPECT_NEAR(p[1].x(), -1.05, 1e-12);
00104 }
00105 
00106 TEST(SphereRayIntersection, SimpleRay2)
00107 {
00108     shapes::Sphere shape(1.0);
00109     bodies::Body* sphere = new bodies::Sphere(&shape);
00110     sphere->setScale(1.05);
00111 
00112     tf::Vector3 ray_o(5, 0, 0);
00113     tf::Vector3 ray_d(1, 0, 0);
00114     std::vector<tf::Vector3> p;
00115     bool intersect = sphere->intersectsRay(ray_o, ray_d, &p);
00116     
00117     delete sphere;
00118     EXPECT_FALSE(intersect);
00119     EXPECT_EQ(0, (int)p.size());
00120 }
00121 
00122 TEST(BoxPointContainment, SimpleInside)
00123 {    
00124     shapes::Box shape(1.0, 2.0, 3.0);
00125     bodies::Body* box = new bodies::Box(&shape);
00126     box->setScale(0.95);
00127     bool contains = box->containsPoint(0,0,1.0);
00128     delete box;
00129     EXPECT_TRUE(contains);
00130 }
00131 
00132 
00133 TEST(BoxPointContainment, SimpleOutside)
00134 {
00135     shapes::Box shape(1.0, 2.0, 3.0);
00136     bodies::Body* box = new bodies::Box(&shape);
00137     box->setScale(0.95);
00138     bool contains = box->containsPoint(0,0,3.0);
00139     delete box;
00140     EXPECT_FALSE(contains);
00141 }
00142 
00143 
00144 TEST(BoxPointContainment, ComplexInside)
00145 {  
00146     shapes::Box shape(1.0, 1.0, 1.0);
00147     bodies::Body* box = new bodies::Box(&shape);
00148     box->setScale(1.01);
00149     tf::Transform pose;
00150     pose.setIdentity();    
00151     pose.setOrigin(tf::Vector3(tfScalar(1),tfScalar(1),tfScalar(1)));
00152     tf::Quaternion quat(tf::Vector3(tfScalar(1), tfScalar(0), tfScalar(0)), M_PI/3.0);
00153     pose.setRotation(quat);
00154     box->setPose(pose);    
00155 
00156     bool contains = box->containsPoint(1.5,1.0,1.5);
00157     delete box;
00158     EXPECT_TRUE(contains);
00159 }
00160 
00161 TEST(BoxPointContainment, ComplexOutside)
00162 {    
00163     shapes::Box shape(1.0, 1.0, 1.0);
00164     bodies::Body* box = new bodies::Box(&shape);
00165     box->setScale(1.01);
00166     tf::Transform pose;
00167     pose.setIdentity();    
00168     pose.setOrigin(tf::Vector3(tfScalar(1),tfScalar(1),tfScalar(1)));
00169     tf::Quaternion quat(tf::Vector3(tfScalar(1), tfScalar(0), tfScalar(0)), M_PI/3.0);
00170     pose.setRotation(quat);
00171     box->setPose(pose);    
00172 
00173     bool contains = box->containsPoint(1.5,1.5,1.5);
00174     delete box;
00175     EXPECT_FALSE(contains);
00176 }
00177 
00178 TEST(BoxRayIntersection, SimpleRay1)
00179 {
00180     shapes::Box shape(1.0, 1.0, 3.0);
00181     bodies::Body* box = new bodies::Box(&shape);
00182     box->setScale(0.95);
00183     
00184     tf::Vector3 ray_o(10, 0.449, 0);
00185     tf::Vector3 ray_d(-1, 0, 0);
00186     std::vector<tf::Vector3> p;
00187     
00188     bool intersect = box->intersectsRay(ray_o, ray_d, &p);
00189     
00190     //    for (unsigned int i = 0; i < p.size() ; ++i)
00191     //  printf("intersection at %f, %f, %f\n", p[i].x(), p[i].y(), p[i].z());
00192     
00193     delete box;
00194     EXPECT_TRUE(intersect);
00195 }
00196 
00197 
00198 TEST(CylinderPointContainment, SimpleInside)
00199 {
00200     shapes::Cylinder shape(1.0, 4.0);
00201     bodies::Body* cylinder = new bodies::Cylinder(&shape);
00202     cylinder->setScale(1.05);
00203     bool contains = cylinder->containsPoint(0, 0, 2.0);
00204     delete cylinder;
00205     EXPECT_TRUE(contains);
00206 }
00207 
00208 
00209 TEST(CylinderPointContainment, SimpleOutside)
00210 {
00211     shapes::Cylinder shape(1.0, 4.0);
00212     bodies::Body* cylinder = new bodies::Cylinder(&shape);
00213     cylinder->setScale(0.95);
00214     bool contains = cylinder->containsPoint(0,0,2.0);
00215     delete cylinder;
00216     EXPECT_FALSE(contains);
00217 }
00218 
00219 TEST(CylinderPointContainment, CylinderPadding)
00220 {
00221   shapes::Cylinder shape(1.0, 4.0);
00222   bodies::Body* cylinder = new bodies::Cylinder(&shape);
00223   bool contains = cylinder->containsPoint(0,1.01,0);
00224   EXPECT_FALSE(contains);
00225   cylinder->setPadding(.02);
00226   contains = cylinder->containsPoint(0,1.01,0);
00227   EXPECT_TRUE(contains);
00228   cylinder->setPadding(0.0);
00229   bodies::BoundingSphere bsphere;
00230   cylinder->computeBoundingSphere(bsphere);
00231   EXPECT_TRUE(bsphere.radius > 2.0);
00232 }
00233 
00234 int main(int argc, char **argv)
00235 { 
00236     testing::InitGoogleTest(&argc, argv);
00237     return RUN_ALL_TESTS();
00238 }


geometric_shapes
Author(s): Ioan Sucan
autogenerated on Thu Dec 12 2013 11:08:55