You cannot select more than 25 topics
Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
128 lines
3.2 KiB
C++
128 lines
3.2 KiB
C++
|
|
#include <chrono>
|
|
#include <cstdlib>
|
|
#include <future>
|
|
#include <iostream>
|
|
#include <memory>
|
|
#include <thread>
|
|
#include <vector>
|
|
|
|
#include <catch.hpp>
|
|
#include <SurfaceGrid.h>
|
|
|
|
TEST_CASE("Point", "Test1")
|
|
{
|
|
ais::Point p(2, 2);
|
|
CHECK(p.in_line(ais::Point(0, 0), ais::Point(1, 1), false));
|
|
CHECK(p.in_line(ais::Point(0, 0), ais::Point(3, 3)));
|
|
|
|
std::vector<ais::Point> region{{0, 0}, {0, 1}, {1, 1}, {1, 0}, {0, 0}};
|
|
std::vector<ais::Point> region1{{0, 0}, {0, 3}, {3, 3}, {3, 0}, {0, 0}};
|
|
std::vector<ais::Point> region2{{0, 0}, {0, 2}, {2, 2}, {2, 0}, {0, 0}};
|
|
std::vector<ais::Point> region3{{1, 1}, {2, 3}, {4, 2}, {2, 0}, {1, 1}};
|
|
|
|
CHECK(!p.in_polygon(region));
|
|
CHECK(p.in_polygon(region1));
|
|
CHECK(p.in_polygon(region2));
|
|
CHECK(p.in_polygon(region3));
|
|
|
|
ais::PointXYZ p1("2.3,15,-1");
|
|
REQUIRE(p1 == ais::PointXYZ(2.3, 15, -1));
|
|
}
|
|
|
|
TEST_CASE("PointInterpolate", "Test1")
|
|
{
|
|
ais::Point3D p1(2, 2, 2);
|
|
ais::Point3D p2(4, 4, 4);
|
|
ais::Point3D p3(2, 4, 6);
|
|
|
|
ais::Point3D p(3.5, 2.5, INFINITY);
|
|
|
|
auto z1 = p.point_interpolate(p1, p2, p3);
|
|
auto z2 = p.point_interpolate(p2, p3, p1);
|
|
auto z3 = p.point_interpolate(p3, p1, p2);
|
|
|
|
std::cout << z1 << std::endl;
|
|
std::cout << z2 << std::endl;
|
|
std::cout << z3 << std::endl;
|
|
}
|
|
|
|
TEST_CASE("Polygon", "Test1")
|
|
{
|
|
std::vector<ais::Point> p1{{2, 5}, {7, 5}, {7, 10}, {2, 10}, {2, 5}};
|
|
std::vector<ais::Point> p2{{2, 2}, {2, 3}, {3, 3}, {3, 2}, {2, 2}};
|
|
|
|
CHECK(!ais::polygon_intersect(p1, p2));
|
|
}
|
|
|
|
TEST_CASE("Triangle", "Test1")
|
|
{
|
|
std::vector<ais::Point> p{{1.78, 1.4}, {2, 1.1}, {2.43, 3.3}, {3.3, 2.22}, {2.3, 1.88}};
|
|
std::vector<ais::Triangle<ais::Point>> t;
|
|
ais::delaunay_triangulation(p, t);
|
|
|
|
CHECK(t.size() == 4);
|
|
}
|
|
|
|
TEST_CASE("PointInterpolate0", "Test2")
|
|
{
|
|
ais::Point3D p1(2, 2, 2);
|
|
ais::Point3D p2(4, 4, 0);
|
|
ais::Point3D p3(2, 4, 0);
|
|
|
|
ais::Point3D p(3.5, 2.5, INFINITY);
|
|
|
|
auto z1 = p.point_interpolate(p1, p2, p3);
|
|
auto z2 = p.point_interpolate(p2, p3, p1);
|
|
auto z3 = p.point_interpolate(p3, p1, p2);
|
|
|
|
std::cout << z1 << std::endl;
|
|
std::cout << z2 << std::endl;
|
|
std::cout << z3 << std::endl;
|
|
}
|
|
|
|
|
|
TEST_CASE("BreakLine", "Test1")
|
|
{
|
|
ais::BreakLine bl("4,1\n0.0465, 2.1455,-10\n4.6455, 3.5975,-8\n6.969, 5.4365,-4.5\n8.9055, 6.89,-5.5\n");
|
|
CHECK(bl.points.size() == 4);
|
|
|
|
std::cout << bl << std::endl;
|
|
|
|
ais::BreakLineFile blf("DemoBreakLine.bln");
|
|
for (auto kv : blf.lines)
|
|
{
|
|
std::cout << kv.second << std::endl;
|
|
}
|
|
}
|
|
|
|
TEST_CASE("Fault", "Test1")
|
|
{
|
|
ais::Fault fault("4,1\n0.0465, 2.1455,-10\n4.6455, 3.5975,-8\n6.969, 5.4365,-4.5\n8.9055, 6.89,-5.5\n");
|
|
CHECK(fault.points.size() == 4);
|
|
|
|
std::cout << fault << std::endl;
|
|
|
|
ais::FaultFile blf("DemoFault.bln");
|
|
for (auto kv : blf.faults)
|
|
{
|
|
std::cout << kv.second << std::endl;
|
|
}
|
|
|
|
ais::FaultFile blf2("Faults.dat");
|
|
for (auto kv : blf2.faults)
|
|
{
|
|
std::cout << kv.second << std::endl;
|
|
}
|
|
|
|
ais::FaultFile blf3("Faults.dfd");
|
|
for (auto kv : blf3.faults)
|
|
{
|
|
std::cout << kv.second << std::endl;
|
|
}
|
|
|
|
ais::Fault fault2("4,1\n0,0\n2,2\n2,5\n5,5\n");
|
|
std::cout << fault2 << std::endl;
|
|
ais::Point p1{2, 3};
|
|
CHECK(p1.in_polylines(fault2.points));
|
|
} |