28. maj 2007 - 13:26Der er
4 kommentarer og 2 løsninger
Udregning af path i 2D koordinatsystem
Hejsa Eksperter
Mangler lidt matematisk assistance...
Har et vindue på 1000x700 pixels. I vinduet har jeg et grafisk objekt (en cirkel) som er random placeret. Dette objekt skal gradvist bevæge sig ind til centrum af vinduet (500,350), således at hvis objektets placering er (700, 450) skal objektet vel bevæge sig dobbelt så hurtigt på X-aksen end på Y-aksen...
Hmmm - kan ikke rigtig få det til at spille, kan du finde problemet?
float A, b, x, y, newX, newY; private void TargetStearing() { x = 0f; y = 0f; A = (screenCenter.Y - target.Location.Y) / (screenCenter.X - target.Location.X); b = screenCenter.Y - A * screenCenter.X; if (Math.Abs(A) <= 1.0) { x--; y = A * x + b; } else { y--; x = y - b / A; } newX = target.Location.X + x; newY = target.Location.Y + y;
Hovsa, sådan her skulle det være skrevet... men det fungerer stadig ikke helt?
float A, float b, float x, float y; private void TargetStearing() { x = target.Location.X; y = target.Location.Y; A = (target.Location.Y - screenCenter.Y) / (target.Location.X - screenCenter.X); b = screenCenter.Y - A * screenCenter.X; if (Math.Abs(A) <= 1.0f) { x = x - 1.0f; y = A * x + b; } else { y = y - 1.0f; x = y - b / A; } target.Location = new Vector2(x, y); }
Det må du undskylde, jeg var lidt for hurtig - havde ikke papir og blyant.
Brug: A = (screenCenter.Y - target.Location.Y) / (screenCenter.X - target.Location.X);
Dette vil give dig koordinaterne til bevægelsen mellem de 2 punkter.
Jeg er ikke så stærk i C#, men kan give dig følegnde input:
x=target.Location.X Speed=(screenCenter.X-target.Location.X)/100 /* parameteren 100 ændres efter behov */ while x<>screenCenter.X do A = (screenCenter.Y - target.Location.Y) / (screenCenter.X - target.Location.X); b = screenCenter.Y - A * screenCenter.X; y=A*x+b /* Her skal du indsætte den funktion der flytter din cirkel til position (x,y) */ x=x+Speed If abs(x-screenCenter.X)<Speed Then x=screenCenter.X end while
Super - tak for hjælpen japping. Havde dog i mellemtiden lavet understående, da jeg troede du var gået kold ;-> Du skal dog have dine point for besværet.
Kold - nej, blev bare nød til at tage på skovtur med familien.
Jeg er altid frisk på en matematisk udfordring.
Takker for point.
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.