You can not select more than 25 topics
Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
72 lines
5.9 KiB
72 lines
5.9 KiB
#include <cstdio>
|
|
#include "../include/device/Nurbs/nurbs_curve.cuh"
|
|
#include "../include/device/Nurbs/nurbs_surface.cuh"
|
|
|
|
int main() {
|
|
// NurbsSurface::Surface nurbsSurfaceEvaluator({
|
|
// {{-1, 0, 0, 0.3}, {0, 1, 6, 0.8}, {1, 0, 4, 0.5}, {2, 0.5, 3, 0.8}, {3, 3, 1, 0.6}, {4, -5, 0, 0.7}},
|
|
// {{-2, 1, 1.2, 0.2}, {1, 2, 3, 0.3}, {2, 2, 3, 0.6}, {-1, -0.3, 2, 0.4}, {-1, 2, 0, 0.9}, {7, -8, 2, 0.3}},
|
|
// {{-3.4, 2, 3, 0.8}, {2, 3, 0, 0.6}, {4, 3, 7, 0.3}, {-2, 0, -0.2, 0.4}, {1, 1.7, 5, 0.6}, {9, -10.3, 6, 0.7}},
|
|
// {{-1.5, 3.2, 1, 0.5}, {2.6, 7, -2, 0.7}, {5, 0.8, 4.2, 0.8}, {-4, 1, 4, 0.7}, {2.1, 4, -2, 0.3}, {11, -6, 4, 0.6}},
|
|
// {{-0.2, 2, 0, 0.7}, {5, 3, 2, 0.4}, {5, 1.5, 1.4, 0.6}, {-3, 2, 5, 0.8}, {0.8, 1.3, 0, 0.5}, {15, -2, 0.9, 0.6}},
|
|
// {{3, 1.4, -1, 0.4}, {6, 2, 4, 0.6}, {-1, 0, -2, 0.4}, {0, 2.8, 2, 0.6}, {-0.5, 2, 1.2, 0.9}, {7, -3, -2, 0.3}},},
|
|
// {0, 0, 0, 0.1, 0.5, 0.8, 1, 1, 1},
|
|
// {0, 0, 0, 0.2, 0.7, 0.8, 1, 1, 1});
|
|
// NurbsSurface::Evaluator nurbsSurfaceEvaluator({
|
|
// {{-1, 0, 0, 1}, {0, 1, 6, 1}, {1, 0, 4, 1}, {2, 0.5, 3, 1}, {3, 3, 1, 1}, {4, -5, 0, 1}},
|
|
// {{-2, 1, 1.2, 1}, {1, 2, 3, 1}, {2, 2, 3, 1}, {-1, -0.3, 2, 1}, {-1, 2, 0, 1}, {7, -8, 2, 1}},
|
|
// {{-3.4, 2, 3, 1}, {2, 3, 0, 1}, {4, 3, 7, 1}, {-2, 0, -0.2, 1}, {1, 1.7, 5, 1}, {9, -10.3, 6, 1}},
|
|
// {{-1.5, 3.2, 1, 1}, {2.6, 7, -2, 1}, {5, 0.8, 4.2, 1}, {-4, 1, 4, 1}, {2.1, 4, -2, 1}, {11, -6, 4, 1}},
|
|
// {{-0.2, 2, 0, 1}, {5, 3, 2, 1}, {5, 1.5, 1.4, 1}, {-3, 2, 5, 1}, {0.8, 1.3, 0, 1}, {15, -2, 0.9, 1}},
|
|
// {{3, 1.4, -1, 1}, {6, 2, 4, 1}, {-1, 0, -2, 1}, {0, 2.8, 2, 1}, {-0.5, 2, 1.2, 1}, {7, -3, -2, 1}},},
|
|
// {0, 0, 0, 0.1, 0.5, 0.8, 1, 1, 1},
|
|
// {0, 0, 0, 0.2, 0.7, 0.8, 1, 1, 1});
|
|
|
|
// NurbsSurface::Surface nurbsSurfaceEvaluator({
|
|
// {{-0.57, -0.48, -0.31, 1}, {-0.17, -0.49, -0.43, 1}, {0.3, -0.53, -0.27, 1}, {0.66, -0.42, -0.36, 1}},
|
|
// {{-0.53, -0.15, -0.03, 1}, {-0.21, -0.12, 0.09, 1}, {0.10, -0.18, 0.03, 1}, {0.49, -0.15, -0.03, 1}},
|
|
// {{-0.61, 0.22, 0.09, 1}, {-0.21, 0.20, 0.09, 1}, {0.13, 0.20, 0.12, 1}, {0.49, 0.19, -0.03, 1}},
|
|
// {{-0.52, 0.51, 0.13, 1}, {-0.20, 0.32, 0.36, 1}, {0.18, 0.29, 0.28, 1}, {0.51, 0.53, 0.12, 1}}
|
|
// }, {0, 0, 0, 0, 1, 1, 1, 1}, {0, 0, 0, 0, 1, 1, 1, 1});
|
|
NurbsSurface::Surface nurbsSurfaceEvaluator({
|
|
{{2, -2, -2, 1}, {-2.5, -2.2, -1.5, 3}, {-2, -2, -0.5, 4}, {-2, -2, 1.5, 2}},
|
|
{{2, -1, -2, 2}, {-2.5, -1.2, -1.5, 1}, {-2, -1, -0.5, 1}, {-2, -1, 1.5, 1}},
|
|
{{3, 1.2, -2, 9}, {-2.5, 1.2, -1.5, 1}, {-2, 1.5, -0.5, 7}, {-2, 1.5, 1.5, 4}},
|
|
{{2, 2, -2, 1}, {-2.5, 2, -1.5, 1}, {-2, 2.5, -0.5, 7}, {-2, 2, 1.5, 1}}
|
|
}, {0, 0, 0, 0, 1, 1, 1, 1}, {0, 0, 0, 0, 1, 1, 1, 1});
|
|
nurbsSurfaceEvaluator.setRecordTime(true);
|
|
|
|
nurbsSurfaceEvaluator.buildGaussMap(9); // 构建曲面的Gauss map
|
|
// nurbsSurfaceEvaluator.gauss_map.printQuadTree(); // 打印整棵Gauss map树
|
|
auto overlappedLeafNodes = NurbsSurface::getOverlappedLeafNodes(nurbsSurfaceEvaluator.gauss_map,
|
|
nurbsSurfaceEvaluator.gauss_map);
|
|
printf("overlapped leafNodes cnt: %llu\n", overlappedLeafNodes.size());
|
|
//判定两个Surface构造的GaussMap在指定u、v范围内是否有重合
|
|
auto isRegionallyOverlapped = NurbsSurface::isGaussMapsOverlapped(nurbsSurfaceEvaluator.gauss_map,
|
|
nurbsSurfaceEvaluator.gauss_map, {0.2, 0.3},
|
|
{0.2, 0.3}, {0.28, 0.38}, {0.28, 0.38}, {0, 1},
|
|
{0, 1}, {0, 1}, {0, 1});
|
|
printf("is guass map overlapped: %d\n", isRegionallyOverlapped);
|
|
|
|
// nurbsSurfaceEvaluator.buildBHV(9); // 构建曲面的BVH
|
|
// nurbsSurfaceEvaluator.evaluate(101, 101); // 求值
|
|
printf("==============================\n");
|
|
|
|
NurbsCurve::Curve nurbsCurveEvaluator(
|
|
{{-1, 0, 0, 0.3},
|
|
{0, 1, 6, 0.4},
|
|
{1, 0, 4, 0.5},
|
|
{2, 0.5, 3, 0.4},
|
|
{3, 3, 1, 0.5},
|
|
{4, -5, 0, 0.7}},
|
|
{0, 0, 0, 0.1, 0.5, 0.8, 1, 1, 1});
|
|
nurbsCurveEvaluator.setRecordTime(true);
|
|
|
|
auto res = nurbsCurveEvaluator.evaluate(11);
|
|
for (auto &re: res) {
|
|
printf("%f, %f, %f\n", re[0], re[1], re[2]);
|
|
}
|
|
printf("\n");
|
|
|
|
return 0;
|
|
}
|