Avatar billede eldar Nybegynder
12. august 2003 - 00:00 Der 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.
Avatar billede inger47 Nybegynder
12. august 2003 - 00:04 #1
det står da helt sikkert i din formelsamling....:)
Avatar billede inger47 Nybegynder
12. august 2003 - 00:05 #2
.
Avatar billede eldar Nybegynder
12. august 2003 - 00:08 #3
hm, jeg har kun gennemført 2.g endnu..

3D kommer i 3g...
Avatar billede arne_v Ekspert
12. august 2003 - 08:03 #4
Du har at et 3D plan er giver ved:
  z = a*x + b*y + c

Du har 3 punkter:
  (x1,y1,z1)  (x2,y2,z2)  (x3,y3,z3)

Du kan derfor bestemme a, b og c da du har 3 ligninger med
3 ubkendte:
  z1 = a*x1 + b*y1 + c
  z2 = a*x2 + b*y2 + c
  z3 = a*x3 + b*y3 + c

Og så kan du beregne z for enhver kombination af x og y.
Avatar billede soreno Praktikant
12. august 2003 - 08:04 #5
Er det afstanden mellem en linie (grundlinien) og et punkt du ønsker ?
(jeg forstår ikke helt hvad du mener..)
Avatar billede tosssen Nybegynder
12. august 2003 - 09:47 #6
Mere generelt er et 3D plan gennem et punkt (x0, y0, z0) givet ved:

a*(x-x0) + b*(y-y0) + c*(z-z0) = 0

hvor (a,b,c) er normalvektor, dvs angiver en retning vinkelret på planet.

Hvis du så ønsker y svarende til koordinater x1 og z1, så skal denne bare isoleres fra:

a*(x1-x0) + b*(y-y0) + c*(z1-z0) = 0  <=>
b*(y-y0) = -a*(x1-x0) - c*(z1-z0)    <=>
y-y0 = -(a*(x1-x0) + c*(z1-z0))/b    <=>
y = -(a*(x1-x0) + c*(z1-z0))/b + y0

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.
Avatar billede nmh Nybegynder
12. august 2003 - 11:30 #7
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
Avatar billede tosssen Nybegynder
12. august 2003 - 11:37 #8
Ja så må mit indlæg vidst også være et svar ;-)
Avatar billede tosssen Nybegynder
12. august 2003 - 11:46 #9
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).
Avatar billede tosssen Nybegynder
12. august 2003 - 11:49 #10
Det nemmest for dig er nok bare at bruge formlerne uden at forstå dem - det skal nok komme efterhånden, som du bliver færdig med 3.g ;-)
Avatar billede tosssen Nybegynder
12. august 2003 - 11:59 #11
Givet de tre hjørner (p1, p2, p3), (q1, q2, q3), (r1, r2, r3)  og (x,z) vil følgende kodestump give dig y:

double a = (q2-p2)*(q3-r3) - (q3-p3)*(q2-r2);
double b = (q3-p3)*(q1-r1) - (q1-p1)*(q3-r3);
double c = (q1-p1)*(q2-r2) - (q2-p2)*(q1-r1);
double y = (a*(p1-x) + c*(p3-z))/b + p2;

Det er nok smart at gemme værdierne a, b og c til senere beregning af y ;-)
Avatar billede tosssen Nybegynder
12. august 2003 - 12:02 #12
Rettelse:

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;
}
Avatar billede eldar Nybegynder
13. august 2003 - 13:09 #13
also...

jeg har 3 punkter som jeg laver en trekant ud af. Jeg skal finde y på fladen i et givet x,z punkt...
Avatar billede eldar Nybegynder
13. august 2003 - 13:11 #14
ok. jeg prøver lige jeres forslag..
Avatar billede eldar Nybegynder
14. august 2003 - 13:22 #15
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.
Avatar billede tosssen Nybegynder
14. august 2003 - 13:36 #16
Det var så lidt! Jeg takker for points ;-)
Avatar billede Ny bruger Nybegynder

Din løsning...

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.

Loading billede Opret Preview
Kategori
Kurser inden for grundlæggende programmering

Log ind eller opret profil

Hov!

For at kunne deltage på Computerworld Eksperten skal du være logget ind.

Det er heldigvis nemt at oprette en bruger: Det tager to minutter og du kan vælge at bruge enten e-mail, Facebook eller Google som login.

Du kan også logge ind via nedenstående tjenester