Каков наилучший подход для выполнения операций на парах 2d строк? - PullRequest
1 голос
/ 01 декабря 2010

Итак, у меня есть 10 000 линий, определенных на 2-й плоскости, так что каждая линия представлена ​​как (A1, A2, B1, B2) (точки A, B).У меня есть массив функций, которые мне нужно выполнять на каждой паре линий:

Angle(A,B)
    return Atan((B.y-A.y) / (B.x-A.x)) 

NearlyParallel(angle1, angle2)
    delta = Abs(angle1-angle2)
    return (delta < threshold) or (delta > Pi-threshold)

Collinear(A,B, C,D)
    return NearlyParallel(Angle(A,C), Angle(B,D)) and NearlyParallel(Angle(A,D), Angle(B,C))

Поэтому в общем случае мне нужно указать, какая линия является коллинеарной, а какая - почти параллельной другой для каждой строки.

Мне нужно сделать это на C ++, используя boost и любую необходимую библиотеку с открытым исходным кодом.Я делаю это под Windows в Visual Studio 2010.

Какая библиотека и ее часть могут помочь мне в организации быстрых вычислений для моих данных?будет ли полезен, например, повышение графа lib?Я имею в виду, как правило, мне нужно выполнить некоторые оптимизации потоков / процессоров для ускорения.И у меня не будет какой-нибудь красивой видеокарты для всего этого ...

1 Ответ

1 голос
/ 01 декабря 2010

Вы можете использовать вашу функцию Angle в каждой строке и сохранить результат в std :: map, используя угол в качестве ключа. Это сблизит линии с одинаковыми углами, поэтому вы можете быстро выбрать пары для проверки на близость к параллельности и коллинеарность.

...