n阶贝塞尔曲线?

2024-02-02

我已经成功地实现了二次和三次贝塞尔曲线。它们非常简单,因为我们有一个公式。现在我想使用泛化来表示 n 阶贝塞尔曲线:

Where

and

我使用位图库来渲染输出,所以这是我的代码:

// binomialCoef(n, k) = (factorial(n) / (factorial(k) * factorial(n- k)))
unsigned int binomialCoef(unsigned int n, const unsigned int k)
{
    unsigned int r = 1;

    if(k > n)
        return 0;

    for(unsigned int d = 1; d <= k; d++)
    {
        r *= n--;
        r /= d;
    }

    return r;
}

void nBezierCurve(Bitmap* obj, const Point* p, const unsigned int nbPoint, float steps, const unsigned char red, const unsigned char green, const unsigned char blue)
{
    int bx1 = p[0].x;
    int by1 = p[0].y;
    int bx2;
    int by2;

    steps = 1 / steps;

    for(float i = 0; i < 1; i += steps)
    {
        bx2 = by2 = 0;
        for(int j = 0; (unsigned int)j < nbPoint; j++)
        {
            bx2 += (int)(binomialCoef(nbPoint, j) * pow(1 - i, (float)nbPoint - j) * pow(i, j) * p[j].x);
            by2 += (int)(binomialCoef(nbPoint, j) * pow(1 - i, (float)nbPoint - j) * pow(i, j) * p[j].y);
        }

        bresenhamLine(obj, bx1, by1, bx2, by2, red, green, blue);

        bx1 = bx2;
        by1 = by2;
    }

    // curve must end on the last anchor point
    bresenhamLine(obj, bx1, by1, p[nbPoint - 1].x, p[nbPoint - 1].y, red, green, blue);
}

这是要渲染的点集:

Point ncurv[] = {
                    20, 200,
                    70, 300,
                    200, 400,
                    250, 200
                };

这是输出:

红色曲线是三次贝塞尔曲线。蓝色的应该是四阶贝塞尔曲线,与三次贝塞尔曲线相同,但在这种情况下,它们不一样?!

EDIT :我忘了注意左下点是 (0, 0)


你的公式中的总和...

...从 0 到 n,即对于 n 阶贝塞尔曲线,您需要 n+1 个点。

您有 4 个点,因此您正在绘制三阶贝塞尔曲线。

您的代码中的错误在这里:

for(int j = 0; (unsigned int)j < nbPoint; j++)

它应该是:

for(int j = 0; (unsigned int)j <= nbPoint; j++)

否则你只是从 0 迭代到 n-1 。

EDIT:

出于兴趣,您得到的形状与缺失的(第 5)点位于 (0,0) 处相同,因为这是唯一对您的总和没有任何贡献的点...

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

n阶贝塞尔曲线? 的相关文章

  • 如何获取正在访问 ASP.NET 应用程序的当前用户?

    为了获取系统中当前登录的用户 我使用以下代码 string opl System Security Principal WindowsIdentity GetCurrent Name ToString 我正在开发一个 ASP NET 应用程
  • 为什么 C# Array.BinarySearch 这么快?

    我已经实施了一个很简单用于在整数数组中查找整数的 C 中的 binarySearch 实现 二分查找 static int binarySearch int arr int i int low 0 high arr Length 1 mid
  • Web 客户端和 Expect100Continue

    使用 WebClient C NET 时设置 Expect100Continue 的最佳方法是什么 我有下面的代码 我仍然在标题中看到 100 continue 愚蠢的 apache 仍然抱怨 505 错误 string url http
  • 在结构中使用 typedef 枚举并避免类型混合警告

    我正在使用 C99 我的编译器是 IAR Embedded workbench 但我认为这个问题对于其他一些编译器也有效 我有一个 typedef 枚举 其中包含一些项目 并且我向该新类型的结构添加了一个元素 typedef enum fo
  • 用于检查类是否具有运算符/成员的 C++ 类型特征[重复]

    这个问题在这里已经有答案了 可能的重复 是否可以编写一个 C 模板来检查函数是否存在 https stackoverflow com questions 257288 is it possible to write a c template
  • 为什么当实例化新的游戏对象时,它没有向它们添加标签? [复制]

    这个问题在这里已经有答案了 using System Collections using System Collections Generic using UnityEngine public class Test MonoBehaviou
  • 如何使用 ICU 解析汉字数字字符?

    我正在编写一个使用 ICU 来解析由汉字数字字符组成的 Unicode 字符串的函数 并希望返回该字符串的整数值 五 gt 5 三十一 gt 31 五千九百七十二 gt 5972 我将区域设置设置为 Locale getJapan 并使用
  • 用于登录 .NET 的堆栈跟踪

    我编写了一个 logger exceptionfactory 模块 它使用 System Diagnostics StackTrace 从调用方法及其声明类型中获取属性 但我注意到 如果我在 Visual Studio 之外以发布模式运行代
  • 创建链表而不将节点声明为指针

    我已经在谷歌和一些教科书上搜索了很长一段时间 我似乎无法理解为什么在构建链表时 节点需要是指针 例如 如果我有一个节点定义为 typedef struct Node int value struct Node next Node 为什么为了
  • 将多个表映射到实体框架中的单个实体类

    我正在开发一个旧数据库 该数据库有 2 个具有 1 1 关系的表 目前 我为每个定义的表定义了一种类型 1Test 1Result 我想将这些特定的表合并到一个类中 当前的类型如下所示 public class Result public
  • WCF 中 SOAP 消息的数字签名

    我在 4 0 中有一个 WCF 服务 我需要向 SOAP 响应添加数字签名 我不太确定实际上应该如何完成 我相信响应应该类似于下面的链接中显示的内容 https spaces internet2 edu display ISWG Signe
  • while 循环中的 scanf

    在这段代码中 scanf只工作一次 我究竟做错了什么 include
  • 控件的命名约定[重复]

    这个问题在这里已经有答案了 Microsoft 在其网站上提供了命名指南 here http msdn microsoft com en us library xzf533w0 VS 71 aspx 我还有 框架设计指南 一书 我找不到有关
  • 如何在 C 中调用采用匿名结构的函数?

    如何在 C 中调用采用匿名结构的函数 比如这个函数 void func struct int x p printf i n p x 当提供原型的函数声明在范围内时 调用该函数的参数必须具有与原型中声明的类型兼容的类型 其中 兼容 具有标准定
  • 对现有视频添加水印

    我正在寻找一种用 C 在视频上加水印的方法 就像在上面写文字一样 图片或文字标签 我该怎么做 谢谢 您可以使用 Nreco 视频转换器 代码看起来像 NReco VideoConverter FFMpegConverter wrap new
  • 如何将带有 IP 地址的连接字符串放入 web.config 文件中?

    我们当前在 web config 文件中使用以下连接字符串 add name DBConnectionString connectionString Data Source ourServer Initial Catalog ourDB P
  • C# 成员变量继承

    我对 C 有点陌生 但我在编程方面有相当广泛的背景 我想做的事情 为游戏定义不同的 MapTiles 我已经像这样定义了 MapTile 基类 public class MapTile public Texture2D texture pu
  • 如何将服务器服务连接到 Dynamics Online

    我正在修改内部管理应用程序以连接到我们的在线托管 Dynamics 2016 实例 根据一些在线教程 我一直在使用OrganizationServiceProxy out of Microsoft Xrm Sdk Client来自 SDK
  • C# - OutOfMemoryException 在 JSON 文件上保存列表

    我正在尝试保存压力图的流数据 基本上我有一个压力矩阵定义为 double pressureMatrix new double e Data GetLength 0 e Data GetLength 1 基本上 我得到了其中之一pressur
  • 使用.NET技术录制屏幕视频[关闭]

    Closed 这个问题正在寻求书籍 工具 软件库等的推荐 不满足堆栈溢出指南 help closed questions 目前不接受答案 有没有一种方法可以使用 NET 技术来录制屏幕 无论是桌面还是窗口 我的目标是免费的 我喜欢小型 低

随机推荐

  • 使用 ButterKnife 库在 1 个片段中包含 2 个不同的视图

    我目前正在尝试使用 Android 的 ButterKnife 库来处理一些样板代码 https github com JakeWharton butterknife https github com JakeWharton butterk
  • 如何跟踪用户在网站上的时间

    我希望跟踪用户在网站上的平均时间 与谷歌分析的方式相同 以进行内部管理 做到这一点最简单的方法是什么 您可以通过以下方式获取时间 用户访问您的网站后 将 cookie 中的当前时间保存为 已访问 并且在下次访问时您可以获取它 如果已设置 更
  • 同时滚动多个div

    我正在尝试滚动多个div同时 当我滚动其中一个时div 我想报告所有div中的滚动 我动态创建 div 所以我使用这个功能document getElementsByClassName sub category container得到我所有
  • 在网格视图内填充下拉列表

    我在 Gridview 中有一个下拉列表 我必须显示与每个 id 关联的记录 并且该 ID 包含超过 10 条记录 那么我如何显示它们 protected void GridView1 RowDataBound object sender
  • libgdx 中四元数的 euler getPitch()、getRoll()、getYaw() 的旋转顺序?

    将四元数转换为欧拉角时 通常必须有轴旋转的顺序 例如这种可视化 http quaternions online libgdx 是如何工作的 四元数类具有以下功能 getRoll Math asin MathUtils clamp 2f w
  • 缩短(限制)句子的长度

    我有一列很长的名字 我想把它们剪到最大40 个字符长度 样本数据 x lt c This is the longest sentence in world so now just make it longer No in fact this
  • 在批处理文件中将反斜杠转换为转发[重复]

    这个问题在这里已经有答案了 将所有反斜杠转换为批处理文件中路径中的转发的最简单方法是什么 因为我需要使用 bash 来执行 SET string D path to folder ECHO string 基本上 您需要首先将字符串值存储到环
  • listadapter 中未调用 DiffCallback

    您好 我正在尝试在我的应用程序中使用 listadapter 和 diffcallback 不知何故 当我做某事时 视图根本不更新 当我将一些日志放入回调内的 areItemsTheSame 和 areContentsTheSame 中时
  • 如何计算工作时间以外的时间

    起初这看起来很简单 但事实证明这是一个真正令人头痛的问题 下面是我的表格 数据 预期输出和 SQL Fiddle 其中我必须解决我的问题 架构和数据 CREATE TABLE IF NOT EXISTS meetings id int 6
  • 如何将 pandas 数据框显示为 Flask-bootstrap 表?

    我想用 Flask 将 pandas 数据框显示为 bootstrap html 表 因此我尝试了以下操作 数据 csv 表 Name Birth Month Origin Age Gender Carly Jan Uk 10 F Rach
  • 如何告诉 NuGet 使用哪些 MSBuild 可执行文件?

    NuGet 显然有一些逻辑来确定要使用哪些 MSBuild 可执行文件 有没有办法覆盖这种行为 或者至少有一种方法告诉它使用 x86 MSBuild 而不是 x64 MSBuild 自动检测 使用 C Program Files x86 M
  • 在 data.frame 中按组显示加权平均值

    有关命令的问题by and weighted mean已经存在 但没有人能够帮助解决我的问题 我是 R 新手 更习惯数据挖掘语言而不是编程 我有一个数据框 其中包含每个人 观察 行 的收入 教育水平和样本权重 我想按教育水平计算收入的加权平
  • 在 Chrome 扩展程序的权限上下文中,“http://*/*”、“https://*/*”和“”意味着什么

    我正在尝试了解 Google Chrome 扩展的工作原理 我正在学习manifest json我遇到权限的文件 http https and
  • 如何挂载 Android 中的电源按钮?

    在 Android 设备上 唯一的按钮是音量按钮和电源按钮 我想让应用程序对按下电源按钮 长按和短按 做出反应 这是怎么做到的 现有的答案并没有完全回答问题 并且遗漏了足够的细节 如果不进行更多调查 它们将无法发挥作用 我将分享我所学到的解
  • 当 GOARCH=386 并导入“C”时,Go 构建错误“构建约束排除所有 Go 文件”

    我正在使用 CGO 包导入 C 代码 我想构建一个x86 386 它的Windows版本 我发现这应该通过设置来完成GOARCH 386 它在我的默认环境设置 GOARCH amd64 上正确构建 但是 当我将环境变量设置为 386 时 出
  • Pandas 正则表达式替换另一列中的值

    我有 2 个 pandas 列 一列有文件路径 另一列有新文件夹名称 我尝试使用正则表达式替换将文件夹名称替换为新文件夹名称 df new path df root str replace r A 0 9 END df new folder
  • SQL Server 中运算符 != 和 <> 有什么区别? [复制]

    这个问题在这里已经有答案了 可能的重复 我应该在 SQL 中使用 或 表示不等于吗 https stackoverflow com questions 723195 should i use or for not equal in tsql
  • 反应切换组件

    我下面有这个简单的代码 当我按下切换按钮时 组件 Child 应该隐藏 显示 但事实并非如此 我需要重新渲染一些东西吗 我不想切换进 出 CSS 类 只需通过单击按钮进行切换 import React Component from reac
  • 如何在调试时将 Visual Studio 异常消息语言更改为英语[重复]

    这个问题在这里已经有答案了 我正在安装 XP 荷兰语版本的机器上工作 Visual Studio 2005 以英文安装 我在调试时遇到了一个恼人的问题 所有 NET Framework 异常消息都以荷兰语显示 这使得它们真的毫无价值 我尝试
  • n阶贝塞尔曲线?

    我已经成功地实现了二次和三次贝塞尔曲线 它们非常简单 因为我们有一个公式 现在我想使用泛化来表示 n 阶贝塞尔曲线 Where and 我使用位图库来渲染输出 所以这是我的代码 binomialCoef n k factorial n fa