Voor een computerprogramma heb ik een formule nodig die het snijpunt van twee lijnen die haaks op elkaar staan uitrekent. Van beide lijnen weet ik één punt dat ze raken, en de richting (tov de y-as). Tijdens het zelf proberen op te lossen van het probleem, liep ik tegen twee problemen aan: - Een van de lijnen kan recht omhoog lopen, een formule à la ax+b gaat daar de mist in, aangezien a oneindig groot zou worden. - Ik kan het programma niet iedere keer een vergelijking laten oplossen, het moet echt een (of meerdere) formule(s) zijn.
Alvast bedankt
Rembra
Leerling bovenbouw havo-vwo - maandag 29 maart 2004
Antwoord
Als twee lijnen loodrecht op elkaar staan, dan geldt voor de richtingscoefficienten: rico1*rico2=-1. Als dus lijn 1 een richtingscoefficient a heeft heeft lijn 2 richtingscoefficient -1/a, behalve als a=0.
Stel je hebt twee lijnen: y=ax+b en y=cx+d dan kun je het snijpunt berekenen door ax+b gelijk te stellen aan cx+d: ax+b=cx+d =ax-cx=d-b = (a-c)x=d-b = x=(d-b)/(a-c).
Nu jouw probleem:
Je hebt de lijn door (xp,yp) met rico a, en de lijn door (xq,yq) met rico -1/a. De eerste lijn heeft vergelijking y=ax+b, met b=yp-a*xp De tweede lijn heeft vergelijking y=cx+d met c=-1/a en d=yq-c*xq Als a=0, dan is het simpel: Voor het snijpunt geldt: x=xq, y=yp.
Het volgende programmadeel zou dus in principe het snijpunt moeten leveren: ALS a=0 DAN x=xq y=yp ANDERS c=-1/a b=yp-a*xp d=yq-c*xq x=(d-b)/(a-c) y=a*x+b EINDALS
Maar het kan handiger: Kijk nog eens naar de uitdrukking voor x: x=(d-b)/(a-c)
d-b=yq-cxq-yp+a*xp Vermenigvuldig dit met a en bedenk a*c=-1: Je krijgt dan: a*(d-b)=a*yq+xq-a*yp+a^2*xp Je moet nu ook (a-c) met a vermenigvuldigen: a(a-c)=a^2-ac=a^2+1. Dit levert dus x=(a*yq+xq-a*yp+a^2*xp)/(a^2+1) Als a=0 levert dit: xq/1=xq: precies wat we willen. y kun je dan weer berekenen met y=a*x+b. Als a=0 levert dit y=b, maar b=yp-a*xp. Als a=0 levert dit dus y=yp.Precies wat we willen.
Nu hebben we dus een formule "in een klap" en is ALS niet meer nodig: x=(a*yq+xq-a*yp+a^2*xp)/(a^2+1) y=a*(x-xp)+yp