Piszę fragment oprogramowania symulacyjnego i potrzebuję skutecznego sposobu testowania kolizji wzdłuż linii.Jaki jest najlepszy sposób wdrożenia jednowymiarowego wykrywania kolizji?
Symulacja dotyczy pociągu przejeżdżającego przez kilka przełączników na torze. Gdy koło znajdzie się w odległości N cali przełącznika, włącza się, a następnie wyłącza, gdy koło się opuszcza. Ponieważ wszystkie koła mają ten sam rozmiar, a wszystkie przełączniki są tej samej wielkości, mogę je przedstawić jako pojedynczą współrzędną X wzdłuż toru. Przełączniki odległości i odległości między kołami nie zmieniają się względem siebie, po ustawieniu.
Jest to dość trywialny problem, gdy wykonuje się go poprzez brutalną siłą, umieszczając współrzędne X na listach i przechodząc je, ale potrzebuję sposobu, aby zrobić to skutecznie, ponieważ musi być niezwykle dokładny, nawet gdy pociąg jest porusza się z dużą prędkością. Jest mnóstwo tutoriali na temat wykrywania kolizji 2D, ale nie jestem pewien, jak najlepiej sobie z tym poradzić w tym unikalnym scenariuszu 1D.
Wygląda na to, że moje dane są nieco zakłopotane.
Symuluję pojedynczą witrynę, a nie cały region. Pociągi mogą być dowolnej długości, z różnymi typami samochodów, ale jest tylko jeden pociąg. Moje dane pociągu mają postać {48,96,508,556,626,674,...}
, wskazując odległości od frontu pociągu (0
) do środka osi.
(dane pociąg częściej przychodzą do mnie w postaci uporządkowanej listyCar
obiektów, z których każdy ma długość i listę liczb całkowitych reprezentujących odległości osi z przodu tego samochodu, ale wszystko zostanie połączone w jedną listę, ponieważ wszystkie osie są dla mnie takie same.)
Moje przełączniki znajdują się w odległości kilkuset stóp i często będą całkowicie pokryte pociągiem. Przełączniki mogą być w dowolnym przedziale czasowym od setki stóp do kilku cali od siebie, i jest w tej samej formie co pociąg: {0,8,512,520,...}
, wskazując odległości od początku witryny do środka przełącznika h.
Wreszcie wiem, w jakiej odległości koło aktywuje przełącznik, w calach.
Na przykład, używając powyższych danych próbki i odległości aktywacji 8 cali, pierwszy przełącznik przy X = 0 aktywowałby się, gdy pociąg uderzył X = 40, co oznacza, że pociąg ma 40 cali w miejscu. Gdy pociąg uderzy X = 48, włącza się również przełącznik przy X = 8. Przy X = 56, pierwszy przełącznik gaśnie, a przy X = 64, drugi przełącznik również gaśnie. Różne osie włączają i wyłączają różne przełączniki podczas przekraczania terenu.
Pociąg zwykle pracuje z prędkością poniżej 10 mph, ale może iść znacznie wyżej. (Teraz nasza symulacja jest ograniczona do 30 mph, ale wyższy byłoby świetnie.)
Hmm ... oczywiste (do mnie) Odpowiedź jest podjąć rozwiązania 2D i dostosować ją - najprostszy sposób, aby zawsze mieć jeden wymiar być stała (wszystko ma współrzędna y 0). Czy istnieje powód, dla którego te rozwiązania nie mogą być łatwo zaadaptowane? – FrustratedWithFormsDesigner
Więc jak wygląda twój zestaw danych? Czy masz po prostu lokalizacje (absolutne odległości od punktu), czy też masz coś, na czym możesz maskować? –
Dodałem kilka przykładowych danych powyżej. Co masz na myśli "maska przeciwko?" Mogę konwertować dane z listy na inną strukturę. – dlras2