U
Ich hab dieses Problem auch mal lösen sollen... Evtl bringt dich der Quelltext ja ein Stückchen weiter - mir ist damals zumindest kein besserer Weg eingefallen - ich guck mal, ob ich noch paar Kommentare hinterlasse ^^
template <typename Tpt>
bool TriangleHits(const my::TTriangle<Tpt> &dreieck1, const my::TTriangle<Tpt> &dreieck2) //vorrausgesetzt, die beiden Dreiecke sind beides auch wirklich dreiecke und nicht nur eine Gerade - weiß zwar net mehr genau, wieso das so wichtig war, aber irgendwas war da ^^
{
typedef typename Tpt::ValueType valtype;
typedef Tpt point;
const size_t dimension = point::dimension;
typedef my::TVector <dimension, valtype> vector;
typedef my::TLine_Segment<point, vector> line_segment; //strecke
typedef my::TPlain <vector> plain;
plain E1 = my::GetPlainFromPoints <point, vector> ( dreieck1.GetA(), dreieck1.GetB(), dreieck1.GetC() ); //übers Kreuzprodukt ausrechnen und dann exception werfen, wenns 0 ist (also die vectoren linear abhängig sind)
line_segment g[3] = {
line_segment ( dreieck1.GetA(), vector (dreieck1.GetB()-dreieck1.GetA()) ),
line_segment ( dreieck1.GetB(), vector (dreieck1.GetC()-dreieck1.GetB()) ),
line_segment ( dreieck1.GetC(), vector (dreieck1.GetA()-dreieck1.GetC()) )
};
plain E2 = my::GetPlainFromPoints <point, vector> ( dreieck2.GetA(), dreieck2.GetB(), dreieck2.GetC() );
line_segment g2[3] = {
line_segment ( dreieck2.GetA(), vector (dreieck2.GetB()-dreieck2.GetA()) ),
line_segment ( dreieck2.GetB(), vector (dreieck2.GetC()-dreieck2.GetB()) ),
line_segment ( dreieck2.GetC(), vector (dreieck2.GetA()-dreieck2.GetC()) )
};
for(size_t i(0); i != 3; ++i)
{
math::intersection::result res = math::intersects <plain, line_segment, point> (E2, g[i]);
if (res == math::intersection::yes || res == math::intersection::contains) //schneiden sich oder sind identisch
{
for(size_t j(0); j != 3; ++j)
{
res = math::intersects <plain, line_segment, point> (E1, g2[j]);
if (res == math::intersection::yes || res == math::intersection::contains)
return true;
}
}
}
return false;
}
Kann dir zwar nicht mehr alles ganz genau ausm Kopf erklären, aber wenn du Fragen hast, könnte ich noch mal überlegen und ggf. versuchen zu erklären ^^
Ums Zusammenzufassen:
Es reicht nicht, zu überprüfen, ob sich die beiden Ebenen schneiden...
bb