28. november 2003 - 17:56Der er
56 kommentarer og 1 løsning
Matematik: Trekant
Her er lige en sjov lille opgave.
Tænk på en 3 dimensionel koordinat system! Som I alle ved er en trekant en plan, uanset hvordan dens 3 koordinater er definerede! Det vil sige, at hvis de tre koordinater er definerede således: X Y Z 1) -1, 0,-1 2) -1, 1, 1 3) +1, 2, 1
det vil betyde at den første har den laveste Y koordinat, da den er 0. Her så spørgsmålet! Hvor mange grader skal jeg så rotere min trekant (på X og Z akserne) for at alle koordinaternes Y er lig nul?
Jeg har altid kunnet, finde koordinater fra en rotation med en matrix beregning, men har aldrig kunnet gå modsat vej. Altså få rotationen ud fra koordinater med en Matrix beregning!
Jeg kan ikke lige helt gennemskue hvordan man skal gøre, men mon ikke det er muligt.
Det må være noget med at gange rotationsmatricerne på kordinatvektorerne og så lave lidt trylleri og dermed få vinklen.
Trylleriet ved jeg ikke lige hvordan man gør - så skal jeg først sætte mig ind i det. Det har jeg desværre ikke tid til, selvom det lyder som en spændende opgave (sandsynlighedsteori er 1. prioritet lige nu).
Hvis det er til brug i et enkelt tilfælde så tror jeg jeg ville lave et program der brute-forcede løsningen. Eller evt. vise trekanten via OpenGL og så bruge musen til at rotere til ønsket position er der - så vil man nok kunne gætte sig til løsnigen ud fra kordinaterne.. :-)
Jeg synes ikke, det er helt klart, hvad du mener med at rotere din trekant PÅ x og z-akserne.
Ville det ikke være OK at antage, at lade et af punkterne ligge i(0,0,0) og så blot fortælle, hvordan trekantens normalvektor skal drejes, mens dens endepunkt fastholdes i (0,0,0). Hvis den drejes, så den er parallel med y-aksen vil trekantens vinkelspidser have y-koordinaten 0.
Lad os antage, at normalvektoren har koordinaterne (a,b,c), hvor a, b, og c er positive. Vi drejer først alt en vinkel v om z-aksen. I xy-planen svarer det til at der drejes mod uret en vinkel v bestemt af tan(v)=a/b. Normalvektoren får så koordinaterne (
fortsat: Normalvektoren får så koordinaterne (0,sqrt(a^2+b^2),c) (sqrt står for kvadratrod) Normalvektoren drejes nu ned på y-aksen en vinkel w bestemt ved sin(w)=c/sqrt(a^2+b^2+c^2) (Der roteres omkring x-aksen). Nu vil normalvektoren peg ud ad y-aksen og trekanten ligger i xz-planen.
Normalvektoren bestemmes af ved at udregne krydsproduktet af to af trekantens sidevaktorer.
Lad A være (0,0,0), B er (1,2,-1) og C er (-1,1,-1) Så er normalvektoren n=AB x AC = (-1,2,3) Nu skal vi blot sørge for at dreje denne vektor, så den er parallel med y-aksen.
Hvis du rotere xy-planen en vinkel v med uret. v er bestemt ved tan(v)=1/2. Vinklen v er lig 26,565 grader. Derefter skal du rotere om x-aksen en vinkel w. sin(w)=3/sqrt(14) w=53,300grader.
Da jeg før skrev (a,b,c) mente jeg normalvektorens koordinater. Nu betegner A, B og C vinkelspidserne, og (a,b,c) er (-1,2,3) Denne vektor er vinkelret på AC og AC da du får nul hvis du udregner skalarprodukterne (-1,2,3)*(1,2,-1) og (-1,2,3)*(-1,1,-1)
Jeg udregnede krydsproduktet af vektorerne AB og AC. Hvis vi har to vektorer (a1, a2, a3) og (b1, b2, b3) er deres krydsprodukt givet ved (a2*b3-a3*b2, a3*b1-a1*b3, a1*b2-a2*b1) Denne vektor er vinkelret på de to vektorer
Normalvektoren (-1,2,3) projicres ned i xy-planen og giver så en vektor (-1,2). Hvis den afsættes fra (0,0) vil den pege ud i 2. kvadrant. Vinklen mellem vektoren og y-aksen er spids, og der gælder for denne vinkel tan(v)=1/2, sin(v)=1/sqrt/5)
Hvis du benytter nogle standardformler for rotation, så vil den vinkel du skal dreje om z-aksen normalt sættes til -26,565grader, da der drejes med uret. Tilsvarende når du drejer om x-aksen w=-53,300grader.
Selv tak, det var så lidt.Takker for point. Må jeg spørge, hvad der er, du skal bruge det til? Det lyder ikke til at være en sædvanlig matematikopgave. Nu har vi lavet udregningerne med konkrete tal, men det havde nok været mere naturligt at gøre det mere generelt. De to drejninger kan beskrives ved en 3 x 3 matrix, og når man så anvender den på de to vinkelspidser i trekanten, kan man få et par ligninger til at bestemme de to vinkler. Hvis jeg får tid, vil jeg komme med en sådan generel løsning.
Det lyder perfekt. Jeg vil give dig 200 points straight away!!! (Det kan bare ikke sige nej til vel :)) Det er til en skygge projektering i 3D. Det ville vaere perfekt med en Matrix!!!! :))
Her kommer så en mere generel løsning. Kan du bruge dette til noget, kan du jo give mig 50 point ekstra. Lad trekanten have vinkelspidserne (0,0,0), (a,b,c) og (d,e,f). Normalvektoren er så (n1, n2, n3), hvor n1=bf-ec, n2=dc-af, n3=ae-bd
Vi roterer nu vinklen v om z-aksen og derefter vinklen w om x-aksen. Den samlede rotation er da defineret ved en 3x3 matrix A:
(Jeg skriver rækkerne op. Når det ender inde på siden, du læser, vil det se forkert ud, er jeg bange for, men hver række står på en linie for sig)
For at finde ud af, hvor et punkt med kendt stedvektor havner ved rotationerne, skal vi blot multiplicere matricen A med stedvektoren som en søjle. Altså A gange stedvektoren som en søjlevektor. Det gøres for de to vinkelspidser (a,b,c) og (d,e,f). Det skal så gælde at y-koordinaten er nul i begge tilfælde. Det giver de to ligninger: acos(w)sin(v) + bcos(w)cos(v) - csin(v) =0 dcos(w)sin(v) + ecos(w)cos(v) - fsin(v) =0 Vi skal så blot bestemme v og w ud fra disse 2 ligninger. Vi regner løs, uden at lave forbehold (man må ikke dividere med 0). Så der vil være specielle tilfælde, hvor der kan komme problemer. Hver ligning divideres med cos(w). Den første multipliceres med f og den anden med c. Derefter trækes den nederste fra den øverste. Så fås: (af-cd)sin(v) + (bf-ce)cos(v)=0 og derfor gælder tan(v)=(bf-ce)/(af-ce)=n1/n2 så kan v bestemmes (men der er flere muligheder!!)
Den første ligning kan omskrives til asin(v)+bcos(v)-ctan(w)=0, og vi kender nu v. Så kan w findes ud fra ligningen tan(w)=(asin(v)+bcos(v))/c (Igen er der flere løsninger!!) Du kan prøve med dine tal ovenfor, og se at det giver det samme. Et eksempel: ligningen tan(x)=-1 har løsningern x=-45grader og x=135grader (hvis vi kun vil se på vinkler i intervallet -180grader til 180grader)
Hver ligning divideres med cos(w). Den første multipliceres med f og den anden med c. Derefter trækes den nederste fra den øverste. Så fås: (af-cd)sin(v) + (bf-ce)cos(v)=0 og derfor gælder tan(v)=(bf-ce)/(cd-af)=n1/n2 så kan v bestemmes (men der er flere muligheder!!)
Men den Matrix driller stadig lidt! Bliver man nodt til at kende rotationen for at lave den matrix du beskriver? For saa er der jo ikke meget fidus ved det!
Matricen kan bruges, når man kender v og w. Disse vinkler kan bestemmes, hvis man kræver at en bestemt trekant roteres, så y-koordinaterne bliver nul. Og det jeg har gjort her er at angive en generel metode til at bestemme v og w ud fra en given trekant, som man ønsker skal roteres, så y-koordianterne bliver 0.
Når man så kender v og w, kan matricen bruges til at bestemme, hvor andre punkter havner, nå man roterer.
Jeg opretter lige et nyt sporgsmaal... sa du kan faa dine velfortjente points! Jeg tror at det hele virker nu :) Det virker ogsaa hvis A og B koordinaterne er har et minus vaerdi - NICE!
Ja, det har jeg lagt maerke til :)) Jeg maa bare lave en foresporgsel om situationen er gaeldende inden jeg foretager beregningen, ellers skal der beregnes med et tal meget taet paa nul!
Pas på med et tal tæt på 0. Så kan der komme andre problemer ind. De resultater man får kan blive ubrugelige.
Synes godt om
Ny brugerNybegynder
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.