forked from cp-algorithms/cp-algorithms
-
Notifications
You must be signed in to change notification settings - Fork 0
Expand file tree
/
Copy pathtest_vertical_decomposition.cpp
More file actions
47 lines (41 loc) · 1.24 KB
/
test_vertical_decomposition.cpp
File metadata and controls
47 lines (41 loc) · 1.24 KB
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
#include <bits/stdc++.h>
using namespace std;
#include "triangle_union.h"
dbl solve(vector<vector<int> > rects){
vector<vector<pt> > processed_rects;
for(const auto& v: rects){
processed_rects.push_back(vector<pt>());
processed_rects.back().push_back(pt{(dbl)v[0], (dbl)v[1]});
processed_rects.back().push_back(pt{(dbl)v[2], (dbl)v[3]});
processed_rects.back().push_back(pt{(dbl)v[4], (dbl)v[5]});
processed_rects.back().push_back(pt{(dbl)v[6], (dbl)v[7]});
}
vector<tuple<pt, pt, pt> > tr;
dbl sum = 0;
for(const auto& r: processed_rects){
sum += fabs((r[1] - r[0]).cross(r[3] - r[0]));
tr.emplace_back(r[0], r[1], r[2]);
tr.emplace_back(r[2], r[3], r[0]);
}
return sum/union_area(tr);
}
bool test1(){
vector<vector<int> > rects = {
{0, 0, 0, 1, 3, 1, 3, 0},
{0, 0, 0, 3, 1, 3, 1, 0},
{3, 3, 2, 3, 2, 0, 3, 0},
{3, 3, 3, 2, 0, 2, 0, 3}
};
return fabs(solve(rects) - 1.5) < 1e-6;
}
bool test2(){
vector<vector<int> > rects = {
{-1, 0, 0, 1, 1, 0, 0, -1},
{0, 0, 1, 1, 2, 0, 1, -1}
};
return fabs(solve(rects) - 1.1428571429) < 1e-6;
}
int main(){
assert(test1());
assert(test2());
}