Jest to proste wyjaśnienie rozwiązania Il-Bhima jest. Sztuką jest zauważenie, że to, czego chcesz, to rzutowanie tego punktu ortogonalnie na linię, przesuwanie go o tyle, a następnie przesuwanie go jeszcze raz, w tym samym kierunku.
W przypadku tego typu problemów łatwiej jest pracować z nieco bardziej redundantną reprezentacją linii. Zamiast y = m x + b
, oznaczmy linię przez punkt p
, który jest na linii i wektor d
w kierunku linii. Nazwijmy ten punkt p = (0, b)
, wektor d = (1, m)
, a twoim punktem wejściowym będzie p1
. Prognozowany punkt na linii będzie pl
i punkt wyjścia p2
jest więc p1 + 2 * (pl - p1) = 2 * pl - p1
Formuła trzeba tutaj jest rzutem wektora v
na linii, która przechodzi przez początek układu współrzędnych w kierunku d
. Jest on podany przez d * <v, d>/<d, d>
, gdzie <a, b>
jest iloczynem punktowym między dwoma wektorami.
Aby znaleźć pl
, musimy przesunąć cały problem tak, że linia przechodzi przez początek układu współrzędnych przez odjęcie p
od p1
, według powyższego wzoru, i przesuwając ją do tyłu. Następnie, pl = p + (d * <p - p1, d>/<d, d>)
, więc , pl_y = p_y + (m * p1_x)/(1 + m * m)
, a następnie użyć p2 = 2 * pl - p1
, aby uzyskać ostateczne wartości.
Cóż, naprawdę nie algorytmu, ale pisałem kilka wyjaśnień: http://martin-thoma.com/reflecting-a-point-over-a-line/ –
dzięki za artykuł @moose. Przykład byłby jeszcze lepszy –