![]() |
1
14
对 De Casteljau's algorithm 是要走的路。 参数化如果曲线的参数化不正确 吨 =0槽 吨 =1,那么你似乎用了错误的方程来描述你的曲线。 Wikipedia 有适合您的正确公式:
如果你设置 吨 =0,你得到 P 1. ,你的出发点。如果你设置 吨 =1,你得到 P 4. ,您的端点。在两者之间,曲线的形状由这些点和两个控制点决定 P 2. 和 P 3. 。 De Casteljau算法允许 吨 是要在其中剪切曲线的参数。假设您只想保留初始部分。你从 P 1. 到 P 2. ,从那里到 P 3. 从那里到 P 4. .你把每一行都除以分数 吨 其长度,即分界点之前的线的长度与整个长度相关 吨 :1。你现在有三个新观点 P 12 通过 P 34 .再次执行相同操作可获得两点 P 123 和 P 234 ,并再次获得单点 P 1234 最后一点是B( 吨 ),截断曲线的端点。起点是 P 1. 和以前一样。新的控制点是 P 12 和 P 123 我们刚才建造它们的方式。 删除曲线的初始部分的方法与此相同。因此,分两步,可以修剪曲线的两端。您可以获得一组新的控制点,这些控制点精确地(达到您使用的数字精度)描述原始曲线的一段,而不涉及近似或类似情况。 你可以将上面所有的几何描述转化为代数公式,在一个完美的世界里,你应该从 this answer 你引用的问题。 唉,这似乎不是一个完美的世界。在撰写本文时,这些公式只使用了二次多项式,因此无法描述三次曲线上的端点。正确的公式应如下所示:
哪里 u 0 =1 吨 0 和 u 1. =1 吨 1. 。 请注意,在带括号的表达式中,至少有一些项是相等的,并且可以组合。我没有这样做,因为我相信这里所说的公式会使模式更加清晰。您可以简单地为 x 和 y 计算新控制点的方向。 |
![]() |
user1424739 · 如何获得子地块的绘图区域大小? 2 年前 |
![]() |
Nor-s · 如何使用ASIMP正确加载模型? 2 年前 |
![]() |
Makogan · 3D纹理大小影响程序输出,不会引发错误 6 年前 |
![]() |
Karsten W. · 底部R中的旋转箭头 6 年前 |
|
168grani · Matplotlib图形的线条平滑 6 年前 |