Причём, как я понимаю, набор кругов и треугольников все время одинаковый или не меняется каждый раз на серию проверок траекторий, потому что представляет собой какую-то городскую инфраструктуру (карту покрытия базовых станций?).
В таком случае, разбивку на квадратные кластеры и сопоставление постоянных объектов с кластерами надо сделать 1 раз и заранее — что-то вроде построения индекса в БД, который не перестраивается при каждой выборке, а модифицируется только при изменении набора, по которому часто производится выборка.
Кстати, во многих СУБД (даже в MySQL) есть географически-пространственные типы данных и географически-пространственные индексы на таблицах, которые как раз позволяет хранить какой-то набор геометрических примитивов и делать по нему выборки. Может воспользоваться этим?
Кстати, есть пара соображний:
- Сразу посоветую стремится не к строгой проверки пересечений, а к проверки пересечений с неким допуском (tolerance). Допуск, на практике, должен равняться сумме погрешности GPS-трекера и погрешности картографии. Это сразу облегчит обработку ситуаций «линия трекера проходит по касательной к объекту» или «линия трекера не пересекает объект, но пересекается с его вершиной».
- Реализовывать всё это дело, как мне видится, лучше на C/C++, и может быть даже с привлечением SSE для убыстрения обработки путём параллелизации математики проверок.