Цитата:
имитация физики соударения между кругами и квадратами на плоскости...
Разбейте Ваши круги и квадраты на систему малых кругов, так чтобы окружность имела не менее 12 малых кругов, а квадрат не менее 3 малых кругов на стороне. Используйте для малых кругов Ваш уже оттестированый алгоритм соударения кругов. Для малых кругов в одной фигуре задайте упругую связь по смещению. Визуализация с таким деформированием фигур придаст некоторую новизну Вашему движку, а что наиболее важно, также создаст однородность алгоритма вычислений включая не только круг и квадрат но и произвольные плоские фигуры.
P.S. В текстурах CUDA деформирование приведет к увеличению латентности, вряд ли деформированный объект необходимо отображать.