12. august 2003 - 00:00Der er
15 kommentarer og 1 løsning
højden af et bestemt punkt
Ok...
forstill dig, at du har 3 punkter med 3 kordinater hvert (x,y,z.). Tegn en trekant mellem dem. nu skal jeg have højden /y) i et bestemt punkt(x,z) på denne trekant flade. hvordan finder jeg højden?
Jeg gider ikke sætte mig ned og finde ud af en formel, fordi jeg er ret sikker på, at den allerede findes.
Som du kan se er du nødt til at sikre dig at b!=0 inden beregningerne, men hvis b==0 så er trekanten vandret og alle y'er i den lig y0!
Lad os kalde trekantens hjørner (x0, y0, z0), (d, e, f), (g, h, i). Så kan a,b og c bestemmes således:
a = (e-y0)*(f-i) - (f-z0)*(e-h) b = (f-z0)*(d-g) - (d-x0)*(f-i) c = (d-x0)*(e-h) - (e-y0)*(d-g)
Nu skulle du være rustet til din opgave! Det eneste du muligvis mangler er at kunne bestemme hvorvidt de x1 og z1 værdier du bruger til at bestemme højde rent faktisk ligger inden for din oprindelige trekant. Jeg vil gerne vende tilbage med en mulig løsning hvis du mangler det.
Hvis de tre punkter hedder A(x1,y1,z1) B(x2,y2,z2) C(x3,y3,z3) skal du først finde planens ligning: Normalvektor n=AB x AC (krydsproduktet af de to vektorer AB og AC) Hvis n får koordinaterne (n1,n2,n3) bliver planens ligning: n1*x+n2*y+n3*z=n1*x1+n2*y1+n3*y1 nu skal du så blot bestemme y udtrykte ved x og z.
Et taleksempel A(1,2,3) B(2,5,1) C(3,2,1) AB=(2-1,5-2,1-3)=(1,3,-2) AC=(3-1,2-2,1-3)=(2,0,-2) n=AB x AC =(3*(-2)-0*(-2),2*(-2)-1*(-2),1*0-2*3)=(-6, -2,-6) Vi kan defor bruge (-6,-2,-6) som normalvektor eller i stedet(3,1,3). Planens ligning er nu: 3x + y + 3z = 14 Nu kan du så finde y som funktion af x og z: y = 14 - 3x -3z
For at finde y svarende til (x,z) behøver du altså kun en normalvektor til trekantens plan (dvs. (a,b,c) i mit indlæg) og et punkt som denne plan går gennem (fx et af trekantens hjørner).
double y, a, b, c; if (p2 == q2 && q2 ==r2) //Alle y'er er ens y = p2; else { a = (q2-p2)*(q3-r3) - (q3-p3)*(q2-r2); b = (q3-p3)*(q1-r1) - (q1-p1)*(q3-r3); c = (q1-p1)*(q2-r2) - (q2-p2)*(q1-r1); y = (a*(p1-x) + c*(p3-z))/b + p2; }
Jeg har nu studeret jeres forslag og jeg syntes, at "Tosssen" skal få pointerne for sin gode matmatiske besvarelse, det var lige præcis det jeg ledte efter. Mange gange tak.
Tilladte BB-code-tags: [b]fed[/b] [i]kursiv[/i] [u]understreget[/u] Web- og emailadresser omdannes automatisk til links. Der sættes "nofollow" på alle links.