Linia Znormalizowana 2D
Categories:
Wejście i wyjście:
Fragment kodu przyjmuje listę punktów/wierzchołków V o wymiarach 2 x M jako dane wejściowe.
Opcjonalnie można podać listę odcinków Lines, która jest listą N x 2 zawierającą indeksy wierzchołków
definiujących poszczególne odcinki linii
(jeśli nie jest podana, zakłada się, że Lines=[1 2; 2 3 ; ... ; M-1 M]).
Jako wynik zwraca normalne do wierzchołków N o wymiarach 2 x M.
V= Lista punktów/wierzchołków w postaci macierzy 2 x M.Lines(opcjonalny) = Lista o wymiarach N x 2 zawierająca odcinki linii, wyrażone przez indeksy wierzchołków (jeśli nie jest podana, zakładamy, żeLines=[1 2; 2 3 ; ... ; M-1 M]).N= Normalne do wierzchołków w postaci macierzy 2 x M.
Przykład:
Ten fragment kodu to przykładowe użycie funkcji LineNormals2D
w celu obliczenia normalnych do linii na płaszczyźnie 2D.
Dane wejściowe są wczytywane z pliku testowego (testdata).
Następnie funkcja LineNormals2D jest wywoływana,
aby obliczyć normalne do linii na podstawie podanych wierzchołków (Vertices) i odcinków (Lines).
Otrzymane normalne są następnie wykorzystywane do wygenerowania wykresu,
który przedstawia oryginalne linie oraz normalne do tych linii,
przedstawione jako linie przechodzące przez wierzchołki
i skierowane w kierunku normalnej zwiększonej dziesięciokrotnie.
testdata= nazwa pliku testowego.
FUNKCJA:
Funkcja napisana przez D. Kroona z Uniwersytetu w Twente (sierpień 2011)
Początek kodu odpowiada za ustalenie listy odcinków linii w przypadku, gdy nie są podane indeksy linii. Lista zmiennych:
nargin= Liczba argumentów wejściowych funkcji.Lines= Lista odcinków linii, gdzie każdy odcinek jest połączeniem kolejnych punktów. Jeśli nie są podane indeksy linii, ta lista jest automatycznie generowana.
Obliczanie wektorów stycznych do krzywej poprzez różnicę pomiędzy współrzędnymi punktów końcowych i początkowych odcinków linii.
Lines(:,1)= indeksy początkowych punktów odcinków linii.Lines(:,2)= indeksy końcowych punktów odcinków linii.Vertices(Lines(:,1),:)= współrzędne początkowych punktów odcinków linii.Vertices(Lines(:,2),:)= współrzędne końcowych punktów odcinków linii.
Wpływ wektorów stycznych na odległość dla każdego punktu/wierzchołka krzywej:
-
LL: Obliczana jest długość wektorów stycznychDTza pomocą funkcjisqrt(DT(:,1).^2+DT(:,2).^2). -
DT(:,1)=DT(:,1)./max(LL.^2,eps): Normalizowane są współrzędne x wektorów stycznych przez kwadrat długości wektora (LL), z tym że minimalna wartość toeps(najmniejsza wartość reprezentowalna w danej precyzji arytmetyki). -
DT(:,2)=DT(:,2)./max(LL.^2,eps): Normalizowane są współrzędne y wektorów stycznych przez kwadrat długości wektora (LL), z tym że minimalna wartość toeps. -
D1=zeros(size(Vertices)); D1(Lines(:,1),:)=DT;: Tworzona jest macierz zerowaD1o takim samym rozmiarze jak lista punktów/wierzchołków. Następnie wiersze odpowiadające początkowym punktom odcinków linii otrzymują wartości wektorów stycznychDT. -
D2=zeros(size(Vertices)); D2(Lines(:,2),:)=DT;: Tworzona jest macierz zerowaD2o takim samym rozmiarze jak lista punktów/wierzchołków. Następnie wiersze odpowiadające końcowym punktom odcinków linii otrzymują wartości wektorów stycznychDT. -
D=D1+D2;: Sumowane są macierzeD1iD2, uzyskując macierzD, która zawiera wpływ wektorów stycznych na odległość dla każdego punktu/wierzchołka krzywej.
Normalizowanie wektorów normalnych:
-
LL: Obliczana jest długość wektorów normalnychDza pomocą funkcjisqrt(D(:,1).^2+D(:,2).^2). -
N(:,1)=-D(:,2)./LL: Współrzędna x normalizowanego wektora normalnego jest ujemnym ilorazem współrzędnej y wektora normalnego przez długośćLL. -
N(:,2)= D(:,1)./LL: Współrzędna y normalizowanego wektora normalnego jest ilorazem współrzędnej x wektora normalnego przez długośćLL.
Ostatecznie macierz N zawiera znormalizowane wektory normalne.