mam pytanie wiem linię wiem tylko jej nachylenie (m) oraz punkt na nim A (x, y) Jak mogę obliczyć punkty (a właściwie dwa z nich) w tej linii z odległością (d) od punktu A ??? I m pytaniem to znalezienia intensywności pikseli na linię, które przechodzą przez A (x, y), przy czym odległość .Distance w tym przypadku będzie liczba pikseli.punkty Znalezienie na linii z danej odległości
Odpowiedz
Proponuję przekształcenie linii do parametrycznego formacie zamiast punktowego stoku. Oznacza to, że funkcja parametryczna dla linii zwraca punkty wzdłuż tej linii dla wartości jakiegoś parametru t. Możesz reprezentować linię jako punkt odniesienia i wektor reprezentujący kierunek linii przechodzącej przez ten punkt. W ten sposób podróżujesz d jednostkami do przodu i do tyłu z punktu A, aby zdobyć inne punkty.
Ponieważ linia ma nachylenie m, jego kierunek wektora jest < 1, m>. Ponieważ przesuwa m pikseli w y za każdy 1 piksel na x. Chcesz znormalizować wektor kierunkowy jako długość jednostki, aby podzielić przez wielkość wektora.
magnitude = (1^2 + m^2)^(1/2) N = <1, m>/magnitude = <1/magnitude, m/magnitude>
Znormalizowany wektor kierunkowy to N. Teraz już prawie skończyłeś. Wystarczy napisać równanie dla linii w formacie parametryzowanego:
f(t) = A + t*N
używa vector math. W szczególności: scalar vector multiplication (Twojego parametru t oraz wektor N) i vector addition (A i t * N). Wynik funkcji f jest punktem wzdłuż linii. 2 punkty, których szukasz, to f (d) i f (-d). Wprowadź to w wybranym przez Ciebie języku.
Zaletą stosowania tej metody, w przeciwieństwie do wszystkich innych odpowiedzi tak daleko, że można łatwo rozszerzyć ten sposób wspierać linię z „nieskończonej” stoku. Oznacza to, że linia pionowa, taka jak x = 3. Tak naprawdę nie potrzebujesz nachylenia, wszystko czego potrzebujesz to znormalizowany wektor kierunkowy. W przypadku linii pionowej jest to < 0, 1>. Z tego powodu operacje graficzne często wykorzystują matematykę wektorową, ponieważ obliczenia są bardziej proste i mniej podatne na osobliwości. Na początku może się to wydawać nieco skomplikowane, ale gdy już opanujesz operacje wektorowe, wiele zadań związanych z grafiką komputerową staje się dużo łatwiejsze.
Nazwijmy punkt próbujesz znaleźć P, PX współrzędnych py, a twój punkt wyjścia współrzędnych ax i ay. Nachylenie m jest tylko stosunkiem zmiany Y względem zmiany X, więc jeśli twój punkt P jest odległością s od A, to jego współrzędne to px = ax + s, a py = ay + m * s. Teraz, używając Pythagorasa, odległość d od A do P będzie wynosić d = sqrt (s * s + (m * s) * (m * s)). Aby P było określonym D jednostkami od A, znajdź s jako s = D/sqrt (1 + m * m).
myślałem, że to było niesamowite i łatwe do zrozumienia rozwiązanie:
http://www.physicsforums.com/showpost.php?s=f04d131386fbd83b7b5df27f8da84fa1&p=2822353&postcount=4
Let me explain the answer in a simple way.
punkt startu - (x0, y0)
Punkt końcowy - (x1, y1)
Musimy znaleźć punkt (xt, yt)
w dt odległości od punktu startowego w kierunku punktu końcowego.
Odległość między punktem startowym i końcowym jest podana przez d = sqrt((x1 - x0)^2 + (y1 - y0)^2)
Niech stosunek odległości, t = dt/d
Wtedy punkt (xt, yt) = (((1 - t) * x0 + t * x1), ((1 - t) * y0 + t * y1))
Kiedy 0 < t < 1
punkt jest na linia.
Po t < 0
punkt znajduje się poza linią w pobliżu (x0, y0)
.
Po t > 1
punkt znajduje się poza linią w pobliżu (x1, y1)
.
dziękuję za pomoc, działa – Emre
@alevy Wprowadzasz zmienną "A", ale nie widzę, co "A" jest zdefiniowane. Co to jest "A"? –
@ TomAuger Wprowadziłem A w akapicie wprowadzającym tej odpowiedzi. A jest punktem na linii. Nie ma znaczenia, który punkt. Każdy punkt na linii zrobi. –