Suchergebnisse
Suchergebnisse 1-17 von insgesamt 17.
testen ob und wo eine linie eine ebene schneidet nun wird diese ebene noch auf ein dreieck begrenzt
hehe, dacht ich mir auch als ich das sah
okay, hab das nun mal bissl überarbeitet, nu wird immerhin erkannt, wenn die linie genau auf der eben liegt, also start und endpunkt der linien den gleichen z wert haben, wie meine ebene dazu bemerke man mein geiles if: Quellcode 1 if(s<0.0f && s>0.0f)
naja, laut dem tut steht da: Zitat Die Funktion LineHitsPlane berechnet, ob eine Strecke eine Ebene schneidet. LineHitsPlane heißt bei mir nur CollisionLine_Plane
Quellcode 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 bool CollisionLine_Plane(Linie line, Plane plane, Vector &sp) { Vector LineDir; float Denominator, s; LineDir.SetV(line.GetV2()-line.GetV1()); Denominator=plane.GetA()*LineDir.GetX()+ plane.GetB()*LineDir.GetY()+ plane.GetC()*LineDir.GetZ(); printf("%f\n", Denominator); if(fabsf(Denominator)<0.0001f) { if(fabsf(line.GetV1X()*plane.GetA()+ line.GetV1Y()*plane.GetB()+ line.GetV1Z()*plane.GetC()+plane.Get...
jo, hab erst gerade mitbekommen, das a, b und c die 3 koords des 3d-vektors vN, also der normalen sind also muss doch n bug in der fnkt sein, die testet, ob ich ne ebene schneide :-/
okay, hab mal bissl durchgeguckt und meine PlaneFromPoints funktion in die richtung geändert: Quellcode 1 2 3 4 5 6 7 8 9 10 11 12 Plane PlaneFromPoints(Vector& v1, Vector& v2, Vector& v3) { // Testwerte dreieck ABC (v1, v2, v3) Plane p; // v1(0,0,90) v2(0,2,90) v3(2,0,90) p.vN.SetV(v1.CrossProduct(v3-v2, v1-v2)); // vN.x=0 vN.y=0 vN.z=-4 p.vN.SetV(p.vN.NormNormalize()); // vN.x=0 vN.y=0 vN.z=-1 a=p.vN.GetX(); // 0.0f b=p.vN.GetY(); // 0.0f c=p.vN.GetZ(); // -1.0f p.SetD(-(v1.GetX()*p.GetB() + v...
ich gebe die werte nicht aus aber wenn ich weiß das meine strecke AB A(2,2,80) und B(2,2,83) ist und meine ebene quasi auf z=90 ist kann keine kollision vorhanden sien ein true wird trotzdem zurück gegeben :-/
aber irgendwie stimmt da was noch nicht! ich übergebe nun an PlaneFromPoints die vektoren v1(0,0,90), v2(0,2,90) und v3(2,0,90) das wäre n dreieck, und die ebene geht ja nun von oben nach unten nun kommt in der funktion, laut tut, das ich rechnen muss, mit plane.a, plane.b und plane.c ka, hab da nun einfach die koords der normal normalisierten genpmmen, quasi plane.vN.x, plane.vN.y und plane.vN.z aber das haut vorne und hinten nciht hin, da immer ne kollision erkannt wird, auch wenn die zu teste...
ne das krasse is, das eg schon alle funktionen da waren, bis auf Normnormalize, da hats wohl dann gehangen
Also doch so: Quellcode 1 2 3 4 5 6 7 8 Plane PlaneFromPoints(Vector& v1, Vector& v2, Vector& v3) { Plane temp; temp.vN.CrossProduct(v3-v2, v1-v2); temp.vN.NormNormalize(); temp.SetD(-(v1.GetX()*vN.GetX() + v1.GetY()*vN.GetY() + v1.GetZ()*vN.GetZ())); return temp; } hier die zusätzlichen funktionen, damits keine missverständnisse gibt: Quellcode 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 Vector vN; float fD; void SetD(float v) { fD=v; } Vector CrossProduct(Vector &v1, Vector &v2) { Vector resu...
also ich komm da echt nciht dahinter. ein Plane ist ne ebene, mit unbegrenzten maßen. lediglich ne richtung hat sie ja, oder!? also, z.b. v(0,1,0) müsste mir ne ebene geben, die geraden von unten nach oben geht!? die funktion zum erstellen einer ebene ist ja: Quellcode 1 2 3 4 5 6 7 8 9 10 11 12 13 14 Plane PlaneFromPoints(const Vector3D& v1, // Die drei Punkte const Vector3D& v2, const Vector3D& v3) { Plane p; // Normalenvektor durch Kreuzprodukt berechnen und eintragen p.n = Vector3D_Cross(v3 ...
naja, ich versuchs nach der gezeigten frmel zu machen, sonst peil ich nix. aber kanns sein, seh ich grad, das d errechnet wird durch: Quellcode 1 2 3 4 5 6 vN <-- NormalisierterVector Plane::PlaneFromPoints(Vector &v) { Plane temp; temp.SetD(v.x*vN.x+v.y*vN.y+v.z*vN.z); }
also ist plane wirlich nur mit v und d definiert v nun also das kreuzprodukt von (C-B x A-B) okay, soweit so gut, aber das mti dem d raffe ich irgendwie noch garnet und irgendwie kann das doch och net alles in der struktur oder klasse sein. im tutorial steht die zuweisung ja mit: Quellcode 1 p.d = -(v1.x * p.a + v1.y * p.b + v1.z * p.c); soweit klar, d ist n float wert, das is och noch okay. v1 ist der ortsvektor von..einem der 3 Punkte die an plane übergeben werden. die ebene is aufs dreieck AB...
Woltle grad das tutorial machen zum thehama Strecke und Ebene und fand nun den Datentyp Plane da. Aus was besteht der, bzw wie is er angelgt? im forum hier fand ich die struktur struct PLANE { Vector v; float d; }; aber da begreife ich den zusammenhang nicht recht Vector v soll ja wohl die 3 eckpunkte der dreiecksebene ABC sein, oder? also wäs Vector v[3]; oder? und was hat das d da zu suchen? vllt kann mir ja jemand "schnell" weiterhelfen, würd mich freuen!
momentan ist er: C-/C++-Quelltext 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 bool CollisionLine_Line(LINE line1, LINE line2, VECTOR_XYZ *sp) { VECTOR_XY KollPoint; bool KoolX =false; bool KoolY=false; float s, t; // test für 2D ablauf -> 3D-Vektoren in 2D umwandeln VECTOR_XY A, B, C, D; make2Dvector(A, line1.v1); make2Dvector(B, line1.v2); make2Dvector(C, line2.v1); make2Dvector(D, line2.v2); ...
Hi. habe probleme mit der kollisionserkennung von 2 linien, in 3d. bin das tutorial auf http://www.scherfgen-software.net/ durchgegangen, aber da kommen falsche werte raus! ich hab zwar schon eine funktion zum errechnen des schnittpunktes, in 2D, aber da es, meiner meinung nach, sehr rechenaufwendig ist, wollte ich es verbessern. auch weiß ich bei meiner momentanen funktion nicht, wie ich sei auf 3D erweitern kann. kann mir vllt jemand weiterhelfen?