c++ - 如何绘制近似于原始曲线的曲线

标签 c++ opengl 3d

我有一组点,我想画一条曲线,它应该近似于原始曲线。
比方说,在鹰眼系统(用于板球)中,我在球的整个飞行过程中都有一组球的坐标,现在我如何绘制这样一条通过球的空间坐标并看起来近似于原始曲线的曲线
一种方法我认为它可以得到大量的点,这样每两个点
彼此非常接近,然后在它们之间画一条直线

最佳答案

曲线几乎总是分四步渲染:

  1. 使用曲线或样条算法对一组点进行近似或插值。选择可能包括:

    • Cubic splines ,它通过所有的数据点并产生一条平滑的曲线
    • Bézier curves ,它不通过所有点,但位于围绕每个曲线部分的连续 4 个点组的包络线内。
    • Hermite curves ,它们由一组点和一组切 vector 定义:您需要以某种方式生成一组切 vector 才能使用这种曲线。
    • (可能还有更多我忘记的)
  2. 转换您选择的任何表示形式为 Bézier Curve :这可以通过其他曲线类型的简单矩阵变换来实现。

  3. Repeatedly subdivide贝塞尔曲线:控制点趋向于接近曲线。

  4. 绘制 segmentation 曲线的控制点,由一条直线连接。

如果您直接使用贝塞尔曲线,这可能是最简单的,那么有一些非常 simple and elegant methods of subdividing it .

关于c++ - 如何绘制近似于原始曲线的曲线,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/5928051/

相关文章:

c++ - D3D11 : Rotating Multiple Triangles

c++ - 避免调用 floor()

ios - SceneKit 相机仅在 x 轴上跟随对象? - swift

c++ - 在模板类中使用非模板函数

c++ - 计算词典索引的最有效方法

OpenGL 到 FFMpeg 编码

c++ - 如何找到从一个 vector 到另一个 vector 的正确旋转?

c++ - GLSL 隔行扫描似乎在 3DTV 上甚至跳过了行

javascript - Three.js - 使用 scale.set() 缩放模型或增加模型大小?

c++ - 我可以使用 now() 将 wait_until 转换为 wait_for 吗?