SAT Problem
-
könntest du mir da mal beispiel machen, irgendwie verstehe ich das nichtg.
ist die ebene dann die normale auf die die punkte des polyeders projiziert werden?
-
ich leite dich gerne an, erster schritt, mach eine funktion die eine ebenengleichung zurueckgibt.
-
okay das mit der 3d Normale?
OK ist gemacht
danke
-
also du meinst das, oder?
http://www.wynx.de/ButcherC/EuEHNF.htmEine Viereckige Ebene, die Senkrecht zur eigentlichen fläche des Polyeders ist?
-
Hätte ich sie posten sollen?
float ebenengleichung(Vector n,Vector q){ return n*q; } inline float operator * (const Vector &V)const {return (x*V.x) + (y*V.y); }
-
ich habe so meine zweifel dass das irgendwas mit ebenengleichung zu tun hat.
versuch von einem dreieck, also aus 3 vertices im 3D raum (also x y und z) die ebene zu errechnen.
-
ich google jetzt schon seit einer ewigkeit.
könntest du mir einen kleinen Tipp geben?
-
ich glaub ich habs fast,nur weiss ich nicht was hier s und t bedeuten.
http://home.arcor.de/penneweb/Abi2004/Eb3Pkt.html
-
ich bin mir nicht sicher, aber meinst du das?:
inline Vector operator - (const Vector &V) const { return Vector(x-V.x, y-V.y); } inline Vector operator * (float s) const { return Vector(x*s, y*s); } Vector ebengleichung(float r, float s,Vector a,Vector b,Vector C){ vector retval; retval=a+r*(b-a)+s*(c-a); }
Tut mir leid, dass ich so langsam bin, ich könnte den Teil von mir, der früher in Geometrie gepennt hat, den Schädel einschlagen.
-
alterbro schrieb:
ich google jetzt schon seit einer ewigkeit.
könntest du mir einen kleinen Tipp geben?z.b. bei google "plane equation triangle"
-
alterbro schrieb:
ich bin mir nicht sicher, aber meinst du das?
ebenengleichung ohne z? eine ebene existiert doch erst in 3d
Tut mir leid, dass ich so langsam bin, ich könnte den Teil von mir, der früher in Geometrie gepennt hat, den Schädel einschlagen.
statt euch zu kloppen, solltet ihr kolaborieren, wenn du es erstmal kannst, werden beide teile deines schaedels lachen wie einfach es doch ist
wenn ich es nur vorsagen wuerde, waere ich jedoch nur kumpel von der schlaefrigen seite
-
inline Vector operator - (const Vector &V) const { return Vector(x-V.x, y-V.y,z-V.z); }
inline Vector operator * (float s) const { return Vector(x*s, y*s,z*s); }Vector ebengleichung(float r, float s,Vector a,Vector b,Vector C){
vector retval;
retval=a+r*(b-a)+s*(c-a);}
sorry, die Inlines waren aus versehen aus dem alten SAT2d Projekt,jetzt richtig?statt euch zu kloppen, solltet ihr kolaborieren, wenn du es erstmal kannst, werden beide teile deines schaedels lachen wie einfach es doch ist
wollen wir das beste hoffen
wenn ich es nur vorsagen wuerde, waere ich jedoch nur kumpel von der schlaefrigen seite
Ohne Schleimen zu wollen...
Es stimmt, ich hätts vermutlich nur gecopypastet, und mich dann darüber aufgeregt, weshalb es nicht funktioniert.
Kann auch sein das ich das nie in der Schule gelernt hab.
-
ist es jetzt richtig?:
inline Vector operator - (const Vector &V) const { return Vector(x-V.x, y-V.y,z-V.z); } inline Vector operator * (float s) const { return Vector(x*s, y*s,z*s); } Vector ebengleichung(float r, float s,Vector a,Vector b,Vector C){ vector retval; retval=a+r*(b-a)+s*(c-a); }
-
das kompiliert?
naja, probiere es aus, alle 3 punkte die du angibst sollten einen abstand von 0 zur ebene haben (die funktion brauchst du auch fuer den 3d SAT test).
-
ok, ich habe keine Ahnung wie ich das rausfinden soll, oder wie ich rausfinden soll, wie ich das rausfinden soll.
ABer ich google mal.
-
was setzt ich nun für s und r ein?
-
so sieht die declaration aus
Plane ebengleichung(Vector Vertex0,Vector Vertex1,Vector Vertex2);
so sieht die test funktions declaration aus
float DistanzToPlane(Plane Ebene,Vector Punkt);
so testest du ob es stimmt
Plane TrianglePlane((Vector Vertex0,Vector Vertex1,Vector Vertex2) { const Plane P = ebengleichung(Vertex0,Vertex1,Vertex2); assert(fabsf(DistanzToPlane(P,Vertex0))<FLT_EPSILON); assert(fabsf(DistanzToPlane(P,Vertex1))<FLT_EPSILON); assert(fabsf(DistanzToPlane(P,Vertex2))<FLT_EPSILON); return P; }
den rest musst du wohl mit deiner schlaefrigen haelfte und google ausmachen
uebrigens, nur keine angst den editier button zu klicken, dafuer ist er da
-
...
-
ich glaub jjetzt hab ichs:
class ebenengleichung{ Vector3d first; Vector3d second; Vector3d third; char *getasstring(){ char string[128]; sprintf_s(string,"x=(%f%f%f)+s(%f%f%f)+r(%f%f%f)",first.x,first.y,first.z,second.x,second.y,second.z,third.x,third.y,third.z); return string; } ebenengleichung(Vector3d A,Vector3d B,Vector3d C){ this->first=A; this->second=B-A; this->third=C-A; } };
-
Ich hab mich ein wenig schlau gemacht.
Muss ich etwa immer zuerst mit den 3 Punkten eine Parametergleichung erstellen, aus direser dann eine Koordinatengleichung, und aus der Koordinatengleichung eine hessische Normalform?
Ist das für den Computer nicht etwas aufwendig?