Jag har ett plan i en 3D rymd som består av en normal N och ett avstånd från origo D. Menar du då: Fungerar perfekt. Hade fel tecken på D ett tag vilket resulterade i helt galna resultat. Goda kunskaper i linjär algebra...Linjär algebra problem
Jag har även två punkter P0 och P1. Om man drar en linje från P0 till P1 (eller tvärtom) så går linjen igenom planet. Jag behöver veta var linjen skär planet.
Det jag kommit fram till är följande men i min kod så får jag felaktiga resultat och tänkte att denna uträkning kanske inte är rätt:
P = P0 + (P1 - P0) *((N dot P0 + D) / (N dot (P1 - P0)))
P är alltså vectorn i planet där linjen skär planet.
Stämmer detta tro?Sv:Linjär algebra problem
P = ( (N dot P1 - D) * P0 + (D - N dot P0) * P1 ) / ( N dot (P1 - P0) )Sv:Linjär algebra problem
Tack för hjälpen!!Sv:Linjär algebra problem
Härledning:
Planet beskrivs av mängden av positionsvektorer x som uppfyller
N dot x = D
om N är en enhetsnormal (dvs |N|=1) som är riktad bort från origo och D är avståndet från origo till planet.
Linjesegmentet mellan P0 och P1 har ekvationen
x = (1-t) P0 + t P1
där 0 <= t <= 1.
Vi söker punkten/positionsvektorn P som ligger både i planet och på linjesegmentet. Antag att denna punkt har t=tP i ekvationen för linjesegmentet. För att P skall ligga i planet skall då gälla
D = N dot ( (1-tP) P0 + tP P1 ) = (1-tP) (N dot P0) + tP (N dot P1)
Vi kan lösa ut tP och får då
tP = (D - N dot P0) / ( N dot (P1 - P0) )
Insättning i linjesegmentets ekvation ger
P = (1 - (D - N dot P0) / ( N dot (P1 - P0) )) P0 + ((D - N dot P0) / ( N dot (P1 - P0)) P1 =
( (N dot P1 - D) P0 + (D - N dot P0) P1 ) / ( N dot (P1 - P0) )
Klart... Så, det var väl inte så svårt?