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.
67 lines
3.7 KiB
67 lines
3.7 KiB
2 years ago
|
#include <iostream>
|
||
|
#include "include/C2C4.h"
|
||
|
|
||
|
using namespace std;
|
||
|
|
||
|
int main()
|
||
|
{
|
||
|
C2C4 c2C4;
|
||
|
c2C4.srf1.degree_u = 2;
|
||
|
c2C4.srf1.degree_v = 2;
|
||
|
c2C4.srf1.knots_u = { 0, 0, 0, 0.1, 0.5, 0.8, 1, 1, 1 };
|
||
|
c2C4.srf1.knots_v = { 0, 0, 0, 0.2, 0.7, 0.8, 1, 1, 1 };
|
||
|
c2C4.srf1.control_points = { 6, 6, {
|
||
|
glm::vec3(-1, 0, 0), glm::vec3(0, 1, 6), glm::vec3(1, 0, 4), glm::vec3(2, 0.5, 3), glm::vec3(3, 3, 1), glm::vec3(4, -5, 0),
|
||
|
glm::vec3(-2, 1, 1.2), glm::vec3(1, 2, 3), glm::vec3(2, 2, 3), glm::vec3(-1, -0.3, 2), glm::vec3(-1, 2, 0), glm::vec3(7, -8, 2),
|
||
|
glm::vec3(-3.4, 2, 3), glm::vec3(2, 3, 0), glm::vec3(4, 3, 7), glm::vec3(-2, 0, -0.2), glm::vec3(1, 1.7, 5), glm::vec3(9, -10.3, 6),
|
||
|
glm::vec3(-1.5, 3.2, 1), glm::vec3(2.6, 7, -2), glm::vec3(5, 0.8, 4.2), glm::vec3(-4, 1, 4), glm::vec3(2.1, 4, -2), glm::vec3(11, -6, 4),
|
||
|
glm::vec3(-0.2, 2, 0), glm::vec3(5, 3, 2), glm::vec3(5, 1.5, 1.4), glm::vec3(-3, 2, 5), glm::vec3(0.8, 1.3, 0), glm::vec3(15, -2, 0.9),
|
||
|
glm::vec3(3, 1.4, -1), glm::vec3(6, 2, 4), glm::vec3(-1, 0, -2), glm::vec3(0, 2.8, 2), glm::vec3(-0.5, 2, 1.2), glm::vec3(7, -3, -2),
|
||
|
}};
|
||
|
c2C4.srf1.weights = {6, 6, {0.3, 0.8, 0.5, 0.8, 0.6, 0.7,
|
||
|
0.2, 0.3, 0.6, 0.4, 0.9, 0.3,
|
||
|
0.8, 0.6, 0.3, 0.4, 0.6, 0.7,
|
||
|
0.5, 0.7, 0.8, 0.7, 0.3, 0.6,
|
||
|
0.7, 0.4, 0.6, 0.8, 0.5, 0.6,
|
||
|
0.4, 0.6, 0.4, 0.6, 0.9, 0.3
|
||
|
}};
|
||
|
|
||
|
c2C4.srf2.degree_u = 2;
|
||
|
c2C4.srf2.degree_v = 2;
|
||
|
c2C4.srf2.knots_u = { 0, 0, 0, 0.2, 0.5, 0.7, 1, 1, 1 };
|
||
|
c2C4.srf2.knots_v = { 0, 0, 0, 0.2, 0.6, 0.8, 1, 1, 1 };
|
||
|
c2C4.srf2.control_points = { 6, 6, {
|
||
|
glm::vec3(-1, 0, -2), glm::vec3(0, 1, 6), glm::vec3(1, 0, 4), glm::vec3(2, 0, 3), glm::vec3(3, 3, 1), glm::vec3(4, -5, 0),
|
||
|
glm::vec3(-2, 1, 1), glm::vec3(1, 2, 3), glm::vec3(2, 2, 3), glm::vec3(-1, 0, 2), glm::vec3(-1, 2, 0), glm::vec3(7, -5, 2),
|
||
|
glm::vec3(-3, 2, 3), glm::vec3(2, 3, 0), glm::vec3(4, 3, 7), glm::vec3(-2, 0, 0), glm::vec3(1, 1, 5), glm::vec3(3, -2, 4),
|
||
|
glm::vec3(-1, 3, 2), glm::vec3(2, 4, -2), glm::vec3(5, 0, 4), glm::vec3(-4, 1, 4), glm::vec3(2, 4, -2), glm::vec3(4, -3, 4),
|
||
|
glm::vec3(0, 2, 0), glm::vec3(5, 3, 2), glm::vec3(5, 1, 1), glm::vec3(-3, 2, 5), glm::vec3(0, 1.3, 0), glm::vec3(2, -2, 0),
|
||
|
glm::vec3(3, 2, -2), glm::vec3(6, 2, 4), glm::vec3(-1, 0, -2), glm::vec3(0, 2, 2), glm::vec3(0, 2, 1.2), glm::vec3(2, -3, -2),
|
||
|
}};
|
||
|
c2C4.srf2.weights = {6, 6, {0.3, 0.8, 0.5, 0.8, 0.6, 0.7,
|
||
|
0.2, 0.3, 0.6, 0.4, 0.9, 0.3,
|
||
|
0.8, 0.6, 0.3, 0.4, 0.6, 0.7,
|
||
|
0.5, 0.7, 0.8, 0.7, 0.3, 0.6,
|
||
|
0.7, 0.4, 0.6, 0.8, 0.5, 0.6,
|
||
|
0.4, 0.6, 0.4, 0.6, 0.9, 0.3
|
||
|
}};
|
||
|
if (!surfaceIsValid(c2C4.srf1) || !surfaceIsValid(c2C4.srf2)) {
|
||
|
// check if degree, knots and control points are configured as per
|
||
|
// #knots == #control points + degree + 1
|
||
|
printf("Invalid format as NURBS surfaces!\n");
|
||
|
return -1;
|
||
|
} else {
|
||
|
printf("Valid NURBS surface!\n");
|
||
|
}
|
||
|
auto res = c2C4.c2OrC4();
|
||
|
if(res.first) {
|
||
|
printf("It belongs to the C2 situation!\n");
|
||
|
} else if(res.second) {
|
||
|
printf("It belongs to the C4 situation!\n"
|
||
|
"The third-order sub-determinant(s) can be zero when excluding the following in the Jacobian matrix:\n"
|
||
|
"(index starts from 0) col(s)\n");
|
||
|
for(auto col: c2C4.c4ExcludeCols) printf("%d\n", col);
|
||
|
}
|
||
|
return 0;
|
||
|
}
|