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


Plan emot plan kollision

Postades av 2007-01-13 16:29:03 - Mattias Frisk, i forum matte/fysik/beräkna, Tråden har 31 Kommentarer och lästs av 2311 personer

Hej,

Låt oss säga att vi har två plan (oändligt långa ytor i 3D rymd), jag vill kontrollera om de kolliderar och om de gör det vill jag få ut den "räta linjen" som bildas där planen kolliderar (planen är oändligt långa och bredda, så antingen har de oändligt många kolliderings punkter eller ingen).

Jag har tänkt att man kan dela upp de båda planen i två räta linjer var, te.x. den första så skapar man en rät linje av planets x,y värden och ignorerar z, och den andra räta linjen skapar man av z och y (se kod nedan) , kolliderar någon av dessa två räta linjer med det andra planets räta linjer är det en kollision. Allt jag behöver för att få ut den räta linjen är bara då två olika kollisions punkter vilket inte ska vara så svårt om denna metod fungerar

        private void CreatePlane(Vector3 p1, Vector3 p2, Vector3 p3)
        {
            // Ignore the Z depth on the first one
            Vector2 l1;
            Vector2 l1c;
            l1.X = p1.X - p3.X;
            l1.Y = p1.Y - p3.Y;
            l1c = l1;

            l1c.Normalize(); // Om x är 5 och y är 10 blir det istället x = 0,33 y = 0,66 osv.
            
        }


Jag undrar nu om denna metod verkligen fungerar?, och om det finns någon snabbare? (helst i C#).

Eftersom jag inte är så jätte bra på matte precis skulle jag uppskatta om ni inte postar länkar där te.x. Stephen Hawking har kommit på hur man snabbast fixar det med hjälp av rysk nobelpristagar matematik :).


Svara

Sv: Plan emot plan kollision

Postades av 2007-01-13 21:23:26 - Niklas Jansson

För det första har du tre olika fall;
1. Planen har samma vinklar men ligger ifrån varandra - inga lösningar.
2. Planen har samma vinklar och ligger på varandra - alla punkter på planen är lösningar.
3. De har olika vinklar - en linje är lösningarna.

Jag förstår mig inte riktigt på den metoden som du föreslår, i princip är det väldigt lätt att lösa.
Du har de båda planen uttryckta på något sätt; på parameterfri form, på parameterform, eller med en normalvektor och en position.

Det du gör är då att lösa ekvationerna som uppstår när du likställer punkter.
Ett väldigt enkelt sätt att lösa det på är att rotera och translatera båda planen så att ena av dem ligger i, säg, x=0-planet. Då är det lätt att hitta skärningspunkterna och sen translatera tillbaka.


Svara

Sv: Plan emot plan kollision

Postades av 2007-01-13 21:24:00 - Per Persson

Trodde först att det handlade om flygolyckor...

Två plan möts om de inte är parallella, dvs om de inte har samma normal.

Hur representerar du ett plan?


Svara

Sv:Plan emot plan kollision

Postades av 2007-01-13 23:34:03 - Lars Gottfridsson

bara lite kuriosa..............

I detta fall sätts 2 "två dimensionella" plan in i en rymd med ytterligare en dimension (3 dimensioner).
Vidare så bildas en oändlig linje (1 plan) såvida dessa "ytor" korsar varann?

Motsvarande gäller även om man transponerar ned allt en dimension:

2 "en dimensionella linjer" linjer i en 2-dimensionell värld resulterar vid en eventuell tangering
i en noll-dimensionell punkt!? no?



Svara

Sv: Plan emot plan kollision

Postades av 2007-01-14 09:33:50 - Lars Gottfridsson

Jag saknar lite uppgifter för att kunna förstå funktionen CreatePlane.

Hur ser typdeklarationen av Vector2 samt Vector3 ut?
Vad representerar medskickade p2 och varför används den aldrig?

Jag skulle vilja se formel-definitionerna av de båda planen.
Sen borde det vara relativt lätt att först hitta en skärningspunkt
om en sådan existerar(ej parallella plan), för att sen få ut en
definition på denna "3-dimensionella linje".


Svara

Sv: Plan emot plan kollision

Postades av 2007-01-14 11:20:08 - Per Persson

<b>Motsvarande gäller även om man transponerar ned allt en dimension</b>

Korrekt.

Snittet av två n-dimensionella "plan" inbäddade i ett (n+1)-dimensionellt rum är ett (n-1)-dimensionellt "plan".


Svara

Sv:Plan emot plan kollision

Postades av 2007-01-24 19:18:54 - Mattias Frisk

Jag repesenterar det med A,B,C,D där A,B,C är normalen för planen och D är avståndet ifrån origin. Niklas ditt svar gjorde mig inte mycket klokare, Det är rätt självklart att man ska hitta positioner ifrån båda planen där de är lika, frågan är hur man gör det.


Svara

Sv: Plan emot plan kollision

Postades av 2007-01-24 19:53:22 - Niklas Jansson

Ja, det var ju det jag förklarade...

Har inte tid att sätta upp ekvationerna just nu, men i princip är det ju bara det du ska göra. Bryt ut en variabel, sätt in den i en annan ekvation, så får du linjens utseende i ett plan. Sen använder du den utbrutna variabeln för att hitta dess värden.


Svara

Sv: Plan emot plan kollision

Postades av 2007-01-24 22:24:58 - Per Persson

Antag att de två planen ges av ekvationerna
a1 x + b1 y + c1 z = d1 (plan 1)
a2 x + b2 y + c2 z = d2 (plan 2)

Skärningslinjens projektion på xy-planet ges då av
(a1 c2 - a2 c1) x + (b1 c2 - b2 c1) y = c2 d1 - c1 d2

Denna kan parametriseras, t.ex. enligt
x = ( (b1 c2 - b2 c1) t + (b2 d1 - b1 d2) ) / (a1 b2 - a2 b1)
y = ( (a2 c1 - a1 c2) t + (a1 d2 - a2 d1) ) / (a1 b2 - a2 b1)
vilket ger
z = t

Observera att ovanstående formler endast fungerar om
1) c1 och c2 ej båda är 0
2) a1 b2 - a2 b1 != 0


Svara

Sv:Plan emot plan kollision

Postades av 2007-01-25 00:17:28 - Mattias Frisk

Ok, så för att skapa en rät linje av det hela använder jag helt enkelt bara två olika värden på t? (två punkter krävs för att skapa en rät linje, right?). När formlen inte fungerar är alternativ "1" då när de inte kolliderar alls och alternativ "2" är när de ligger ovanpå varandra?.


Svara

Sv: Plan emot plan kollision

Postades av 2007-01-25 01:45:42 - Per Persson

<b>Ok, så för att skapa en rät linje av det hela använder jag helt enkelt bara två olika värden på t? (två punkter krävs för att skapa en rät linje, right?).</b>

Så kan du göra. Annars har jag ju gett dig en parametrisering av linjen.


<b>När formlen inte fungerar är alternativ "1" då när de inte kolliderar alls och alternativ "2" är när de ligger ovanpå varandra?.</b>

Nej.

När villkor 1 inte är uppfyllt (dvs c1 = c2 = 0), är båda planen vertikala, och så även en eventuell skärningslinje. Projektionen av skärningslinjen blir då bara en punkt i xy-planet varför parametriseringen inte funkar.

När villkor 2 inte är uppfyllt (dvs a1 b2 - a2 b1 = 0), ligger planen så att skärningslinjen blir horisontell. Delen z = t i parametriseringen kommer då inte att fungera.

Dessa fall kan specialbehandlas.


Svara

Sv:Plan emot plan kollision

Postades av 2007-01-25 01:53:44 - Per Persson

<b>Specialfall 1</b>

Om c1 = c2 = 0 blir planens ekvationer
a1 x + b1 y = d1 (plan 1)
a2 x + b2 y = d2 (plan 2)

Lösningen till detta ekvationssystem är
x = (b2 d1 - b1 d2) / (a1 b2 - a2 b1)
y = (a1 d2 - a2 d1) / (a1 b2 - a2 b1)

Linjen kan därmed parametriseras genom ovanstående två formler för x och y samt z = t.

Vi ser att inte heller detta fall fungerar om a1 b2 - a2 b1 = 0, men då hamnar vi i fallet att planen är parallella och antingen saknar skärningslinje eller sammanfaller.


Svara

Sv:Plan emot plan kollision

Postades av 2007-01-25 02:37:19 - Per Persson

<b>Specialfall 2</b>

Skärningslinjen blir som sagt horisontell. Den hamnar på
z = (b2 d1 - b1 d2) / (b2 c1 - b1 c2)

x = t + d1 / a1
y = c1 ( b1 d2 - b2 d1 ) / ( b1 (b2 c1 - b1 c2) ) - a1 t / b1


Svara

Sv:Plan emot plan kollision

Postades av 2007-01-25 13:25:22 - Mattias Frisk

Man tackar så mycket för din tid och hjälp :). En grej jag inte riktigt kopplar dock, Hur kan jag använda "parametriseringen" för att få ut den räta linjen utan att använda två olika t värden?. Jag måste ju ha två vektorer för att bilda en rät linje, startpunkt och riktning?. Jag har bara läst upp till MaC så jag har aldrig någonsin hört om parametrisering.


Svara

Sv: Plan emot plan kollision

Postades av 2007-01-25 16:08:06 - Per Persson

En linje består av ett oändligt antal punkter. Du får fram olika punkter genom att ge t olika värden i parametriseringen och samtliga punkter i linjen kan nås på detta sätt.

Om ( x(t), y(t), z(t) ) är en parametrisering av en rät linje och du vill ha en startpunkt och en riktning, kan du få fram en startpunkt genom att sätta t = 0, och en riktning genom att derivera och sedan sätta t = 0: ( x'(t), y'(t), z'(t) ).


Svara

Sv:Plan emot plan kollision

Postades av 2007-01-25 18:22:58 - Mattias Frisk

Okej I get it. I andan av att ha snygg kod är det väl bäst att bara ha den icke-deriverade funktionen (även om att köra en icke-deriverad sen derivad är snabbare). Ska försöka implementera detta till kod om jag får några problem återkommer jag :-). Tack för hjälpen!

Edit: I specialfall ett säger du att de bara kolliderar på en punkt, hur är det möjligt när båda planen är oändligt långa i alla riktningar?


Svara

Sv: Plan emot plan kollision

Postades av 2007-01-25 19:18:36 - Per Persson

De kolliderar i en linje, men eftersom linjen är lodrät blir dess projektion ned på xy-planet bara en punkt.


Svara

Sv:Plan emot plan kollision

Postades av 2007-01-25 20:12:41 - Mattias Frisk

Okej!. Förstog dig nog lite fel, så fort jag såg ordet "punkt" blev jag lite spektisk.


Svara

Sv: Plan emot plan kollision

Postades av 2007-01-25 20:29:13 - Per Persson

"spektisk" :-D Får man vara skeptisk till den stavningen?


Svara

Sv:Plan emot plan kollision

Postades av 2007-01-25 21:18:42 - Mattias Frisk

<b> "spektisk" :-D Får man vara skeptisk till den stavningen? </b>

Tänker inte ens svara på den frågan :'(


Svara

Sv:Plan emot plan kollision

Postades av 2007-01-25 21:55:18 - Mattias Frisk

Får inte riktigt rätt på det nu, låt säga jag har följande plan:

Plan 1:
A: 1
B: 0
C: 0
D: 0,5

Plan 2:
A: 0
B: 0
C: -1
D: 0

Dem hamnar under specialfall två.
y = c1 ( b1 d2 - b2 d1 ) / ( b1 (b2 c1 - b1 c2) ) - a1 t / b1
skapar då en division med noll (t / B1)

z = (b2 d1 - b1 d2) / (b2 c1 - b1 c2)

Även här får vi en division med noll (B2 * C1 - B1 * C2) = 0


Svara

Sv: Plan emot plan kollision

Postades av 2007-01-25 22:11:21 - Per Persson

Det var nog ingen bra parametrisering jag hade hittat för specialfall 2.

I det aktuella fallet är Plan 1 vertikalt (beskrivs av x = 0.5) och Plan 2 är xy-planet (z = 0). Skärningslinjen mellan dessa ges av x = 0.5, y = t, z = 0.


http://www.nisus.se/archive/930920.html


Svara

Sv:Plan emot plan kollision

Postades av 2007-01-25 23:16:10 - Mattias Frisk

Jag behöver som sagt detta för ett program då det är viktigt att den kan räkna ut alla eventuella kombinationer. Du har ingen aning om en 100% fungerande metod?


Svara

Sv: Plan emot plan kollision

Postades av 2007-01-25 23:27:15 - Per Persson

Jag får nog ta en ny titt på Specialfall 2.


Svara

Sv: Plan emot plan kollision

Postades av 2007-01-26 11:12:21 - Niklas Jansson

Det är väl bara att göra samma härledning fast bryta ut x eller y istället. Det måste väl ändå täcka alla specialfall?


Svara

Sv:Plan emot plan kollision

Postades av 2007-01-27 01:09:06 - Per Persson

Typ en cyklisk permutation av (x, y, z)? Jo, jag har varit inne på det, men minns inte varför jag glömde bort det...


Svara

Sv: Plan emot plan kollision

Postades av 2007-01-27 02:02:18 - Niklas Jansson

Jepp, exakt vad jag menade. Rimligtvis täcker väl det in alla specialfall?


Svara

Sv:Plan emot plan kollision

Postades av 2007-01-27 19:44:47 - Per Persson

<b>Alternativ parametrisering</b>

Antag att de två planen ges av ekvationerna
a1 x + b1 y + c1 z = d1 (plan 1)
a2 x + b2 y + c2 z = d2 (plan 2)

Sätt
A = a1 c2 - a2 c1
B = b1 c2 - b2 c1
D = d1 c2 - d2 c1
A' = a1 d2 - a2 d1
B' = b1 d2 - b2 d1
K = a1 b2 - a2 b1

Då kan linjen parametriseras genom
x = (A D + B t) / (A^2 + B^2)
y = (B D - A t) / (A^2 + B^2)
z = ((A A' + B B') + K t) / (A^2 + B^2)

Nu får vi endast problem om A^2 + B^2 = 0, dvs om A = B = 0. Men detta innebär att vektorn (a1, b1, c1) är parallell med vektorn (a2, b2, c2), vilket innebär att planen är parallella och antingen saknar skärningslinje eller har oändligt många skärningslinjer.


Svara

Sv: Plan emot plan kollision

Postades av 2007-02-22 19:45:03 - Mattias Frisk

Testat din parametrisering ett tag nu och den fungerar perfekt :). Tack för hjälpen!.


Svara

Nyligen

  • 19:38 Rekommendera något intressant
  • 19:13 Международная перевозка грузов
  • 00:01 DL Van Tuning | Exclusive Body Kit
  • 12:08 Indian casino
  • 04:14 Vad finns det för kratomalternativ
  • 14:16 Indian online casino
  • 14:15 Indian online casino
  • 08:28 Butiksskyltar: Hur upplever utbude

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 570 873
27 965
271 770
712
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