Fetstil Fetstil Kursiv Understrykning linje färgläggning tabellverk Punktlista Nummerlista Vänster Centrerat högerställt Utfyllt Länk Bild htmlmode
  • Forum & Blog
    • Forum - översikt
      • .Net
        • asp.net generellt
        • c#
        • vb.net
        • f#
        • silverlight
        • microsoft surface
        • visual studio .net
      • databaser
        • sql-server
        • databaser
        • access
        • mysql
      • mjukvara klient
        • datorer och komponenter
        • nätverk, lan/wan
        • operativsystem
        • programvaror
        • säkerhet, inställningar
        • windows server
        • allmänt
        • crystal reports
        • exchange/outlook
        • microsoft office
      • mjukvara server
        • active directory
        • biztalk
        • exchange
        • linux
        • sharepoint
        • webbservers
        • sql server
      • appar (win/mobil)
      • programspråk
        • c++
        • delphi
        • java
        • quick basic
        • visual basic
      • scripting
        • asp 3.0
        • flash actionscript
        • html css
        • javascript
        • php
        • regular expresssion
        • xml
      • spel och grafik
        • DirectX
        • Spel och grafik
      • ledning
        • Arkitektur
        • Systemutveckling
        • krav och test
        • projektledning
        • ledningsfrågor
      • vb-sektioner
        • activeX
        • windows api
        • elektronik
        • internet
        • komponenter
        • nätverk
        • operativsystem
      • övriga forum
        • arbete karriär
        • erbjuda uppdrag och tjänster
        • juridiska frågor
        • köp och sälj
        • matematik och fysik
        • intern information
        • skrivklåda
        • webb-operatörer
    • Posta inlägg i forumet
    • Chatta med andra
  • Konto
    • Medlemssida
    • Byta lösenord
    • Bli bonsumedlem
    • iMail
  • Material
    • Tips & tricks
    • Artiklar
    • Programarkiv
  • JOBB
  • Student
    • Studentlicenser
  • KONTAKT
    • Om pellesoft
    • Grundare
    • Kontakta oss
    • Annonsering
    • Partners
    • Felanmälan
  • Logga in

Hem / Forum översikt / inlägg

Posta nytt inlägg


Fysikmotor, rotation

Postades av 2007-04-11 02:34:16 - Marcus Johansson, i forum spel/grafik, Tråden har 12 Kommentarer och lästs av 2590 personer

Gör en simpel fysikmotor i C#.NET men kan inte klura något bra sätt att räkna ut hur mycket av en impuls som skall gå till rotation, resten går till "vanlig" hastighet. Vilka variabler skall man ta hänsyn till?

Har någon ett bra sätt att ta reda på vilket håll objekten skall rotera så är det också välkommet.


Svara

Sv: Fysikmotor, rotation

Postades av 2007-04-11 13:03:22 - Niklas Jansson

Spontant tror jag du får använda angreppspunkten (eller angreppslinjen om du har ett stelt objekt -- normalfallet) och trixa lite med tröghetsmomentet. Du måste utöver hastighet och position ha alla rotationer och hela rörelsemängdsmomentet sparat för varje objekt.


Svara

Sv:Fysikmotor, rotation

Postades av 2007-04-11 18:42:15 - Marcus Johansson

Jag har byggt upp hela fysikmotorn genom att lägga till en feature i taget.

När jag skulle lägga till rotation blev det väldigt många frågor som behövde svar samtidigt. En svår grej är att man måste få det balanserat, alltså att jag inte skapar eller tar bort energi.

Vid en kollision så ska jag:

1. Räkna in rotationen som ett bidrag till resultatet. För att göra detta så räknar jag helt enkelt ut vilken hastighet som rotationen har i kollisionspunkten och lägger på detta på den "vanliga" hastigheten.

2.Räkna ut den resulterande rotationen. Det är här the shit hits the fan. För att räkna ut hur stor del av impulsen som ska gå till rotation så kollar jag vinkeln mellan impulsen och masscentrat på de båda polygonerna som kolliderar. Desto större vinkel, desto större del av impulsen går till rotation.

Grejen är att jag hittils "kommit på" allt själv så det är bättre jag får bättre förståelse än att jag hittar någon text där det står exakt hur man gör, eftersom jag kanske inte gjort resten likadant.


Svara

Sv: Fysikmotor, rotation

Postades av 2007-04-12 17:05:05 - Niklas Jansson

Rotation _är_ svårt, och det är inte helt sannolikt att man gör rätt på första försöket. Betänk att du har tre olika rotationer. Det är till exempel avgörande i vilken ordning du applicerar dem.

Vad jag definitivt kan säga är att du måste ha tröghetsmomentet för att få en korrekt rotation. Det är relaterat till avståndet från medelpunkten. Jag blir lite skeptisk när du säger att du "kan ha gjort det på ett annat sätt". Det ska inte spela någon roll om du verkligen baserar det på korrekta fysiska lagar. Principen är:
1. Ta fram punkten eller linjen som kraften verkar på. Det verkar du ha fixat.
2. Ta fram tröghetsmomentet utifrån den punkten.
3. Ta fram den momentana kraften och ur den, det momentana momentet. Detta översätter du nog då till en impuls och ett impulsmoment (är det verkligen rätt ord?), där du låter impulsen verka på rörelsemängd, och impulsmomentet på rotationshastigheten.

Vad du får i det momentana fallet är ju
F = m a
och
L = I d_omega/d_t


Svara

Sv:Fysikmotor, rotation

Postades av 2007-04-12 21:47:34 - Marcus Johansson

Jag var osäker på impulsmomentet på rotationshastigheten och därför tog jag fram ett annat sätt att lösa det på. Nämligen att räkna ut hastigheten som rotationen bidrar till och låtsas att det är en del av objektets "vanliga" hastighet, och just nu verkar det fungera.

Mitt stora problem hittils var att ta reda på vilken resulterande rotation som, i detta fallet, polygonen skulle erhålla. Såhär löste jag det iallafall:

        public static float ComputeRotationOsuus(PointF Impulse, PointF PointOfCollision, PointF CenterOfMass)
        {
            float collisionToCenterOfMassAngle = Angle(PointOfCollision, CenterOfMass);
            float directionOfImpulse = Angle(Impulse);
            return -(float)Math.Sin(directionOfImpulse - collisionToCenterOfMassAngle);
        }


Väldigt irriterande att så lite kod var det som gav "önskat" resultat. Angle är bara en funktion som ger vinkeln mellan två punkter. Denna funktionen ger bara hur stor del av impulsen som ska gå till rotation, och även vilket håll rotationen skall vara riktad åt.

Det jag nu arbetar på är att få alla impulser att få exakt rätt storlek. Det återstår att se om det fungerar med min metod.


Svara

Sv: Fysikmotor, rotation

Postades av 2007-04-12 23:58:25 - Oskar Johansson

Bara en liten, liten fundering från min sida: Jag funderar på om du inte borde wrappa dina anrop till trigonometriska funktioner, utifall att du någon gång i framtiden ska köra en cache på de anropen då de är ganska beräkningsintensiva för live-körning


Svara

Sv:Fysikmotor, rotation

Postades av 2007-04-15 00:00:20 - Marcus Johansson

Hur menar du nu?


Svara

Sv: Fysikmotor, rotation

Postades av 2007-04-15 13:42:49 - Oskar Johansson

Istället för att anropa Math.Sin så borde du ha ett eget bibliotek, och då anropa t.ex. MyMath.Sin istället. I nuläget gör du i MyMath.Sin bara så att den funktionen anropar vanliga Math.Sin.

Om/när det här sedan används ännu mer så kan man tänka sig att en stor mängd saker ska beräknas, och då kommer Math.Sin relativt sett vara rätt tungkört. Då kan du väldigt enkelt i din MyMath.Sin-funktion göra om så att du avrundar indatan och sedan plockar ut ett cachat värde ur en färdig array. Noggranheten sjunker lite, men å andra sidan, i t.ex. ett spel så är det inget som kommer att märkas. Däremot blir allting mycket snabbare när man kör det hela.

(Vanlig sinus/cosinus etc. är väldigt beräkningsintensiva funktioner, så att cacha och göra ungefärliga uträkningar är det enda vettiga i t.ex. 3d-spel för att de ska hänga med ordentligt..)


Svara

Sv:Fysikmotor, rotation

Postades av 2007-04-15 14:20:23 - Marcus Johansson

Jaha, men detta har jag redan provat, och det blev inte snabbare visade mina omfattande tester.


Svara

Sv:Fysikmotor, rotation

Postades av 2007-04-15 17:06:44 - Per Persson

Är du säker på att matteprocessorn utför avrundningen snabbare än den beräknar sinus?


Svara

Sv: Fysikmotor, rotation

Postades av 2007-04-15 18:17:54 - Oskar Johansson

Hm.. Har den färdiga instruktioner för sinus..? Fast hm.. Den är långsammare verkar det som ändå, även om det inte skiljer något enormt. Hur som haver, jag skulle iaf. wrappa det anropet så det finns möjlighet att tweaka utan att klura ut i efterhand vad som går att wrappa och inte.

(Att göra avrundning för att göra lookup i array är snabbt gjort, bara en bitshiftning + plocka ur värdet i teorin, iaf. sålänge värdena ligger mellan 0 och 2 pi)


Svara

Sv:Fysikmotor, rotation

Postades av 2007-04-16 11:35:37 - Per Persson

<b>Har den färdiga instruktioner för sinus..?</b>

Jovisst. Sinus och cosinus är så viktiga för grafik att de finns färdiga.


Svara

Sv: Fysikmotor, rotation

Postades av 2007-04-16 16:15:39 - Oskar Johansson

> Jovisst. Sinus och cosinus är så viktiga för grafik att de finns färdiga.

Kom fram till det när jag skrev föregående post, men om jag förstod rätt enligt vad jag hittade så är det relativt långsamma instruktioner det handlar om


Svara

Nyligen

  • 09:09 Vill du köpa medicinska tester?
  • 12:47 Vem beviljar assistansen – kommune
  • 14:17 Någon med erfarenhet av hemstädnin
  • 14:14 Bör man använda sig av en båtförme
  • 14:12 Finns det någon intressant hundblo
  • 14:25 Tips på verktyg för att skapa QR-k
  • 14:23 Tips på verktyg för att skapa QR-k
  • 20:52 Fungerer innskuddsbonuser egentlig

Sidor

  • Hem
  • Bli bonusmedlem
  • Läs artiklar
  • Chatta med andra
  • Sök och erbjud jobb
  • Kontakta oss
  • Studentlicenser
  • Skriv en artikel

Statistik

Antal besökare:
Antal medlemmar:
Antal inlägg:
Online:
På chatten:
4 569 159
27 952
271 704
950
0

Kontakta oss

Frågor runt konsultation, rådgivning, uppdrag, rekrytering, annonsering och övriga ärenden. Ring: 0730-88 22 24 | pelle@pellesoft.se

© 1986-2013 PelleSoft AB. Last Build 4.1.7169.18070 (2019-08-18 10:02:21) 4.0.30319.42000
  • Om
  • Kontakta
  • Regler
  • Cookies