Łuki koszowe bez przejściowych

Z Rainsted
Skocz do: nawigacji, wyszukiwania

Począwszy od wersji 155 da się tworzyć łuki koszowe bez krzywych przejściowych. Rozwiązanie nadal jest prowizoryczne — będzie ulepszane w kierunku dodania krzywych przejściowych, ale zajmie to jeszcze trochę czasu.

Rozwiązanie przed zmianami

Tworzenie łuków koszowych nie zostało jeszcze kompleksowo rozpracowane. Od początku można zrobić łuk koszowy bez krzywych przejściowych, poprzez wstawienie krótkich odcinków prostych pomiędzy łukami o różnych promieniach. Odcinek prosty powinien być przyklejony do linii kierunkowej, a dopasowanie takiego łuku do mapy zwykle wymaga wielokrotnego korygowania położenia linii kierunkowej i naprawiania odcinków łukowych, zanim udaje się ustalić wersję dobrze pasującą do ortofotomapy. Od wersji 155 linię kierunkową można zastąpić krzywą pomocniczą o bardziej zaawansowanym kształcie i zrezygnować z odcinka prostego.

Krzywe pomocnicze w wersji 2021

Krzywe pomocnicze służą do zablokowania wewnętrznej geometrii łuków koszowych, podobnie jak linie kierunkowe blokują ramiona kąta, w który wpisuje się łuk. Bez krzywej pomocniczej łuk koszowy mógłby się przemieszczać przy przeliczaniu geometrii.

Obecnie dodana została obsługa krzywych pomocniczych o kodzie 0x78, których działanie ma być podobne do linii kierunkowych — jednak dowiązany będzie tylko punkt wspólny odcinków łuku. Zastosowanie krzywych pomocniczych będzie jeszcze ulepszane w kolejnych wersjach i testowane. Do czasu ustabilizowania funkcjonalności możliwe jest ich uzyskanie poprzez zmianę kodu obiektu (np. torów kolejowych) na 0x78 (tzn. 0x7801 — odcinek prosty, 0x7802 — łuk o stałym promieniu w lewo od P1 patrząc, 0x7803 — łuk w prawo, 0x7806 — krzywa przejściowa w lewo, 0x7807 — krzywa przejściowa w prawo). W związku z koniecznością wprowadzenia dodatkowych (ale przy tym opcjonalnych) uzależnień do liczenia geometrii odcinków mogą pojawiać się niespotykane wcześniej błędy — będą one naprawiane w pierwszej kolejności. Krzywe pomocnicze najprościej dodać jako zwykły odcinek toru (bez sąsiednich), po czym zmienić kod typu obiektu na któryś z podanych wyżej (oraz naprawić, żeby się odcinek przeliczył do podanej geometrii).

Krzywe pomocnicze będą miały dwa zastosowania. Pojedynczy odcinek będzie "trzymał kształt", tzn. będzie łukiem o zadanym promieniu albo krzywą przejściową styczną do prostej w P1, a w P2 do okręgu o zadanym promieniu. Łuki (trajektorii) o różnych promieniach, przypisane do takiej krzywej, będą utrzymywać punkt styczności na krzywej. Dzięki temu będzie można dodać krzywą w spodziewanym miejscu zmiany promienia i dopasować ją do torów na ortofotomapie, a następnie ustawić promienie łuków (promień łuku nie będzie się w tym przypadku kopiował do sąsiedniego). Również w ten sposób będzie można obsłużyć łuki odwrotne bez wstawki prostej. Drugie zastosowanie to budowa wieloodcinkowego łuku z parametrami (i krzywymi przejściowymi) — umożliwi dowolny podział odcinków w ramach krzywej przejściowej. Krzywe pomocnicze nie są trajektoriami ruchu i nie muszą być ze sobą styczne — w takim przypadku należy jedynie pilnować, aby łączenie łuków nie wypadło na łączeniu krzywych pomocniczych. W przypadku przeliczania trajektorii ruchu styczność (ciągłość linii stycznej, czyli brak wierzchołka) ma większy priorytet niż inne parametry, które zostają dostosowane (np. przeliczenie położenia końców, wyliczony promień). Promień dla krzywych pomocniczych będzie modyfikowany tylko w przypadkach konieczności geometrycznej, tzn. promień musi być co najmniej połową odległości pomiędzy punktami końcowymi.

Łuki koszowe w wersji 2021

Można już stworzyć łuk koszowy bez potrzeby wstawiania odcinka prostego. Zacząć trzeba od wpisania łuku w kąt, jak w przypadku stałego promienia. Łuk powinien mieć co najmniej 4 odcinki. Następnie ułożyć krzywą pomocniczą (typ 0x78) w okolicy zmiany promienia (tor na ortofotomapie przechodzi na drugą stronę ustawionego w edytorze łuku o stałym promieniu) i przypisać dwóm kolejnym, wewnętrznym odcinkom łuku (poprzez zapamiętanie punktu krzywej pomocniczej i ustawienie punktu dla odcinka — przypisanie działa podobnie jak przypisanie linii kierunkowej do odcinka prostego i nie ma znaczenia, który punkt został wybrany).

Następnie można ustawić promień odcinka "początkowego" dla łuku w lewo, a promień odcinka "końcowego" zostanie wyliczony — obecnie przycisk wyliczenia jest na zakładce Linie nazywa się [Koszowy #2]. Punkt styczności różnych promieni będzie przemieszczany po krzywej pomocniczej, aczkolwiek styczna może być inna niż styczna krzywej pomocniczej w tym punkcie. Punkt styczności będzie przesuwany po krzywej pomocniczej aż do uzyskania współliniowości ze środkami łuków.

Obecny algorytm nie uwzględnia krzywych przejściowych ani nie obsługuje łuku z parametrami (może zepsuć). Dalsze prace będą prowadzone w kierunku obsługi krzywych przejściowych, parametrów łuku oraz wielokrotnej zmiany promienia.

Łuki koszowe w wersji 2022 (propozycja)

Rozważana jest opcja przypisania tylko jednego odcinka do krzywej pomocniczej (łuk musiałby mieć co najmniej 3 odcinki), wtedy ten środkowy odcinek w całości będzie na niej położony (a nie punkt łączący dwa odcinki). Jeśli krzywa pomocnicza będzie krzywą przejściową, można będzie w ten uzyskać krzywą przejściową pomiędzy łukami.

Rozważana jest też obsługa łuku o jedynie 2 odcinkach, obu przypisanych do krzywej pomocniczej.

Do menu zostały dodane opcje konfiguracji połączenia odcinka z krzywą pomocniczą. Nie mają one obecnie znaczenia, będzie to działało dopiero w razie dalszych prac na łukami koszowymi.