Advertisement
Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- #include <iostream>
- #include <vector>
- #include <thread>
- #include <cmath>
- #include <mutex>
- using namespace std;
- mutex m;
- struct Point {
- double x, y;
- };
- typedef vector<Point>::iterator ci;
- class Circle {
- private:
- Point a;
- double r;
- public:
- Circle(const Point& t, double r_): a(t), r(r_) {}
- double distance(Point &t){
- double b = sqrt( pow(t.x- a.x,2) + pow(t.y- a.y,2) )- r;
- return abs(b);
- }
- void operator()(ci begin, ci end, Point &min){
- lock_guard<mutex> lock(m);
- Point minimal = *begin;
- for(; begin!=end; ++begin){
- if( distance(*begin) < distance(minimal)) {
- minimal=*begin;
- }
- } if (distance(minimal)< distance(min))
- min = minimal;
- }
- };
- int main()
- {
- int n=3;
- Circle c({0,0},3);
- vector<Point> points = {{0,0},{1,1},{2,2},{3,3},{0,3},{6,3},{-63,3},{5,5},{6,6}};
- Point min = points[0];
- thread t1 = thread(c, points.begin(), points.begin()+3, ref(min));
- thread t2 = thread(c, points.begin()+3, points.begin()+6, ref(min));
- thread t3 = thread(c, points.begin()+6,points.end(), ref(min));
- t1.join();
- t2.join();
- t3.join();
- cout<<"Tacka ("<<min.x<<","<<min.y<<") je najbliza kruznici." <<endl;
- return 0;
- }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement