Avatar billede mysitesolution Nybegynder
28. september 2006 - 23:46 Der er 7 kommentarer og
1 løsning

Fysik med C#

Hej...

Jeg har en metode som finder en position efter x antal tid for et objekt udfra start position, velocity (tror det hedder hastighedsacceleration på dansk?), tid, og kræfter (fx tyndgekræft).

Jeg vil så ændrer den fra:
public static Vector2 AngledThrow(Vector2 position, Vector2 velocity, float time, params Vector2[] forces)

til:

public static Vector2 AngledThrow(Vector2 position, ref Vector2 velocity, float time, params Vector2[] forces)

altså en referrence til velocity, da jeg gerne vil have den nye velocity efter x antal tid.
Avatar billede mysitesolution Nybegynder
28. september 2006 - 23:47 #1
min metode som den ser ud nu:

public static Vector2 AngledThrow(Vector2 position, Vector2 velocity, float time, params Vector2[] forces)
        {
            Vector2 totalForce = Vector2.Zero;

            for (int i = 0; i < forces.Length; i++)
                totalForce += forces[i];

            float timeSqr = time * time;

            Vector2 endPosition = position;

            endPosition.X += time * velocity.X + 0.5f * totalForce.X * timeSqr;
            endPosition.Y += time * velocity.Y + 0.5f * totalForce.Y * timeSqr;

            return endPosition;
        }
Avatar billede nielle Nybegynder
29. september 2006 - 07:16 #2
F.eks. sådan:

        public static Vector2 AngledThrow(Vector2 position, Vector2 velocity, float time, params Vector2[] forces)
        {
            Vector2 totalForce = Vector2.Zero;

            for (int i = 0; i < forces.Length; i++)
                totalForce += forces[i];

            float timeSqr = time * time;

            Vector2 endPosition = position;

            endPosition.X += time * velocity.X + 0.5f * totalForce.X * timeSqr;
            endPosition.Y += time * velocity.Y + 0.5f * totalForce.Y * timeSqr;

            velocity.X += time * totalForce.X;
            velocity.Y += time * totalForce.Y;

            return endPosition;
        }


Men hvorfor stoppe der?

Siden at du ref'er din velocity-vektor (ja, det er det engelske navn), hvorfor så ikke gøre det samme for poitionen?

        public static void AngledThrow(ref Vector2 position, Vector2 velocity, float time, params Vector2[] forces)
        {
            Vector2 totalForce = Vector2.Zero;

            for (int i = 0; i < forces.Length; i++)
                totalForce += forces[i];

            float timeSqr = time * time;

            position.X += time * velocity.X + 0.5f * totalForce.X * timeSqr;
            position.Y += time * velocity.Y + 0.5f * totalForce.Y * timeSqr;

            velocity.X += time * totalForce.X;
            velocity.Y += time * totalForce.Y;
        }

... og siden at du har bruger operator-overloading på din totalForce-vektor (for '+'), hvorfor så ikke gøre det samme med '*' sådan at du kan skrive:

        public static void AngledThrow(ref Vector2 position, Vector2 velocity, float time, params Vector2[] forces)
        {
            Vector2 totalForce = Vector2.Zero;

            for (int i = 0; i < forces.Length; i++)
                totalForce += forces[i];

            float timeSqr = time * time;

            position += time * velocity + 0.5f * totalForce * timeSqr;
            velocity += time * totalForce;
        }

Hint, man kan sagtens definere '*' mellem en Vektor2 og en double. :^)
Avatar billede mysitesolution Nybegynder
29. september 2006 - 08:48 #3
Danke, men du glemte ref :P... Har prøvet hele aftenen af hitte ud af hvad velocity kunne være, og det lykkedes mig næsten :D mit det halve af resultatet, men kunne ikke gange med 2 ;)

Foretrækker at den retunere positionen, men ja det med * havde jeg ikke lige tænkt over... tak! tester lige...
Avatar billede mysitesolution Nybegynder
29. september 2006 - 08:51 #4
eller nej, gør sgu begge ref, må være hurtigere...
Avatar billede nielle Nybegynder
29. september 2006 - 09:19 #5
Jeg tror nu ikke at det bliver specielt hurtigere, men det er lidt mere logisk konsistent at begge er ref i stedet for kun den ene.
Avatar billede mysitesolution Nybegynder
29. september 2006 - 14:25 #6
nej det er nok ikke meget, men i hvert fald virker det, så opret svar :)
Avatar billede nielle Nybegynder
29. september 2006 - 15:57 #7
Svar :^)
Avatar billede nielle Nybegynder
07. oktober 2006 - 09:31 #8
Så mangler du bare at acceptere svaret :^)
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
IT-kurser om Microsoft 365, sikkerhed, personlig vækst, udvikling, digital markedsføring, grafisk design, SAP og forretningsanalyse.

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