#include #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; }