Kom ihåg mig?
Home Menu

Menu


Basbyte i koordinatsystem

Ämnesverktyg Visningsalternativ
Oläst 2007-11-23, 22:36 #1
kullervos avatar
kullervo kullervo är inte uppkopplad
Bara ett inlägg till!
 
Reg.datum: Dec 2003
Inlägg: 1 519
kullervo kullervo är inte uppkopplad
Bara ett inlägg till!
kullervos avatar
 
Reg.datum: Dec 2003
Inlägg: 1 519
Någon som kan peka mig i rätt riktning för att göra ett basbyte i ett koordinatsystem? Behöver implementera det i javacript så ett kodexempel i ett vanligt programmeringspråk vore kanon (dvs. inte Matlab, Lisp eller något annat obskyrt

5 poäng linjär algebra är inte mycket värt när man sålt böckerna.
kullervo är inte uppkopplad   Svara med citatSvara med citat
Oläst 2007-11-23, 23:00 #2
etanders etanders är inte uppkopplad
Medlem
 
Reg.datum: Dec 2004
Inlägg: 160
etanders etanders är inte uppkopplad
Medlem
 
Reg.datum: Dec 2004
Inlägg: 160
Kan du ge något exempel eller säga något om "före" och "efter"? 2D eller 3D? Är t.ex. polära koordinater inblandade eller är det bara kartesiska?
etanders är inte uppkopplad   Svara med citatSvara med citat
Oläst 2007-11-23, 23:36 #3
kullervos avatar
kullervo kullervo är inte uppkopplad
Bara ett inlägg till!
 
Reg.datum: Dec 2003
Inlägg: 1 519
kullervo kullervo är inte uppkopplad
Bara ett inlägg till!
kullervos avatar
 
Reg.datum: Dec 2003
Inlägg: 1 519
Jag har en rektangel som är roterad ett godtyckligt antal grader medurs i ett 2D-koordinatsystem. Det jag vill få fram är ett nytt koordinatsystem där rektangelns sidor är parallella med de nya koordinataxlarna. Dvs. om rektangeln är roterad 5 grader medurs från början kommer X-axeln i det nya koordinatsystemet också luta 5 grader medurs i förhållande till den ursrungliga X-axeln.

Stort tack på förhand!


Edit: Typiskt att jag sålde matteboken för 4 veckor sedan när den legat orörd i 5 år.
kullervo är inte uppkopplad   Svara med citatSvara med citat
Oläst 2007-11-24, 00:18 #4
etanders etanders är inte uppkopplad
Medlem
 
Reg.datum: Dec 2004
Inlägg: 160
etanders etanders är inte uppkopplad
Medlem
 
Reg.datum: Dec 2004
Inlägg: 160
Här är ett förslag. Har dock inte testat och kontrollerat, så jag kan förstås ha gjort någon grov miss...

Är för trött för att orka fundera ut något bra sätt att "leverera" resultatet från funktionen, men här är en liten skiss i alla fall.

x och y är koordinater i gamla koordinatsystemet, angle är vinkeln att rotera, xRotated och yRotated är de nya koordinaterna.

Kod:
function rotate(x, y, angle) {
   r = Math.sqrt(x*x + y*y);
   theta = Math.atan2(x, y) + angle;

   xRotated = r * Math.cos(theta);
   yRotated = r * Math.sin(theta);
}
etanders är inte uppkopplad   Svara med citatSvara med citat
Oläst 2007-11-24, 00:29 #5
etanders etanders är inte uppkopplad
Medlem
 
Reg.datum: Dec 2004
Inlägg: 160
etanders etanders är inte uppkopplad
Medlem
 
Reg.datum: Dec 2004
Inlägg: 160
Glömde bort det här med grader och radianer B)

Utgår från att Math-funktionerna räknar med radianer. En reviderad variant blir då

Kod:
function rotateX(x, y, degrees)
  r = Math.sqrt(x*x + y*y);
  radians = degrees * Math.PI / 180;
  theta = Math.atan2(x, y) + radians;
  return r * Math.cos(theta);
}

function rotateY(x, y, degrees)
  r = Math.sqrt(x*x + y*y);
  radians = degrees * Math.PI / 180;
  theta = Math.atan2(x, y) + radians;
  return r * Math.sin(theta);
}
Men som sagt, jag har inte testat alls...
etanders är inte uppkopplad   Svara med citatSvara med citat
Oläst 2007-11-24, 10:03 #6
etanders etanders är inte uppkopplad
Medlem
 
Reg.datum: Dec 2004
Inlägg: 160
etanders etanders är inte uppkopplad
Medlem
 
Reg.datum: Dec 2004
Inlägg: 160
Ser ut som att det jag slängde ihop igår kväll fungerar

Kod:
<html>
<head>
<title>Test</title>
</head>
<body>
<script>

function rotateX(x, y, degrees) {
  r = Math.sqrt(x*x + y*y);
  radians = degrees * Math.PI / 180;
  theta = Math.atan2(x, y) + radians;
  return r * Math.cos(theta);
}

function rotateY(x, y, degrees) {
  r = Math.sqrt(x*x + y*y);
  radians = degrees * Math.PI / 180;
  theta = Math.atan2(x, y) + radians;
  return r * Math.sin(theta);
}

angle = 30;
offset = 300;

document.write('<div style="position: absolute; top: ' + offset + 'px; left: ' + offset + 'px; color: gray;">*</div>');

top1 = offset + 100;
left1 = offset;
top2 = rotateY(left1 - offset, top1 - offset, angle) + offset;
left2 = rotateX(left1 - offset, top1 - offset, angle) + offset;
document.write('<div style="position: absolute; top: ' + top1 + 'px; left: ' + left1 + 'px; color: gray;">*</div>');
document.write('<div style="position: absolute; top: ' + top2 + 'px; left: ' + left2 + 'px; color: red;">*</div>');

top1 = offset - 100;
left1 = offset;
top2 = rotateY(left1 - offset, top1 - offset, angle) + offset;
left2 = rotateX(left1 - offset, top1 - offset, angle) + offset;
document.write('<div style="position: absolute; top: ' + top1 + 'px; left: ' + left1 + 'px; color: gray;">*</div>');
document.write('<div style="position: absolute; top: ' + top2 + 'px; left: ' + left2 + 'px; color: green;">*</div>');

top1 = offset;
left1 = offset + 100;
top2 = rotateY(left1 - offset, top1 - offset, angle) + offset;
left2 = rotateX(left1 - offset, top1 - offset, angle) + offset;
document.write('<div style="position: absolute; top: ' + top1 + 'px; left: ' + left1 + 'px; color: gray;">*</div>');
document.write('<div style="position: absolute; top: ' + top2 + 'px; left: ' + left2 + 'px; color: yellow;">*</div>');

top1 = offset;
left1 = offset - 100;
top2 = rotateY(left1 - offset, top1 - offset, angle) + offset;
left2 = rotateX(left1 - offset, top1 - offset, angle) + offset;
document.write('<div style="position: absolute; top: ' + top1 + 'px; left: ' + left1 + 'px; color: gray;">*</div>');
document.write('<div style="position: absolute; top: ' + top2 + 'px; left: ' + left2 + 'px; color: blue;">*</div>');

</script>

</body>
</html>
etanders är inte uppkopplad   Svara med citatSvara med citat
Svara


Aktiva användare som för närvarande tittar på det här ämnet: 1 (0 medlemmar och 1 gäster)
 

Regler för att posta
Du får inte posta nya ämnen
Du får inte posta svar
Du får inte posta bifogade filer
Du får inte redigera dina inlägg

BB-kod är
Smilies är
[IMG]-kod är
HTML-kod är av

Forumhopp


Alla tider är GMT +2. Klockan är nu 15:22.

Programvara från: vBulletin® Version 3.8.2
Copyright ©2000 - 2025, Jelsoft Enterprises Ltd.
Svensk översättning av: Anders Pettersson
 
Copyright © 2017