Hallo occide,
ich hab mal was aus meinem „Quelltextfundus“
zusammengeschustert, um zu berechnen, ob
ein Punkt im Dreieck liegt. Methode 1) über
Vekktoroperationen, um festzustellen, ob der
Punkt jeweils auf der „selben Seite“ liegt wie
der „gegenüberliegende Punkt“ des Dreiecks
(bezüglich der zwei anderen Punkte); Methode 2)
über die Winkelsumme (~360° +/- Epsilon).
Die Methode 3) ist Deine Variante, auf die
Umgebung adaptiert:
#include
#include
#define PI 3.1415926535897932384626433832795
// Strukturen und Hilfsfunktionen
struct vec2 {
double x, y;
vec2() { x=y=0; }
vec2(double a, double b) { x=a, y=b; };
};
double vlen(const vec2& v) { return sqrt( v.x\*v.x + v.y\*v.y ); }
double dot2(const vec2& a, const vec2& b) { return a.x\*b.x + a.y\*b.y; }
double cross2(const vec2& a, const vec2& b) { return a.x\*b.y - a.y\*b.x; }
vec2 operator-(const vec2& a, const vec2& b) { return vec2(a.x-b.x, a.y-b.y); }
vec2 norm(const vec2& v)
{
double l = vlen(v);
l = (l = 0 ? true : false;
}
bool PointInTriangle\_Vec(vec2 p, vec2 t[])
{
return sameorient(p, t[0], t[1], t[2])
&& sameorient(p, t[1], t[0], t[2])
&& sameorient(p, t[2], t[0], t[1]) ? true : false;
}
bool PointInTriangle\_Trig(vec2 p, vec2 t[])
{
#define EPS 1.E-2
vec2 v1 = norm( p - t[0] );
vec2 v2 = norm( p - t[1] );
vec2 v3 = norm( p - t[2] );
double angsum = acos(dot2(v1,v2)) + acos(dot2(v2,v3)) + acos(dot2(v3,v1));
return fabs( angsum - 2.0\*PI ) Dreieck
double opx = p0.x - t[0].x;
double opz = p0.y - t[0].y;
//in 2 schritten da so lange formel...
double q = ((opz\*obz\*opx) / ocz) - ((obx\*opx\*opz) / ocx);
q /= (obz\*opx) - (obx\*opz);
double p = ( p0.x + (-t[0].x) + (-q\*ocx) ) / obx;
// p und q ausgeben
printf("p: %f q: %f\n", p, q);
if( (p \>= 0) && (p = 0) && (q = 0) && (p+q
Grüße
CMБ