绘制 NURBS 曲线
Drawing NURBS Curves?
在过去的一周里,我一直面临着这个问题。对于我当前的项目,我需要绘制 NURBS 曲线,该项目已经使用了 OpenNURBS,但我无法弄清楚如何使用它。
我的问题是,如何从几个控制点获取曲线点?
我做了相当多的搜索,我看到了这个网站:http://www.nar-associates.com/nurbs/c_code.html
我可以使用代码,但我不明白如何扩展/简化它以使用 N 个控制点。
(另外,我正在使用C++所以我将页面中的代码转换为所述语言,特定于C++的答案会更好,但我在语言之间转换没有任何问题。
试试这个库:
http://libnurbs.sourceforge.net/
非均匀有理 B 样条曲线 (NURBS) 曲线和曲面是非常通用的数学曲面,广泛用于表示计算机图形学中的复杂三维形状。
libnurbs 的目标是提供一个干净、健壮且功能强大的库,能够定义、操作和分析 NURBS 曲线和曲面。我们将在 openNURBS 库提供的基础上进行构建,实现该库缺少的功能,并根据需要进行更改。openNURBS工作的目标是提高各种CAD系统之间的互操作性,因此他们没有动力开发或发布功能更齐全的库(即Rhino,他们的商业平台) - 因此需要这个项目。
此免费工具在线绘制NURBS曲线。这是一个基于webGL的应用程序,在Chrome浏览器中效果最好。在这里,您可以绘制具有 N 个控制点的曲线,并查看曲线上对应于 u 参数的点的值。
这是我的做法
- 制作曲线
a. 创建曲线对象(尺寸、有理标志(它有没有权重)、曲线度数 +1、你有多少个控制点)
ON_NurbsCurve thisCurve(3, false, order, controlPoints.size());
B. 向曲线添加控制点
for(int i = 0; i <controlPoints.size(); ++i)
{
ON_3dPoint cpPosition = controlPoints[i];
thisCurve.SetCV(i, cpPosition.x);
}
C. 添加结
I. 如果你有 knot_count = cv_count + 学位 + 1
for (int i = 1; i < knotValues.size() - 1; ++i)
thisCurve.SetKnot(i - 1, knotValues[i]);
II. 如果你有 knot_count = cv_count + 学位 - 1
for (int i = 0; i < knotValues.size(); ++i)
thisCurve.SetKnot(i, knotValues[i]);
- 曲线采样
A. 检查曲线是否有效
if (thisCurve.IsValid())
{
B. 获取曲线的参数范围
double maxU = knotValues.back();
double minU = knotValues.front();
C. 插值
double quadrature = 10;
for (unsigned int i = 0; i < quadrature; ++i)
{
double t = ((maxU - minU) * (i) / (quadrature - 1)) + minU;
double pointsOut[3];
d. 评估此取值(曲线的参数、取多少导数、什么维度、存储值的双精度数组)
bool successful = thisCurve.Evaluate(t, 0, 3, pointsOut);
if (successful)
curvePoints.push_back(ON_3dPoint(pointsOut[0], pointsOut[1], pointsOut[2]));
else
std::cout << "evaluation not successful " << std::endl;
E. 清理
delete [] pointsOut;
}
thisCurve.Destroy();
- CGAL:如何创建填充边界曲线的曲面网格?
- 定义/预设NURBS起点和终点的方向
- 使用 SFML 绘制曲线会给出错误的形状
- 使用 GSL 库制作样条曲线并使用它们进行集成
- 扩充矩阵的行缩减-三维样条曲线计算
- 向心Catmull-Rom样条曲线插值alpha参数
- 使用 C++ 在 Qt5 中显示曲线
- Hermite曲线中的切线值
- c 击曲线在代表前打电话给COUT
- 创建给定最小值、最大值和长度的曲线
- 使用 c++ 在 OpenGL 中绘制贝塞尔曲线的切线
- 当对象脱离范围时,C 会调用击曲线吗?
- 在QGraphicsView上实现交互式样条曲线的最佳方法是什么?
- 将 openCv 中的曲线从 ROI 转换为帧
- 我的贝塞尔曲线有什么问题?
- 您如何使形状沿着更BE的曲线SFML移动
- 从第二个导数计算的曲线的SIMD优化
- 即使在同一类型上,也可以将击曲线调用新的位置
- 使用QWTPlotCurve进行有效的曲线绘图
- 绘制 NURBS 曲线