/* -*- Mode: C++; tab-width: 8; indent-tabs-mode: nil; c-basic-offset: 2 -*- */
/* vim: set ts=8 sts=2 et sw=2 tw=80: */
/* This Source Code Form is subject to the terms of the Mozilla Public
* License , v . 2 . 0 . If a copy of the MPL was not distributed with this
* file, You can obtain one at http://mozilla.org/MPL/2.0/. */
#include "gtest/gtest.h"
#include "BSPTree.h"
#include "Polygon.h"
#include "PolygonTestUtils.h"
#include <deque>
#include <list>
using namespace mozilla::gfx;
using namespace mozilla::layers;
typedef mozilla::gfx::Polygon MozPolygon;
namespace {
static void RunTest(std::deque<MozPolygon> aPolygons,
std::deque<MozPolygon> aExpected) {
std::list<TestPolygon> layers;
for (MozPolygon& polygon : aPolygons) {
layers.push_back(TestPolygon(nullptr, std::move(polygon)));
}
const BSPTree tree(layers);
const nsTArray<TestPolygon> order = tree.GetDrawOrder();
EXPECT_EQ(aExpected.size(), order.Length());
for (size_t i =
0 ; i < order.Length(); ++i) {
EXPECT_TRUE(aExpected[i] == *order[i].geometry);
}
}
}
// namespace
TEST(BSPTree, SameNode)
{
const std::deque<MozPolygon> polygons{
MozPolygon{
Point4D(
0 .
0 f,
0 .
0 f,
0 .
0 f,
1 .
0 f), Point4D(
1 .
0 f,
0 .
0 f,
0 .
0 f,
1 .
0 f),
Point4D(
1 .
0 f,
1 .
0 f,
0 .
0 f,
1 .
0 f), Point4D(
0 .
0 f,
1 .
0 f,
0 .
0 f,
1 .
0 f)},
MozPolygon{
Point4D(
0 .
0 f,
0 .
0 f,
0 .
0 f,
1 .
0 f), Point4D(
1 .
0 f,
0 .
0 f,
0 .
0 f,
1 .
0 f),
Point4D(
1 .
0 f,
1 .
0 f,
0 .
0 f,
1 .
0 f), Point4D(
0 .
0 f,
1 .
0 f,
0 .
0 f,
1 .
0 f)}};
::RunTest(polygons, polygons);
}
TEST(BSPTree, OneChild)
{
const MozPolygon p1{
Point4D(
0 .
0 f,
0 .
0 f,
0 .
0 f,
1 .
0 f), Point4D(
1 .
0 f,
0 .
0 f,
0 .
0 f,
1 .
0 f),
Point4D(
1 .
0 f,
1 .
0 f,
0 .
0 f,
1 .
0 f), Point4D(
0 .
0 f,
1 .
0 f,
0 .
0 f,
1 .
0 f)};
const MozPolygon p2{
Point4D(
0 .
0 f,
0 .
0 f,
1 .
0 f,
1 .
0 f), Point4D(
1 .
0 f,
0 .
0 f,
1 .
0 f,
1 .
0 f),
Point4D(
1 .
0 f,
1 .
0 f,
1 .
0 f,
1 .
0 f), Point4D(
0 .
0 f,
1 .
0 f,
1 .
0 f,
1 .
0 f)};
::RunTest({p1, p2}, {p1, p2});
::RunTest({p2, p1}, {p1, p2});
}
TEST(BSPTree, SharedEdge1)
{
MozPolygon p1{
Point4D(
1 .
0 f,
0 .
0 f,
1 .
0 f,
1 .
0 f), Point4D(
0 .
0 f,
0 .
0 f,
1 .
0 f,
1 .
0 f),
Point4D(
0 .
0 f,
1 .
0 f,
1 .
0 f,
1 .
0 f), Point4D(
1 .
0 f,
1 .
0 f,
1 .
0 f,
1 .
0 f)};
MozPolygon p2{
Point4D(
1 .
0 f,
0 .
0 f,
1 .
0 f,
1 .
0 f), Point4D(
1 .
0 f,
1 .
0 f,
1 .
0 f,
1 .
0 f),
Point4D(
2 .
0 f,
2 .
0 f,
1 .
0 f,
1 .
0 f), Point4D(
2 .
0 f,
0 .
0 f,
1 .
0 f,
1 .
0 f)};
::RunTest({p1, p2}, {p1, p2});
}
TEST(BSPTree, SharedEdge2)
{
MozPolygon p1{
Point4D(
1 .
0 f,
0 .
0 f,
1 .
0 f,
1 .
0 f), Point4D(
0 .
0 f,
0 .
0 f,
1 .
0 f,
1 .
0 f),
Point4D(
0 .
0 f,
1 .
0 f,
1 .
0 f,
1 .
0 f), Point4D(
1 .
0 f,
1 .
0 f,
1 .
0 f,
1 .
0 f)};
MozPolygon p2{
Point4D(
1 .
0 f,
0 .
0 f,
1 .
0 f,
1 .
0 f), Point4D(
1 .
0 f,
1 .
0 f,
1 .
0 f,
1 .
0 f),
Point4D(
2 .
0 f,
2 .
0 f,
0 .
0 f,
1 .
0 f), Point4D(
2 .
0 f,
0 .
0 f,
0 .
0 f,
1 .
0 f)};
::RunTest({p1, p2}, {p2, p1});
}
TEST(BSPTree, SplitSharedEdge)
{
MozPolygon p1{
Point4D(
1 .
0 f,
0 .
0 f,
1 .
0 f,
1 .
0 f), Point4D(
0 .
0 f,
0 .
0 f,
1 .
0 f,
1 .
0 f),
Point4D(
0 .
0 f,
1 .
0 f,
1 .
0 f,
1 .
0 f), Point4D(
1 .
0 f,
1 .
0 f,
1 .
0 f,
1 .
0 f)};
MozPolygon p2{
Point4D(
1 .
0 f,
0 .
0 f,
2 .
0 f,
1 .
0 f), Point4D(
1 .
0 f,
1 .
0 f,
2 .
0 f,
1 .
0 f),
Point4D(
1 .
0 f,
1 .
0 f,
0 .
0 f,
1 .
0 f), Point4D(
1 .
0 f,
0 .
0 f,
0 .
0 f,
1 .
0 f)};
const std::deque<MozPolygon> expected{
MozPolygon{
Point4D(
1 .
0 f,
1 .
0 f,
1 .
0 f,
1 .
0 f), Point4D(
1 .
0 f,
1 .
0 f,
0 .
0 f,
1 .
0 f),
Point4D(
1 .
0 f,
0 .
0 f,
0 .
0 f,
1 .
0 f), Point4D(
1 .
0 f,
0 .
0 f,
1 .
0 f,
1 .
0 f)},
MozPolygon{
Point4D(
1 .
0 f,
0 .
0 f,
1 .
0 f,
1 .
0 f), Point4D(
0 .
0 f,
0 .
0 f,
1 .
0 f,
1 .
0 f),
Point4D(
0 .
0 f,
1 .
0 f,
1 .
0 f,
1 .
0 f), Point4D(
1 .
0 f,
1 .
0 f,
1 .
0 f,
1 .
0 f)},
MozPolygon{
Point4D(
1 .
0 f,
0 .
0 f,
2 .
0 f,
1 .
0 f), Point4D(
1 .
0 f,
1 .
0 f,
2 .
0 f,
1 .
0 f),
Point4D(
1 .
0 f,
1 .
0 f,
1 .
0 f,
1 .
0 f), Point4D(
1 .
0 f,
0 .
0 f,
1 .
0 f,
1 .
0 f)}};
::RunTest({p1, p2}, expected);
}
TEST(BSPTree, SplitSimple1)
{
MozPolygon p1{
Point4D(
0 .
0 f,
0 .
0 f,
1 .
0 f,
1 .
0 f), Point4D(
1 .
0 f,
0 .
0 f,
1 .
0 f,
1 .
0 f),
Point4D(
1 .
0 f,
1 .
0 f,
1 .
0 f,
1 .
0 f), Point4D(
0 .
0 f,
1 .
0 f,
1 .
0 f,
1 .
0 f)};
MozPolygon p2{
Point4D(
0 .
0 f,
0 .
0 f,
2 .
0 f,
1 .
0 f), Point4D(
1 .
0 f,
0 .
0 f,
2 .
0 f,
1 .
0 f),
Point4D(
1 .
0 f,
1 .
0 f,
0 .
0 f,
1 .
0 f), Point4D(
0 .
0 f,
1 .
0 f,
0 .
0 f,
1 .
0 f)};
const std::deque<MozPolygon> expected{
MozPolygon{
Point4D(
0 .
0 f,
1 .
0 f,
0 .
0 f,
1 .
0 f), Point4D(
0 .
0 f,
0 .
5 f,
1 .
0 f,
1 .
0 f),
Point4D(
1 .
0 f,
0 .
5 f,
1 .
0 f,
1 .
0 f), Point4D(
1 .
0 f,
1 .
0 f,
0 .
0 f,
1 .
0 f)},
p1,
MozPolygon{
Point4D(
0 .
0 f,
0 .
0 f,
2 .
0 f,
1 .
0 f), Point4D(
1 .
0 f,
0 .
0 f,
2 .
0 f,
1 .
0 f),
Point4D(
1 .
0 f,
0 .
5 f,
1 .
0 f,
1 .
0 f), Point4D(
0 .
0 f,
0 .
5 f,
1 .
0 f,
1 .
0 f)}};
::RunTest({p1, p2}, expected);
}
TEST(BSPTree, SplitSimple2)
{
const std::deque<MozPolygon> polygons{
MozPolygon{Point4D(-
5 .
00000 f, -
5 .
00000 f,
0 .
00000 f,
1 .
0 f),
Point4D(-
5 .
00000 f,
5 .
00000 f,
0 .
00000 f,
1 .
0 f),
Point4D(
5 .
00000 f,
5 .
00000 f,
0 .
00000 f,
1 .
0 f),
Point4D(
5 .
00000 f, -
5 .
00000 f,
0 .
00000 f,
1 .
0 f)},
MozPolygon{Point4D(
0 .
00000 f, -
5 .
00000 f, -
5 .
00000 f,
1 .
0 f),
Point4D(
0 .
00000 f,
5 .
00000 f, -
5 .
00000 f,
1 .
0 f),
Point4D(
0 .
00000 f,
5 .
00000 f,
5 .
00000 f,
1 .
0 f),
Point4D(
0 .
00000 f, -
5 .
00000 f,
5 .
00000 f,
1 .
0 f)}};
const std::deque<MozPolygon> expected{
MozPolygon{Point4D(
0 .
00000 f, -
5 .
00000 f,
0 .
00000 f,
1 .
0 f),
Point4D(
0 .
00000 f, -
5 .
00000 f, -
5 .
00000 f,
1 .
0 f),
Point4D(
0 .
00000 f,
5 .
00000 f, -
5 .
00000 f,
1 .
0 f),
Point4D(
0 .
00000 f,
5 .
00000 f,
0 .
00000 f,
1 .
0 f)},
MozPolygon{Point4D(-
5 .
00000 f, -
5 .
00000 f,
0 .
00000 f,
1 .
0 f),
Point4D(-
5 .
00000 f,
5 .
00000 f,
0 .
00000 f,
1 .
0 f),
Point4D(
5 .
00000 f,
5 .
00000 f,
0 .
00000 f,
1 .
0 f),
Point4D(
5 .
00000 f, -
5 .
00000 f,
0 .
00000 f,
1 .
0 f)},
MozPolygon{Point4D(
0 .
00000 f,
5 .
00000 f,
0 .
00000 f,
1 .
0 f),
Point4D(
0 .
00000 f,
5 .
00000 f,
5 .
00000 f,
1 .
0 f),
Point4D(
0 .
00000 f, -
5 .
00000 f,
5 .
00000 f,
1 .
0 f),
Point4D(
0 .
00000 f, -
5 .
00000 f,
0 .
00000 f,
1 .
0 f)}};
::RunTest(polygons, expected);
}
TEST(BSPTree, NoSplit1)
{
const std::deque<MozPolygon> polygons{
MozPolygon{Point4D(
0 .
00000 f,
10 .
00000 f,
0 .
00000 f,
1 .
0 f),
Point4D(
0 .
00000 f,
0 .
00000 f,
0 .
00000 f,
1 .
0 f),
Point4D(
10 .
00000 f,
0 .
00000 f,
0 .
00000 f,
1 .
0 f),
Point4D(
10 .
00000 f,
10 .
00000 f,
0 .
00000 f,
1 .
0 f)},
MozPolygon{Point4D(
0 .
00000 f,
10 .
00000 f, -
5 .
00000 f,
1 .
0 f),
Point4D(
0 .
00000 f,
0 .
00000 f, -
5 .
00000 f,
1 .
0 f),
Point4D(
10 .
00000 f,
0 .
00000 f, -
5 .
00000 f,
1 .
0 f),
Point4D(
10 .
00000 f,
10 .
00000 f, -
5 .
00000 f,
1 .
0 f)},
MozPolygon{Point4D(
0 .
00000 f,
10 .
00000 f,
5 .
00000 f,
1 .
0 f),
Point4D(
0 .
00000 f,
0 .
00000 f,
5 .
00000 f,
1 .
0 f),
Point4D(
10 .
00000 f,
0 .
00000 f,
5 .
00000 f,
1 .
0 f),
Point4D(
10 .
00000 f,
10 .
00000 f,
5 .
00000 f,
1 .
0 f)}};
const std::deque<MozPolygon> expected{
MozPolygon{Point4D(
0 .
00000 f,
10 .
00000 f, -
5 .
00000 f,
1 .
0 f),
Point4D(
0 .
00000 f,
0 .
00000 f, -
5 .
00000 f,
1 .
0 f),
Point4D(
10 .
00000 f,
0 .
00000 f, -
5 .
00000 f,
1 .
0 f),
Point4D(
10 .
00000 f,
10 .
00000 f, -
5 .
00000 f,
1 .
0 f)},
MozPolygon{Point4D(
0 .
00000 f,
10 .
00000 f,
0 .
00000 f,
1 .
0 f),
Point4D(
0 .
00000 f,
0 .
00000 f,
0 .
00000 f,
1 .
0 f),
Point4D(
10 .
00000 f,
0 .
00000 f,
0 .
00000 f,
1 .
0 f),
Point4D(
10 .
00000 f,
10 .
00000 f,
0 .
00000 f,
1 .
0 f)},
MozPolygon{Point4D(
0 .
00000 f,
10 .
00000 f,
5 .
00000 f,
1 .
0 f),
Point4D(
0 .
00000 f,
0 .
00000 f,
5 .
00000 f,
1 .
0 f),
Point4D(
10 .
00000 f,
0 .
00000 f,
5 .
00000 f,
1 .
0 f),
Point4D(
10 .
00000 f,
10 .
00000 f,
5 .
00000 f,
1 .
0 f)}};
::RunTest(polygons, expected);
}
TEST(BSPTree, NoSplit2)
{
const std::deque<MozPolygon> polygons{
MozPolygon{Point4D(-
5 .
00000 f, -
5 .
00000 f,
0 .
00000 f,
1 .
0 f),
Point4D(-
5 .
00000 f,
5 .
00000 f,
0 .
00000 f,
1 .
0 f),
Point4D(
5 .
00000 f,
5 .
00000 f,
0 .
00000 f,
1 .
0 f),
Point4D(
5 .
00000 f, -
5 .
00000 f,
0 .
00000 f,
1 .
0 f)},
MozPolygon{Point4D(
0 .
00000 f,
5 .
00000 f, -
15 .
00000 f,
1 .
0 f),
Point4D(
0 .
00000 f, -
5 .
00000 f, -
15 .
00000 f,
1 .
0 f),
Point4D(
0 .
00000 f, -
5 .
00000 f, -
10 .
00000 f,
1 .
0 f),
Point4D(
0 .
00000 f,
5 .
00000 f, -
10 .
00000 f,
1 .
0 f)}};
const std::deque<MozPolygon> expected{
MozPolygon{Point4D(
0 .
00000 f,
5 .
00000 f, -
15 .
00000 f,
1 .
0 f),
Point4D(
0 .
00000 f, -
5 .
00000 f, -
15 .
00000 f,
1 .
0 f),
Point4D(
0 .
00000 f, -
5 .
00000 f, -
10 .
00000 f,
1 .
0 f),
Point4D(
0 .
00000 f,
5 .
00000 f, -
10 .
00000 f,
1 .
0 f)},
MozPolygon{Point4D(-
5 .
00000 f, -
5 .
00000 f,
0 .
00000 f,
1 .
0 f),
Point4D(-
5 .
00000 f,
5 .
00000 f,
0 .
00000 f,
1 .
0 f),
Point4D(
5 .
00000 f,
5 .
00000 f,
0 .
00000 f,
1 .
0 f),
Point4D(
5 .
00000 f, -
5 .
00000 f,
0 .
00000 f,
1 .
0 f)}};
::RunTest(polygons, expected);
}
TEST(BSPTree, TwoPlaneIntersectRotate0degrees)
{
const std::deque<MozPolygon> polygons{
MozPolygon{Point4D(-
0 .
00000 f,
2 .
00000 f,
2 .
00000 f,
1 .
0 f),
Point4D(-
0 .
00000 f, -
2 .
00000 f,
2 .
00000 f,
1 .
0 f),
Point4D(
0 .
00010 f, -
2 .
00000 f, -
2 .
00000 f,
1 .
0 f),
Point4D(
0 .
00010 f,
2 .
00000 f, -
2 .
00000 f,
1 .
0 f)},
MozPolygon{Point4D(
2 .
00000 f,
0 .
00000 f,
2 .
00000 f,
1 .
0 f),
Point4D(
2 .
00000 f, -
0 .
00000 f, -
2 .
00000 f,
1 .
0 f),
Point4D(-
2 .
00000 f,
0 .
00000 f, -
2 .
00000 f,
1 .
0 f),
Point4D(-
2 .
00000 f,
0 .
00010 f,
2 .
00000 f,
1 .
0 f)}};
const std::deque<MozPolygon> expected{
MozPolygon{Point4D(
2 .
00000 f,
0 .
00000 f,
2 .
00000 f,
1 .
0 f),
Point4D(
2 .
00000 f, -
0 .
00000 f, -
2 .
00000 f,
1 .
0 f),
Point4D(-
2 .
00000 f,
0 .
00000 f, -
2 .
00000 f,
1 .
0 f),
Point4D(-
2 .
00000 f,
0 .
00010 f,
2 .
00000 f,
1 .
0 f)},
MozPolygon{Point4D(-
0 .
00000 f,
2 .
00000 f,
2 .
00000 f,
1 .
0 f),
Point4D(-
0 .
00000 f, -
2 .
00000 f,
2 .
00000 f,
1 .
0 f),
Point4D(
0 .
00010 f, -
2 .
00000 f, -
2 .
00000 f,
1 .
0 f),
Point4D(
0 .
00010 f,
2 .
00000 f, -
2 .
00000 f,
1 .
0 f)}};
::RunTest(polygons, expected);
}
TEST(BSPTree, TwoPlaneIntersectRotate20degrees)
{
const std::deque<MozPolygon> polygons{
MozPolygon{Point4D(-
0 .
00000 f,
1 .
19540 f,
2 .
56350 f,
1 .
0 f),
Point4D(-
0 .
00000 f, -
2 .
56340 f,
1 .
19540 f,
1 .
0 f),
Point4D(
0 .
00010 f, -
1 .
19530 f, -
2 .
56340 f,
1 .
0 f),
Point4D(
0 .
00010 f,
2 .
56350 f, -
1 .
19530 f,
1 .
0 f)},
MozPolygon{Point4D(
2 .
00000 f, -
0 .
68400 f,
1 .
87940 f,
1 .
0 f),
Point4D(
2 .
00000 f,
0 .
68410 f, -
1 .
87930 f,
1 .
0 f),
Point4D(-
2 .
00000 f,
0 .
68410 f, -
1 .
87930 f,
1 .
0 f),
Point4D(-
2 .
00000 f, -
0 .
68400 f,
1 .
87940 f,
1 .
0 f)}};
const std::deque<MozPolygon> expected{
MozPolygon{Point4D(
2 .
00000 f, -
0 .
68400 f,
1 .
87940 f,
1 .
0 f),
Point4D(
2 .
00000 f,
0 .
68410 f, -
1 .
87930 f,
1 .
0 f),
Point4D(-
2 .
00000 f,
0 .
68410 f, -
1 .
87930 f,
1 .
0 f),
Point4D(-
2 .
00000 f, -
0 .
68400 f,
1 .
87940 f,
1 .
0 f)},
MozPolygon{Point4D(-
0 .
00000 f,
1 .
19540 f,
2 .
56350 f,
1 .
0 f),
Point4D(-
0 .
00000 f, -
2 .
56340 f,
1 .
19540 f,
1 .
0 f),
Point4D(
0 .
00010 f, -
1 .
19530 f, -
2 .
56340 f,
1 .
0 f),
Point4D(
0 .
00010 f,
2 .
56350 f, -
1 .
19530 f,
1 .
0 f)}};
::RunTest(polygons, expected);
}
TEST(BSPTree, TwoPlaneIntersectRotate40degrees)
{
const std::deque<MozPolygon> polygons{
MozPolygon{Point4D(-
0 .
00000 f, -
0 .
73200 f,
2 .
73210 f,
1 .
0 f),
Point4D(-
0 .
00000 f, -
2 .
73200 f, -
0 .
73200 f,
1 .
0 f),
Point4D(
0 .
00010 f,
0 .
73210 f, -
2 .
73200 f,
1 .
0 f),
Point4D(
0 .
00010 f,
2 .
73210 f,
0 .
73210 f,
1 .
0 f)},
MozPolygon{Point4D(
2 .
00000 f, -
1 .
73200 f,
1 .
00000 f,
1 .
0 f),
Point4D(
2 .
00000 f,
1 .
73210 f, -
0 .
99990 f,
1 .
0 f),
Point4D(-
2 .
00000 f,
1 .
73210 f, -
0 .
99990 f,
1 .
0 f),
Point4D(-
2 .
00000 f, -
1 .
73200 f,
1 .
00000 f,
1 .
0 f)}};
const std::deque<MozPolygon> expected{
MozPolygon{Point4D(
2 .
00000 f, -
1 .
73200 f,
1 .
00000 f,
1 .
0 f),
Point4D(
2 .
00000 f,
1 .
73210 f, -
0 .
99990 f,
1 .
0 f),
Point4D(-
2 .
00000 f,
1 .
73210 f, -
0 .
99990 f,
1 .
0 f),
Point4D(-
2 .
00000 f, -
1 .
73200 f,
1 .
00000 f,
1 .
0 f)},
MozPolygon{Point4D(-
0 .
00000 f, -
0 .
73200 f,
2 .
73210 f,
1 .
0 f),
Point4D(-
0 .
00000 f, -
2 .
73200 f, -
0 .
73200 f,
1 .
0 f),
Point4D(
0 .
00010 f,
0 .
73210 f, -
2 .
73200 f,
1 .
0 f),
Point4D(
0 .
00010 f,
2 .
73210 f,
0 .
73210 f,
1 .
0 f)}};
::RunTest(polygons, expected);
}
TEST(BSPTree, TwoPlaneIntersectRotate60degrees)
{
const std::deque<MozPolygon> polygons{
MozPolygon{Point4D(-
0 .
00000 f, -
2 .
73200 f,
0 .
73210 f,
1 .
0 f),
Point4D(-
0 .
00000 f, -
0 .
73200 f, -
2 .
73200 f,
1 .
0 f),
Point4D(
0 .
00010 f,
2 .
73210 f, -
0 .
73200 f,
1 .
0 f),
Point4D(
0 .
00010 f,
0 .
73210 f,
2 .
73210 f,
1 .
0 f)},
MozPolygon{Point4D(
2 .
00000 f, -
1 .
73200 f, -
1 .
00000 f,
1 .
0 f),
Point4D(
2 .
00000 f,
1 .
73210 f,
1 .
00010 f,
1 .
0 f),
Point4D(-
2 .
00000 f,
1 .
73210 f,
1 .
00010 f,
1 .
0 f),
Point4D(-
2 .
00000 f, -
1 .
73200 f, -
1 .
00000 f,
1 .
0 f)}};
const std::deque<MozPolygon> expected{
MozPolygon{Point4D(-
2 .
00000 f,
1 .
26793 f,
0 .
73210 f,
1 .
0 f),
Point4D(-
2 .
00000 f, -
1 .
73200 f, -
1 .
00000 f,
1 .
0 f),
Point4D(
2 .
00000 f, -
1 .
73200 f, -
1 .
00000 f,
1 .
0 f),
Point4D(
2 .
00000 f,
1 .
26793 f,
0 .
73210 f,
1 .
0 f)},
MozPolygon{Point4D(-
0 .
00000 f, -
2 .
73200 f,
0 .
73210 f,
1 .
0 f),
Point4D(-
0 .
00000 f, -
0 .
73200 f, -
2 .
73200 f,
1 .
0 f),
Point4D(
0 .
00010 f,
2 .
73210 f, -
0 .
73200 f,
1 .
0 f),
Point4D(
0 .
00010 f,
0 .
73210 f,
2 .
73210 f,
1 .
0 f)},
MozPolygon{Point4D(
2 .
00000 f,
1 .
26793 f,
0 .
73210 f,
1 .
0 f),
Point4D(
2 .
00000 f,
1 .
73210 f,
1 .
00010 f,
1 .
0 f),
Point4D(-
2 .
00000 f,
1 .
73210 f,
1 .
00010 f,
1 .
0 f),
Point4D(-
2 .
00000 f,
1 .
26793 f,
0 .
73210 f,
1 .
0 f)}};
::RunTest(polygons, expected);
}
TEST(BSPTree, TwoPlaneIntersectRotate80degrees)
{
const std::deque<MozPolygon> polygons{
MozPolygon{Point4D(-
0 .
00000 f, -
1 .
19530 f, -
2 .
56340 f,
1 .
0 f),
Point4D(-
0 .
00000 f,
2 .
56350 f, -
1 .
19530 f,
1 .
0 f),
Point4D(
0 .
00010 f,
1 .
19540 f,
2 .
56350 f,
1 .
0 f),
Point4D(
0 .
00010 f, -
2 .
56340 f,
1 .
19540 f,
1 .
0 f)},
MozPolygon{Point4D(
2 .
00000 f,
0 .
68410 f, -
1 .
87930 f,
1 .
0 f),
Point4D(
2 .
00000 f, -
0 .
68400 f,
1 .
87940 f,
1 .
0 f),
Point4D(-
2 .
00000 f, -
0 .
68400 f,
1 .
87940 f,
1 .
0 f),
Point4D(-
2 .
00000 f,
0 .
68410 f, -
1 .
87930 f,
1 .
0 f)}};
const std::deque<MozPolygon> expected{
MozPolygon{Point4D(-
0 .
00000 f, -
1 .
19530 f, -
2 .
56340 f,
1 .
0 f),
Point4D(-
0 .
00000 f,
2 .
56350 f, -
1 .
19530 f,
1 .
0 f),
Point4D(
0 .
00010 f,
1 .
19540 f,
2 .
56350 f,
1 .
0 f),
Point4D(
0 .
00010 f, -
2 .
56340 f,
1 .
19540 f,
1 .
0 f)},
MozPolygon{Point4D(
2 .
00000 f,
0 .
68410 f, -
1 .
87930 f,
1 .
0 f),
Point4D(
2 .
00000 f, -
0 .
68400 f,
1 .
87940 f,
1 .
0 f),
Point4D(-
2 .
00000 f, -
0 .
68400 f,
1 .
87940 f,
1 .
0 f),
Point4D(-
2 .
00000 f,
0 .
68410 f, -
1 .
87930 f,
1 .
0 f)}};
::RunTest(polygons, expected);
}
TEST(BSPTree, TwoPlaneIntersectRotate100degrees)
{
const std::deque<MozPolygon> polygons{
MozPolygon{Point4D(-
0 .
00000 f,
2 .
73210 f, -
0 .
73200 f,
1 .
0 f),
Point4D(-
0 .
00000 f,
0 .
73210 f,
2 .
73210 f,
1 .
0 f),
Point4D(
0 .
00010 f, -
2 .
73200 f,
0 .
73210 f,
1 .
0 f),
Point4D(
0 .
00010 f, -
0 .
73200 f, -
2 .
73200 f,
1 .
0 f)},
MozPolygon{Point4D(
2 .
00000 f,
1 .
73210 f,
1 .
00010 f,
1 .
0 f),
Point4D(
2 .
00000 f, -
1 .
73200 f, -
1 .
00000 f,
1 .
0 f),
Point4D(-
2 .
00000 f, -
1 .
73200 f, -
1 .
00000 f,
1 .
0 f),
Point4D(-
2 .
00000 f,
1 .
73210 f,
1 .
00010 f,
1 .
0 f)}};
const std::deque<MozPolygon> expected{
MozPolygon{Point4D(
2 .
00000 f, -
1 .
26783 f, -
0 .
73200 f,
1 .
0 f),
Point4D(
2 .
00000 f, -
1 .
73200 f, -
1 .
00000 f,
1 .
0 f),
Point4D(-
2 .
00000 f, -
1 .
73200 f, -
1 .
00000 f,
1 .
0 f),
Point4D(-
2 .
00000 f, -
1 .
26783 f, -
0 .
73200 f,
1 .
0 f)},
MozPolygon{Point4D(-
0 .
00000 f,
2 .
73210 f, -
0 .
73200 f,
1 .
0 f),
Point4D(-
0 .
00000 f,
0 .
73210 f,
2 .
73210 f,
1 .
0 f),
Point4D(
0 .
00010 f, -
2 .
73200 f,
0 .
73210 f,
1 .
0 f),
Point4D(
0 .
00010 f, -
0 .
73200 f, -
2 .
73200 f,
1 .
0 f)},
MozPolygon{Point4D(-
2 .
00000 f, -
1 .
26783 f, -
0 .
73200 f,
1 .
0 f),
Point4D(-
2 .
00000 f,
1 .
73210 f,
1 .
00010 f,
1 .
0 f),
Point4D(
2 .
00000 f,
1 .
73210 f,
1 .
00010 f,
1 .
0 f),
Point4D(
2 .
00000 f, -
1 .
26783 f, -
0 .
73200 f,
1 .
0 f)}};
::RunTest(polygons, expected);
}
TEST(BSPTree, TwoPlaneIntersectRotate120degrees)
{
const std::deque<MozPolygon> polygons{
MozPolygon{Point4D(-
0 .
00000 f, -
0 .
73200 f,
2 .
73210 f,
1 .
0 f),
Point4D(-
0 .
00000 f, -
2 .
73200 f, -
0 .
73200 f,
1 .
0 f),
Point4D(
0 .
00010 f,
0 .
73210 f, -
2 .
73200 f,
1 .
0 f),
Point4D(
0 .
00010 f,
2 .
73210 f,
0 .
73210 f,
1 .
0 f)},
MozPolygon{Point4D(
2 .
00000 f, -
1 .
73200 f,
1 .
00000 f,
1 .
0 f),
Point4D(
2 .
00000 f,
1 .
73210 f, -
0 .
99990 f,
1 .
0 f),
Point4D(-
2 .
00000 f,
1 .
73210 f, -
0 .
99990 f,
1 .
0 f),
Point4D(-
2 .
00000 f, -
1 .
73200 f,
1 .
00000 f,
1 .
0 f)}};
const std::deque<MozPolygon> expected{
MozPolygon{Point4D(
2 .
00000 f, -
1 .
73200 f,
1 .
00000 f,
1 .
0 f),
Point4D(
2 .
00000 f,
1 .
73210 f, -
0 .
99990 f,
1 .
0 f),
Point4D(-
2 .
00000 f,
1 .
73210 f, -
0 .
99990 f,
1 .
0 f),
Point4D(-
2 .
00000 f, -
1 .
73200 f,
1 .
00000 f,
1 .
0 f)},
MozPolygon{Point4D(-
0 .
00000 f, -
0 .
73200 f,
2 .
73210 f,
1 .
0 f),
Point4D(-
0 .
00000 f, -
2 .
73200 f, -
0 .
73200 f,
1 .
0 f),
Point4D(
0 .
00010 f,
0 .
73210 f, -
2 .
73200 f,
1 .
0 f),
Point4D(
0 .
00010 f,
2 .
73210 f,
0 .
73210 f,
1 .
0 f)}};
::RunTest(polygons, expected);
}
TEST(BSPTree, TwoPlaneIntersectRotate140degrees)
{
const std::deque<MozPolygon> polygons{
MozPolygon{Point4D(-
0 .
00000 f, -
1 .
19530 f, -
2 .
56340 f,
1 .
0 f),
Point4D(-
0 .
00000 f,
2 .
56350 f, -
1 .
19530 f,
1 .
0 f),
Point4D(
0 .
00010 f,
1 .
19540 f,
2 .
56350 f,
1 .
0 f),
Point4D(
0 .
00010 f, -
2 .
56340 f,
1 .
19540 f,
1 .
0 f)},
MozPolygon{Point4D(
2 .
00000 f,
0 .
68410 f, -
1 .
87930 f,
1 .
0 f),
Point4D(
2 .
00000 f, -
0 .
68400 f,
1 .
87940 f,
1 .
0 f),
Point4D(-
2 .
00000 f, -
0 .
68400 f,
1 .
87940 f,
1 .
0 f),
Point4D(-
2 .
00000 f,
0 .
68410 f, -
1 .
87930 f,
1 .
0 f)}};
const std::deque<MozPolygon> expected{
MozPolygon{Point4D(-
0 .
00000 f, -
1 .
19530 f, -
2 .
56340 f,
1 .
0 f),
Point4D(-
0 .
00000 f,
2 .
56350 f, -
1 .
19530 f,
1 .
0 f),
Point4D(
0 .
00010 f,
1 .
19540 f,
2 .
56350 f,
1 .
0 f),
Point4D(
0 .
00010 f, -
2 .
56340 f,
1 .
19540 f,
1 .
0 f)},
MozPolygon{Point4D(
2 .
00000 f,
0 .
68410 f, -
1 .
87930 f,
1 .
0 f),
Point4D(
2 .
00000 f, -
0 .
68400 f,
1 .
87940 f,
1 .
0 f),
Point4D(-
2 .
00000 f, -
0 .
68400 f,
1 .
87940 f,
1 .
0 f),
Point4D(-
2 .
00000 f,
0 .
68410 f, -
1 .
87930 f,
1 .
0 f)}};
::RunTest(polygons, expected);
}
TEST(BSPTree, TwoPlaneIntersectRotate160degrees)
{
const std::deque<MozPolygon> polygons{
MozPolygon{Point4D(-
0 .
00000 f,
2 .
00000 f,
2 .
00000 f,
1 .
0 f),
Point4D(-
0 .
00000 f, -
2 .
00000 f,
2 .
00000 f,
1 .
0 f),
Point4D(
0 .
00010 f, -
2 .
00000 f, -
2 .
00000 f,
1 .
0 f),
Point4D(
0 .
00010 f,
2 .
00000 f, -
2 .
00000 f,
1 .
0 f)},
MozPolygon{Point4D(
2 .
00000 f, -
0 .
00000 f,
2 .
00000 f,
1 .
0 f),
Point4D(
2 .
00000 f,
0 .
00010 f, -
2 .
00000 f,
1 .
0 f),
Point4D(-
2 .
00000 f,
0 .
00010 f, -
2 .
00000 f,
1 .
0 f),
Point4D(-
2 .
00000 f, -
0 .
00000 f,
2 .
00000 f,
1 .
0 f)}};
const std::deque<MozPolygon> expected{
MozPolygon{Point4D(
2 .
00000 f, -
0 .
00000 f,
2 .
00000 f,
1 .
0 f),
Point4D(
2 .
00000 f,
0 .
00010 f, -
2 .
00000 f,
1 .
0 f),
Point4D(-
2 .
00000 f,
0 .
00010 f, -
2 .
00000 f,
1 .
0 f),
Point4D(-
2 .
00000 f, -
0 .
00000 f,
2 .
00000 f,
1 .
0 f)},
MozPolygon{Point4D(-
0 .
00000 f,
2 .
00000 f,
2 .
00000 f,
1 .
0 f),
Point4D(-
0 .
00000 f, -
2 .
00000 f,
2 .
00000 f,
1 .
0 f),
Point4D(
0 .
00010 f, -
2 .
00000 f, -
2 .
00000 f,
1 .
0 f),
Point4D(
0 .
00010 f,
2 .
00000 f, -
2 .
00000 f,
1 .
0 f)}};
::RunTest(polygons, expected);
}
TEST(BSPTree, TwoPlaneIntersectRotate180degrees)
{
const std::deque<MozPolygon> polygons{
MozPolygon{Point4D(-
0 .
00000 f, -
2 .
00000 f, -
2 .
00000 f,
1 .
0 f),
Point4D(-
0 .
00000 f,
2 .
00000 f, -
2 .
00000 f,
1 .
0 f),
Point4D(
0 .
00010 f,
2 .
00000 f,
2 .
00000 f,
1 .
0 f),
Point4D(
0 .
00010 f, -
2 .
00000 f,
2 .
00000 f,
1 .
0 f)},
MozPolygon{Point4D(
2 .
00000 f,
0 .
00010 f, -
2 .
00000 f,
1 .
0 f),
Point4D(
2 .
00000 f, -
0 .
00000 f,
2 .
00000 f,
1 .
0 f),
Point4D(-
2 .
00000 f, -
0 .
00000 f,
2 .
00000 f,
1 .
0 f),
Point4D(-
2 .
00000 f,
0 .
00010 f, -
2 .
00000 f,
1 .
0 f)}};
const std::deque<MozPolygon> expected{
MozPolygon{Point4D(-
0 .
00000 f, -
2 .
00000 f, -
2 .
00000 f,
1 .
0 f),
Point4D(-
0 .
00000 f,
2 .
00000 f, -
2 .
00000 f,
1 .
0 f),
Point4D(
0 .
00010 f,
2 .
00000 f,
2 .
00000 f,
1 .
0 f),
Point4D(
0 .
00010 f, -
2 .
00000 f,
2 .
00000 f,
1 .
0 f)},
MozPolygon{Point4D(
2 .
00000 f,
0 .
00010 f, -
2 .
00000 f,
1 .
0 f),
Point4D(
2 .
00000 f, -
0 .
00000 f,
2 .
00000 f,
1 .
0 f),
Point4D(-
2 .
00000 f, -
0 .
00000 f,
2 .
00000 f,
1 .
0 f),
Point4D(-
2 .
00000 f,
0 .
00010 f, -
2 .
00000 f,
1 .
0 f)}};
::RunTest(polygons, expected);
}
TEST(BSPTree, TwoPlaneIntersectRotate200degrees)
{
const std::deque<MozPolygon> polygons{
MozPolygon{Point4D(-
0 .
00000 f,
1 .
19540 f,
2 .
56350 f,
1 .
0 f),
Point4D(-
0 .
00000 f, -
2 .
56340 f,
1 .
19540 f,
1 .
0 f),
Point4D(
0 .
00010 f, -
1 .
19530 f, -
2 .
56340 f,
1 .
0 f),
Point4D(
0 .
00010 f,
2 .
56350 f, -
1 .
19530 f,
1 .
0 f)},
MozPolygon{Point4D(
2 .
00000 f, -
0 .
68400 f,
1 .
87940 f,
1 .
0 f),
Point4D(
2 .
00000 f,
0 .
68410 f, -
1 .
87930 f,
1 .
0 f),
Point4D(-
2 .
00000 f,
0 .
68410 f, -
1 .
87930 f,
1 .
0 f),
Point4D(-
2 .
00000 f, -
0 .
68400 f,
1 .
87940 f,
1 .
0 f)}};
const std::deque<MozPolygon> expected{
MozPolygon{Point4D(
2 .
00000 f, -
0 .
68400 f,
1 .
87940 f,
1 .
0 f),
Point4D(
2 .
00000 f,
0 .
68410 f, -
1 .
87930 f,
1 .
0 f),
Point4D(-
2 .
00000 f,
0 .
68410 f, -
1 .
87930 f,
1 .
0 f),
Point4D(-
2 .
00000 f, -
0 .
68400 f,
1 .
87940 f,
1 .
0 f)},
MozPolygon{Point4D(-
0 .
00000 f,
1 .
19540 f,
2 .
56350 f,
1 .
0 f),
Point4D(-
0 .
00000 f, -
2 .
56340 f,
1 .
19540 f,
1 .
0 f),
Point4D(
0 .
00010 f, -
1 .
19530 f, -
2 .
56340 f,
1 .
0 f),
Point4D(
0 .
00010 f,
2 .
56350 f, -
1 .
19530 f,
1 .
0 f)}};
::RunTest(polygons, expected);
}
TEST(BSPTree, TwoPlaneIntersectRotate220degrees)
{
const std::deque<MozPolygon> polygons{
MozPolygon{Point4D(-
0 .
00000 f,
0 .
73210 f, -
2 .
73200 f,
1 .
0 f),
Point4D(-
0 .
00000 f,
2 .
73210 f,
0 .
73210 f,
1 .
0 f),
Point4D(
0 .
00010 f, -
0 .
73200 f,
2 .
73210 f,
1 .
0 f),
Point4D(
0 .
00010 f, -
2 .
73200 f, -
0 .
73200 f,
1 .
0 f)},
MozPolygon{Point4D(
2 .
00000 f,
1 .
73210 f, -
0 .
99990 f,
1 .
0 f),
Point4D(
2 .
00000 f, -
1 .
73200 f,
1 .
00000 f,
1 .
0 f),
Point4D(-
2 .
00000 f, -
1 .
73200 f,
1 .
00000 f,
1 .
0 f),
Point4D(-
2 .
00000 f,
1 .
73210 f, -
0 .
99990 f,
1 .
0 f)}};
const std::deque<MozPolygon> expected{
MozPolygon{Point4D(-
0 .
00000 f,
0 .
73210 f, -
2 .
73200 f,
1 .
0 f),
Point4D(-
0 .
00000 f,
2 .
73210 f,
0 .
73210 f,
1 .
0 f),
Point4D(
0 .
00010 f, -
0 .
73200 f,
2 .
73210 f,
1 .
0 f),
Point4D(
0 .
00010 f, -
2 .
73200 f, -
0 .
73200 f,
1 .
0 f)},
MozPolygon{Point4D(
2 .
00000 f,
1 .
73210 f, -
0 .
99990 f,
1 .
0 f),
Point4D(
2 .
00000 f, -
1 .
73200 f,
1 .
00000 f,
1 .
0 f),
Point4D(-
2 .
00000 f, -
1 .
73200 f,
1 .
00000 f,
1 .
0 f),
Point4D(-
2 .
00000 f,
1 .
73210 f, -
0 .
99990 f,
1 .
0 f)}};
::RunTest(polygons, expected);
}
TEST(BSPTree, TwoPlaneIntersectRotate240degrees)
{
const std::deque<MozPolygon> polygons{
MozPolygon{Point4D(-
0 .
00000 f, -
2 .
73200 f,
0 .
73210 f,
1 .
0 f),
Point4D(-
0 .
00000 f, -
0 .
73200 f, -
2 .
73200 f,
1 .
0 f),
Point4D(
0 .
00010 f,
2 .
73210 f, -
0 .
73200 f,
1 .
0 f),
Point4D(
0 .
00010 f,
0 .
73210 f,
2 .
73210 f,
1 .
0 f)},
MozPolygon{Point4D(
2 .
00000 f, -
1 .
73200 f, -
1 .
00000 f,
1 .
0 f),
Point4D(
2 .
00000 f,
1 .
73210 f,
1 .
00010 f,
1 .
0 f),
Point4D(-
2 .
00000 f,
1 .
73210 f,
1 .
00010 f,
1 .
0 f),
Point4D(-
2 .
00000 f, -
1 .
73200 f, -
1 .
00000 f,
1 .
0 f)}};
const std::deque<MozPolygon> expected{
MozPolygon{Point4D(-
2 .
00000 f,
1 .
26793 f,
0 .
73210 f,
1 .
0 f),
Point4D(-
2 .
00000 f, -
1 .
73200 f, -
1 .
00000 f,
1 .
0 f),
Point4D(
2 .
00000 f, -
1 .
73200 f, -
1 .
00000 f,
1 .
0 f),
Point4D(
2 .
00000 f,
1 .
26793 f,
0 .
73210 f,
1 .
0 f)},
MozPolygon{Point4D(-
0 .
00000 f, -
2 .
73200 f,
0 .
73210 f,
1 .
0 f),
Point4D(-
0 .
00000 f, -
0 .
73200 f, -
2 .
73200 f,
1 .
0 f),
Point4D(
0 .
00010 f,
2 .
73210 f, -
0 .
73200 f,
1 .
0 f),
Point4D(
0 .
00010 f,
0 .
73210 f,
2 .
73210 f,
1 .
0 f)},
MozPolygon{Point4D(
2 .
00000 f,
1 .
26793 f,
0 .
73210 f,
1 .
0 f),
Point4D(
2 .
00000 f,
1 .
73210 f,
1 .
00010 f,
1 .
0 f),
Point4D(-
2 .
00000 f,
1 .
73210 f,
1 .
00010 f,
1 .
0 f),
Point4D(-
2 .
00000 f,
1 .
26793 f,
0 .
73210 f,
1 .
0 f)}};
::RunTest(polygons, expected);
}
TEST(BSPTree, TwoPlaneIntersectRotate260degrees)
{
const std::deque<MozPolygon> polygons{
MozPolygon{Point4D(-
0 .
00000 f,
1 .
19540 f,
2 .
56350 f,
1 .
0 f),
Point4D(-
0 .
00000 f, -
2 .
56340 f,
1 .
19540 f,
1 .
0 f),
Point4D(
0 .
00010 f, -
1 .
19530 f, -
2 .
56340 f,
1 .
0 f),
Point4D(
0 .
00010 f,
2 .
56350 f, -
1 .
19530 f,
1 .
0 f)},
MozPolygon{Point4D(
2 .
00000 f, -
0 .
68400 f,
1 .
87940 f,
1 .
0 f),
Point4D(
2 .
00000 f,
0 .
68410 f, -
1 .
87930 f,
1 .
0 f),
Point4D(-
2 .
00000 f,
0 .
68410 f, -
1 .
87930 f,
1 .
0 f),
Point4D(-
2 .
00000 f, -
0 .
68400 f,
1 .
87940 f,
1 .
0 f)}};
const std::deque<MozPolygon> expected{
MozPolygon{Point4D(
2 .
00000 f, -
0 .
68400 f,
1 .
87940 f,
1 .
0 f),
Point4D(
2 .
00000 f,
0 .
68410 f, -
1 .
87930 f,
1 .
0 f),
Point4D(-
2 .
00000 f,
0 .
68410 f, -
1 .
87930 f,
1 .
0 f),
Point4D(-
2 .
00000 f, -
0 .
68400 f,
1 .
87940 f,
1 .
0 f)},
MozPolygon{Point4D(-
0 .
00000 f,
1 .
19540 f,
2 .
56350 f,
1 .
0 f),
Point4D(-
0 .
00000 f, -
2 .
56340 f,
1 .
19540 f,
1 .
0 f),
Point4D(
0 .
00010 f, -
1 .
19530 f, -
2 .
56340 f,
1 .
0 f),
Point4D(
0 .
00010 f,
2 .
56350 f, -
1 .
19530 f,
1 .
0 f)}};
::RunTest(polygons, expected);
}
TEST(BSPTree, TwoPlaneIntersectRotate280degrees)
{
const std::deque<MozPolygon> polygons{
MozPolygon{Point4D(-
0 .
00000 f,
2 .
73210 f, -
0 .
73200 f,
1 .
0 f),
Point4D(-
0 .
00000 f,
0 .
73210 f,
2 .
73210 f,
1 .
0 f),
Point4D(
0 .
00010 f, -
2 .
73200 f,
0 .
73210 f,
1 .
0 f),
Point4D(
0 .
00010 f, -
0 .
73200 f, -
2 .
73200 f,
1 .
0 f)},
MozPolygon{Point4D(
2 .
00000 f,
1 .
73210 f,
1 .
00010 f,
1 .
0 f),
Point4D(
2 .
00000 f, -
1 .
73200 f, -
1 .
00000 f,
1 .
0 f),
Point4D(-
2 .
00000 f, -
1 .
73200 f, -
1 .
00000 f,
1 .
0 f),
Point4D(-
2 .
00000 f,
1 .
73210 f,
1 .
00010 f,
1 .
0 f)}};
const std::deque<MozPolygon> expected{
MozPolygon{Point4D(
2 .
00000 f, -
1 .
26783 f, -
0 .
73200 f,
1 .
0 f),
Point4D(
2 .
00000 f, -
1 .
73200 f, -
1 .
00000 f,
1 .
0 f),
Point4D(-
2 .
00000 f, -
1 .
73200 f, -
1 .
00000 f,
1 .
0 f),
Point4D(-
2 .
00000 f, -
1 .
26783 f, -
0 .
73200 f,
1 .
0 f)},
MozPolygon{Point4D(-
0 .
00000 f,
2 .
73210 f, -
0 .
73200 f,
1 .
0 f),
Point4D(-
0 .
00000 f,
0 .
73210 f,
2 .
73210 f,
1 .
0 f),
Point4D(
0 .
00010 f, -
2 .
73200 f,
0 .
73210 f,
1 .
0 f),
Point4D(
0 .
00010 f, -
0 .
73200 f, -
2 .
73200 f,
1 .
0 f)},
MozPolygon{Point4D(-
2 .
00000 f, -
1 .
26783 f, -
0 .
73200 f,
1 .
0 f),
Point4D(-
2 .
00000 f,
1 .
73210 f,
1 .
00010 f,
1 .
0 f),
Point4D(
2 .
00000 f,
1 .
73210 f,
1 .
00010 f,
1 .
0 f),
Point4D(
2 .
00000 f, -
1 .
26783 f, -
0 .
73200 f,
1 .
0 f)}};
::RunTest(polygons, expected);
}
TEST(BSPTree, TwoPlaneIntersectRotate300degrees)
{
const std::deque<MozPolygon> polygons{
MozPolygon{Point4D(-
0 .
00000 f,
0 .
73210 f, -
2 .
73200 f,
1 .
0 f),
Point4D(-
0 .
00000 f,
2 .
73210 f,
0 .
73210 f,
1 .
0 f),
Point4D(
0 .
00010 f, -
0 .
73200 f,
2 .
73210 f,
1 .
0 f),
Point4D(
0 .
00010 f, -
2 .
73200 f, -
0 .
73200 f,
1 .
0 f)},
MozPolygon{Point4D(
2 .
00000 f,
1 .
73210 f, -
0 .
99990 f,
1 .
0 f),
Point4D(
2 .
00000 f, -
1 .
73200 f,
1 .
00000 f,
1 .
0 f),
Point4D(-
2 .
00000 f, -
1 .
73200 f,
1 .
00000 f,
1 .
0 f),
Point4D(-
2 .
00000 f,
1 .
73210 f, -
0 .
99990 f,
1 .
0 f)}};
const std::deque<MozPolygon> expected{
MozPolygon{Point4D(-
0 .
00000 f,
0 .
73210 f, -
2 .
73200 f,
1 .
0 f),
Point4D(-
0 .
00000 f,
2 .
73210 f,
0 .
73210 f,
1 .
0 f),
Point4D(
0 .
00010 f, -
0 .
73200 f,
2 .
73210 f,
1 .
0 f),
Point4D(
0 .
00010 f, -
2 .
73200 f, -
0 .
73200 f,
1 .
0 f)},
MozPolygon{Point4D(
2 .
00000 f,
1 .
73210 f, -
0 .
99990 f,
1 .
0 f),
Point4D(
2 .
00000 f, -
1 .
73200 f,
1 .
00000 f,
1 .
0 f),
Point4D(-
2 .
00000 f, -
1 .
73200 f,
1 .
00000 f,
1 .
0 f),
Point4D(-
2 .
00000 f,
1 .
73210 f, -
0 .
99990 f,
1 .
0 f)}};
::RunTest(polygons, expected);
}
TEST(BSPTree, TwoPlaneIntersectRotate320degrees)
{
const std::deque<MozPolygon> polygons{
MozPolygon{Point4D(-
0 .
00000 f, -
1 .
19530 f, -
2 .
56340 f,
1 .
0 f),
Point4D(-
0 .
00000 f,
2 .
56350 f, -
1 .
19530 f,
1 .
0 f),
Point4D(
0 .
00010 f,
1 .
19540 f,
2 .
56350 f,
1 .
0 f),
Point4D(
0 .
00010 f, -
2 .
56340 f,
1 .
19540 f,
1 .
0 f)},
MozPolygon{Point4D(
2 .
00000 f,
0 .
68410 f, -
1 .
87930 f,
1 .
0 f),
Point4D(
2 .
00000 f, -
0 .
68400 f,
1 .
87940 f,
1 .
0 f),
Point4D(-
2 .
00000 f, -
0 .
68400 f,
1 .
87940 f,
1 .
0 f),
Point4D(-
2 .
00000 f,
0 .
68410 f, -
1 .
87930 f,
1 .
0 f)}};
const std::deque<MozPolygon> expected{
MozPolygon{Point4D(-
0 .
00000 f, -
1 .
19530 f, -
2 .
56340 f,
1 .
0 f),
Point4D(-
0 .
00000 f,
2 .
56350 f, -
1 .
19530 f,
1 .
0 f),
Point4D(
0 .
00010 f,
1 .
19540 f,
2 .
56350 f,
1 .
0 f),
Point4D(
0 .
00010 f, -
2 .
56340 f,
1 .
19540 f,
1 .
0 f)},
MozPolygon{Point4D(
2 .
00000 f,
0 .
68410 f, -
1 .
87930 f,
1 .
0 f),
Point4D(
2 .
00000 f, -
0 .
68400 f,
1 .
87940 f,
1 .
0 f),
Point4D(-
2 .
00000 f, -
0 .
68400 f,
1 .
87940 f,
1 .
0 f),
Point4D(-
2 .
00000 f,
0 .
68410 f, -
1 .
87930 f,
1 .
0 f)}};
::RunTest(polygons, expected);
}
TEST(BSPTree, TwoPlaneIntersectRotate340degrees)
{
const std::deque<MozPolygon> polygons{
MozPolygon{Point4D(-
0 .
00000 f, -
2 .
00000 f, -
2 .
00000 f,
1 .
0 f),
Point4D(-
0 .
00000 f,
2 .
00000 f, -
2 .
00000 f,
1 .
0 f),
Point4D(
0 .
00010 f,
2 .
00000 f,
2 .
00000 f,
1 .
0 f),
Point4D(
0 .
00010 f, -
2 .
00000 f,
2 .
00000 f,
1 .
0 f)},
MozPolygon{Point4D(
2 .
00000 f,
0 .
00010 f, -
2 .
00000 f,
1 .
0 f),
Point4D(
2 .
00000 f, -
0 .
00000 f,
2 .
00000 f,
1 .
0 f),
Point4D(-
2 .
00000 f, -
0 .
00000 f,
2 .
00000 f,
1 .
0 f),
Point4D(-
2 .
00000 f,
0 .
00010 f, -
2 .
00000 f,
1 .
0 f)}};
const std::deque<MozPolygon> expected{
MozPolygon{Point4D(-
0 .
00000 f, -
2 .
00000 f, -
2 .
00000 f,
1 .
0 f),
Point4D(-
0 .
00000 f,
2 .
00000 f, -
2 .
00000 f,
1 .
0 f),
Point4D(
0 .
00010 f,
2 .
00000 f,
2 .
00000 f,
1 .
0 f),
Point4D(
0 .
00010 f, -
2 .
00000 f,
2 .
00000 f,
1 .
0 f)},
MozPolygon{Point4D(
2 .
00000 f,
0 .
00010 f, -
2 .
00000 f,
1 .
0 f),
Point4D(
2 .
00000 f, -
0 .
00000 f,
2 .
00000 f,
1 .
0 f),
Point4D(-
2 .
00000 f, -
0 .
00000 f,
2 .
00000 f,
1 .
0 f),
Point4D(-
2 .
00000 f,
0 .
00010 f, -
2 .
00000 f,
1 .
0 f)}};
::RunTest(polygons, expected);
}
TEST(BSPTree, TwoPlaneIntersectRotate360degrees)
{
const std::deque<MozPolygon> polygons{
MozPolygon{Point4D(-
0 .
00000 f, -
2 .
00000 f, -
2 .
00000 f,
1 .
0 f),
Point4D(-
0 .
00000 f,
2 .
00000 f, -
2 .
00000 f,
1 .
0 f),
Point4D(
0 .
00010 f,
2 .
00000 f,
2 .
00000 f,
1 .
0 f),
Point4D(
0 .
00010 f, -
2 .
00000 f,
2 .
00000 f,
1 .
0 f)},
MozPolygon{Point4D(
2 .
00000 f,
0 .
00010 f, -
2 .
00000 f,
1 .
0 f),
Point4D(
2 .
00000 f, -
0 .
00000 f,
2 .
00000 f,
1 .
0 f),
Point4D(-
2 .
00000 f, -
0 .
00000 f,
2 .
00000 f,
1 .
0 f),
Point4D(-
2 .
00000 f,
0 .
00010 f, -
2 .
00000 f,
1 .
0 f)}};
const std::deque<MozPolygon> expected{
MozPolygon{Point4D(-
0 .
00000 f, -
2 .
00000 f, -
2 .
00000 f,
1 .
0 f),
Point4D(-
0 .
00000 f,
2 .
00000 f, -
2 .
00000 f,
1 .
0 f),
Point4D(
0 .
00010 f,
2 .
00000 f,
2 .
00000 f,
1 .
0 f),
Point4D(
0 .
00010 f, -
2 .
00000 f,
2 .
00000 f,
1 .
0 f)},
MozPolygon{Point4D(
2 .
00000 f,
0 .
00010 f, -
2 .
00000 f,
1 .
0 f),
Point4D(
2 .
00000 f, -
0 .
00000 f,
2 .
00000 f,
1 .
0 f),
Point4D(-
2 .
00000 f, -
0 .
00000 f,
2 .
00000 f,
1 .
0 f),
Point4D(-
2 .
00000 f,
0 .
00010 f, -
2 .
00000 f,
1 .
0 f)}};
::RunTest(polygons, expected);
}
Messung V0.5 in Prozent C=99 H=97 G=97
¤ Dauer der Verarbeitung: 0.17 Sekunden
(vorverarbeitet am 2026-06-10)
¤
*© Formatika GbR, Deutschland