Zauważ, że jak masz ju.sz te równanie prostej to tak naprawdę szukasz najbliższego punktu (tej prostej) do tego trzeciego.
A ogólnie rzecz biorąc:
p1=[p11 p12 p13 p14 ... p1n]
p2=[p21 p22 p23 p24 ... p2n]
//dlaczego mamy się ograniczać do 3D ;P
Równanie prostej jest postaci:
(p1-p2)*t+p1
//Oczywiście t jest parametrem
Masz tesz punkt p3:
p3=[p31 p32 p33 p34 ... p3n]
Teraz musisz znaleźć takie t, by odległość była minimalna:
d(t)=|(p1-p2)*t+p1-p3|
Jeżeli używasz metryki Euklidesowej to:
d(t)=(sum(((p1-p2)*t+p1-p3).^2))^(1/2)
// UWAGA:
v.^x Oznacza podniesienie każdego elementu wektora v do potęgi x indywidualnie.
sum(v)=r jest funkcją sumującą wszystkie elementy wektora v (zwraca liczbę r - ich sumę)
Oczywiście odległości są zawsze dodatnie więc możemy minimalizować kwadrat odległości d2(t) (bo tak jest prościej :d ):
d2(t)=d(t)^2=sum(((p1-p2)*t+p1-p3).^2)
Więc liczymy pochodną:
d2'(t)=sum(2*t*((p1-p2).^2)+2*(p1-p2).*(p1-p3))
//UWAGA:
v.*w - oznacza mnożenie odpowiednich elementów v i w indywidualnie
I znajdujemy t dla którego d2'(t)==0 (wystarczy rozwiązać proste równanko). Obliczone t podstawiamy do równania prostej:
p4=(p1-p2)*t+p1
//p4 jest szukamym punktem
Nie jestem tylko pewny :/ czy to się nie posypie gdy punkty p1 p2 p3 będą współliniowe, ale to przecież można łatwo sprawdzić (chociażby z nierówności trujkonta) przed rozpoczęciem rozwiązywania :>
- już pisze się przez "ż" - Ł * << gdybym chciał napisać <font color="red">"już"</span> to chyba bym napisał :> - <font color="darkblue">Sebo</span>
<font size="4">---==< 'ort!' są bez sensu >==---</span>
np ten kod przecież jest poprawny:
function <ort>jusz</ort> = <ort>pentle(konec,urzyte);</ort>
for <ort>kture</ort> = 1:konec;
<ort>jusz</ort> = sum(ktore:<ort>urzyte);</ort>
end;
A niech mi ktos bez zagladania powie o <co?> tu chodzi :>