Można znaleźć ten punkt rozważając pierwszy ogólny punkt (x, y)
wzdłuż linii od (x1, y1)
do (x2, y2)
:
x = x1 + t*(x2 - x1)
y = y1 + t*(y2 - y1)
i obliczania (do kwadratu) odległość od tego punktu z (xp, yp)
E = (x - xp)**2 + (y - yp)**2
, która zastępuje definicję x
i y
przez podanie
E = (x1 + t*(x2 - x1) - xp)**2 +
(y1 + t*(y2 - y1) - yp)**2
następnie znaleźć minimum tej odległości różnym t
możemy czerpać E
względem t
dE/dt = 2*(x1 + t*(x2 - x1) - xp)*(x2 - x1) +
2*(y1 + t*(y2 - y1) - yp)*(y2 - y1)
że po pewnym obliczenie daje
dE/dt = 2*((x1 - xp)*(x2 - x1) + (y1 - yp)*(y2 - y1) +
t*((x2 - x1)**2 + (y1 - y2)**2))
poszukuje kiedy ta pochodna jest równa zeru otrzymujemy jawne równanie dla t
t = ((xp - x1)*(x2 - x1) + (yp - y1)*(y2 - y1))/
((x2 - x1)**2 + (y2 - y1)**2)
, więc końcowy punkt można obliczyć przy użyciu tej wartości dla t
w definicji (x, y)
.
Korzystanie notacji wektorowej To jest dokładnie taka sama formuła zaproponowana przez Gareth ...
t = <p - p1, p2 - p1>/<p2 - p1, p2 - p1>
gdzie zapis <a, b>
reprezentuje operację iloczynu skalarnego ax*bx + ay*by
.
Należy również zauważyć, że ta sama formuła działa w przestrzeni n-wymiarowej.
Dzięki za to. Udzielenie ci zaakceptowanej odpowiedzi, ponieważ twoja jest jedyną, która bierze to, co wiem (kartezjańskie kohorty) i podaje mi faktyczną formułę, do której je podłączę. (Podoba mi się pomysł na wektor, ale to rodzi więcej pytań niż odpowiedzi z moją pamięcią geometrii). –
To heroiczny wysiłek z @ 6502, ale ta odpowiedź pokazuje, dlaczego mam moją regułę na temat wektorów! –
@gareth: Gdy mam do czynienia z problemem geometrycznym, zawsze myślę w wektorach (dlatego przejmowałem twoją odpowiedź), ale wiem, że większość programistów nie czuje się z nimi dobrze. – 6502