Ignore:
Timestamp:
01/03/07 01:36:35 (17 years ago)
Author:
mattausch
Message:
 
File:
1 edited

Legend:

Unmodified
Added
Removed
  • GTP/trunk/Lib/Vis/Preprocessing/src/Triangle3.cpp

    r1867 r1932  
    185185} 
    186186 
    187 } 
     187 
     188bool Triangle3::IntersectPlane(const Plane3 &plane,  
     189                                                           Vector3 &intersectA,  
     190                                                           Vector3 &intersectB) const 
     191{ 
     192        int side[3]; 
     193 
     194        // compute distance from plane 
     195        for (int i = 0; i < 3; ++ i) 
     196        { 
     197                side[i] = plane.Side(mVertices[i], Limits::Small); 
     198        } 
     199 
     200        ///// 
     201        // no intersection => early exit 
     202        if (((side[0] > 0) && (side[1] > 0) && (side[2] > 0)) || 
     203                ((side[0] < 0) && (side[1] < 0) && (side[2] < 0))) 
     204        { 
     205                return false; 
     206        } 
     207 
     208        ///////////// 
     209        // at least 2 triangle vertices lie in plane => early exit 
     210 
     211        for (int i = 0; i < 3; ++ i) 
     212        { 
     213                if (!side[i] && !side[(i + 1) % 3]) 
     214                { 
     215                        intersectA = mVertices[i]; 
     216                        intersectB = mVertices[(i + 1) % 3]; 
     217 
     218                        return true; 
     219                } 
     220        } 
     221 
     222        bool foundA = false; 
     223 
     224        // compute intersection points 
     225        for (int i = 0; i < 3; ++ i) 
     226        { 
     227                const int i_2 = (i + 1) % 3; 
     228 
     229                // intersection found 
     230                if ((side[i] >= 0) && (side[i_2] <= 0)) 
     231                {        
     232                        const float t = plane.FindT(mVertices[i], mVertices[i_2]); 
     233                         
     234                        if (!foundA) 
     235                        { 
     236                                intersectA = mVertices[i] + t * (mVertices[i_2] - mVertices[i]); 
     237                                foundA = true; 
     238                        } 
     239                        else 
     240                        { 
     241                                intersectB = mVertices[i] + t * (mVertices[i_2] - mVertices[i]); 
     242                                return true; 
     243                        } 
     244                } 
     245        } 
     246 
     247        cout << "warning! wrong triangle - plane intersection" << endl; 
     248        return false; // something went wrong! 
     249} 
     250 
     251 
     252} 
Note: See TracChangeset for help on using the changeset viewer.