void circle_union() {
  for (int c = 1; c <= n; ++c) {
    int cvrcnt = 0;
    e.clear();
    for (int i = 1; i <= n; ++i) {
      if (i != c) {
        int r = testCC(center[c], center[i], radius[c], radius[i]);
        if (r == 2) ++cvrcnt;
        else if (r == 0) {
          pair<double, double> paa = isCC(center[c], center[i], radius[c], radius[i]);
          add(paa.first, paa.second);
        }
      }
    }
    if (e.size() == 0) {
      double a = pi * radius[c] * radius[c];
      cntarea[cvrcnt] -= a;
      cntarea[cvrcnt + 1] += a;
    } else {
      e.push_back(event_t(-pi, 1));
      e.push_back(event_t(pi, -2));
      sort(e.begin(), e.end());
      for (int i = 0; i < int(e.size()) - 1; ++i) {
        cvrcnt += e[i].delta;
        double a = calc(center[c], radius[c], e[i].theta, e[i + 1].theta);
        cntarea[cvrcnt - 1] -= a;
        cntarea[cvrcnt] += a;
      }
    }
  }
}
Ejemplo n.º 2
0
int area(vector<rect_t> rect) {
    vector< event_t > eventx, eventy;
    for (size_t i = 0, sz = rect.size(); i < sz; ++i){
        eventx.pb(event_t(rect[i].x1, i, 0));
        eventx.pb(event_t(rect[i].x2, i, 1));
        eventy.pb(event_t(rect[i].y1, i, 0));
        eventy.pb(event_t(rect[i].y2, i, 1));
    }
    
    sort(eventx.begin(), eventx.end());
    sort(eventy.begin(), eventy.end());
    vector< bool > active(int(rect.size()), false);
    
    active[eventx[0].frm] = true;
    
    int ans = 0;
    for (size_t i = 1, sz = eventx.size(); i < sz; ++i){
        
        int in = 0;
        int lst = 0;
        for (size_t j = 0, szz = eventy.size(); j < szz; ++j){
            if (!active[eventy[j].frm]) continue;
            if (in){
                ans += (eventy[j].ax-lst)*(eventx[i].ax-eventx[i-1].ax);
                lst = eventy[j].ax;
            }
            else lst = eventy[j].ax;
            
            if (eventy[j].wut) in--;
            else in++;
        }
        
        if (eventx[i].wut) active[eventx[i].frm] = false;
        else active[eventx[i].frm] = true;
    }
    
    return ans;
}
void add(double begin, double end) {
  if (begin <= -pi) begin += 2 * pi, end += 2 * pi;
  if (end > pi) {
    e.push_back(event_t(begin, 1));
    e.push_back(event_t(pi, -1));
    e.push_back(event_t(-pi, 1));
    e.push_back(event_t(end - 2 * pi, -1));
  } else {
    e.push_back(event_t(begin, 1));
    e.push_back(event_t(end, -1));
  }
}
Ejemplo n.º 4
0
        {
            auto&& e = waitServerEvent();
            REQUIRE(std::get<0>(e) == expectedEvent);
        }

        ~WebsocketTestsFixture()
        {
            server.stop();
        }
    };
}

TEST_CASE_METHOD(WebsocketTestsFixture, "New connection", "[websocket][slow]")
{
    Client client;
    REQUIRE(waitServerEvent() == event_t(websocket::Event::NewConnection, 1, ""));
}

TEST_CASE_METHOD(WebsocketTestsFixture, "Client message", "[websocket][slow]")
{
    Client client;
    waitServerEvent(websocket::Event::NewConnection);

    client.sendFrame("\x81\x84" "\x14\x7b\x35\x0f" "\x60\x1e\x46\x7b");
    REQUIRE(waitServerEvent() == event_t(websocket::Event::Message, 1, "test"));
}

TEST_CASE_METHOD(WebsocketTestsFixture, "Server message", "[websocket][slow]")
{
    Client client;
    waitServerEvent(websocket::Event::NewConnection);
Ejemplo n.º 5
0
 event_t event() const
 {
     return event_t(zyre_event_new(m_self));
 }