Я пишу часть программного обеспечения для моделирования и нуждаюсь в эффективном способе тестирования на столкновение вдоль линии.Каков наилучший способ реализации одномерного обнаружения столкновения?
Моделирование - это поезд, пересекающий несколько переключателей на дорожке. Когда колесо входит в N дюймов переключателя, переключатель включается, а затем выключается, когда колесо уходит. Поскольку все колеса имеют одинаковый размер, и все переключатели имеют одинаковый размер, я могу представить их как одну координату X вдоль дорожки. Расстояние переключения и расстояния между колесами не меняются по отношению друг к другу, как только они установлены.
Это довольно тривиальная проблема, если выполнить грубую силу, разместив координаты X в списках и пройдя их, но мне нужен способ сделать это эффективно, потому что он должен быть предельно точным, даже если поезд движущихся с высокой скоростью. Существует тонна учебников по обнаружению двумерных столкновений, но я не уверен, что лучший способ сделать этот уникальный 1D-сценарий.
По-видимому, есть некоторые путаницы в отношении того, как выглядят мои данные.
Я имитирую один сайт, а не весь регион. Поезда могут быть любой длины, с разными типами автомобилей, но есть только один поезд. Данные моего поезда представлены в форме {48,96,508,556,626,674,...}
, указывая расстояния от передней части поезда (0
) до центра оси.
(данные поезда будут более вероятно, придут ко мне в виде упорядоченного спискаCar
объектов, каждый из которых имеет длину и список целых чисел, представляющие ось расстояния от передней части этого автомобиля, но все объединяются в один список, так как все оси одинаковы для меня.)
Мои коммутаторы находятся в пределах нескольких сотен футов и часто будут полностью покрыты поездом. Коммутаторы могут находиться в любом интервале от от сотен метров до нескольких дюймов, и находится в том же виде, что и поезд: {0,8,512,520,...}
, указывающий расстояния от начала сайта до центра переключателя час
Наконец, я знаю расстояние, на котором колесо активирует переключатель в дюймах.
Например, используя приведенные выше данные образца и расстояние активации 8 дюймов, первый переключатель при X = 0 активируется, когда поезд достигнет X = 40, что означает, что поезд составляет 40 дюймов на участке. Когда поезд приближается к X = 48, переключатель в положении X = 8 также активируется. При X = 56 первый выключатель отключается, а при X = 64 второй выключатель также гаснет. Различные оси включают и выключают разные переключатели, когда они пересекают сайт.
Поезд обычно работает со скоростью менее 10 миль/ч, но может идти намного выше. (Сейчас наше моделирование ограничен на 30 миль в час, но выше, было бы здорово.)
Хм ... очевидные (для меня) ответа должны принять решение 2D и адаптировать его - простой способ всегда иметь один размер постоянная (все есть у-координата 0). Есть ли причина, по которой эти решения не могут быть легко адаптированы? – FrustratedWithFormsDesigner
Итак, как выглядит ваш набор данных? У вас просто есть места (абсолютные расстояния от точки) или у вас есть что-то, на что можно маскировать? –
Я добавил некоторые примеры данных выше. Что значит «маска против»? Я могу преобразовать данные из списка в какую-то другую структуру. – dlras2