- html - 出于某种原因,IE8 对我的 Sass 文件中继承的 html5 CSS 不友好?
- JMeter 在响应断言中使用 span 标签的问题
- html - 在 :hover and :active? 上具有不同效果的 CSS 动画
- html - 相对于居中的 html 内容固定的 CSS 重复背景?
我有一组代表贝塞尔曲线的控制点。它可以是五阶或 100 阶贝塞尔曲线,或介于两者之间的任何曲线。我正在寻找一种方法将贝塞尔曲线简化为多个三次贝塞尔曲线。下图显示了如何将十度曲线简化为三度曲线,但我想更进一步,将其简化为几条三次贝塞尔曲线以实现更好的近似。
代码示例将非常有帮助。
最佳答案
正如 mohsenmadi 已经指出的那样:一般来说,如果不提出自己的错误度量标准,您就无法做到这一点。另一个想法是“好吧,让我们将这条曲线近似为一系列低阶曲线”,这样我们就会得到看起来更好的东西,并且实际上不需要错误度量。这有点像将曲线“展平”为线条,除了我们将使用三次贝塞尔线段代替线条,这提供了漂亮的曲线,同时就现代图形库而言,保持一切“易于处理”。
然后我们可以做的是:通过定期对曲线进行采样,然后通过 Catmull-Rom 算法运行这些点,将“100 阶曲线”拆分为一系列三次贝塞尔曲线。程序非常简单:
t
选择一些规则间隔的值,如 0、0.2、0.4、0.6、0.8 和 1,然后 0
从点 1
开始并沿其切线向后移动,并形成一个点 n+1
从 n
开始并遵循其切线。我们这样做,因为:0
并在虚拟点结束 n+1
. i = 0
e = points.length-4
curves = []
do {
crset = points.subset(i, 4)
curves.push(formCRCurve(crset))
} while(i++<e)
formCRCurve(points: p1, p2, p3, p4):
d_start = vector(p2.x - p1.x, p2.y - p1.y)
d_end = vector(p4.x - p3.x, p4.y - p3.y)
return Curve(p2, d_start, d_end, p3)
i = 0
e = points.length-4
bcurves = []
do {
pointset = points.subset(i, 4)
bcurves.push(formBezierCurve(pointset))
} while(i++<e)
formBezierCurve(points: p1, p2, p3, p4):
return bezier(
p2,
p2 + (p3 - p1)/6
p3 - (p4 - p2)/6
p3
)
p2
和
p3
, 可以写成使用 start/control1/control2/end 坐标
p2
的等效贝塞尔曲线,
p2 + (p3 - p1)/6
,
p3 - (p4 - p2)/6
, 和
p3
.
关于bezier - 简化高阶贝塞尔曲线,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/30419726/
我有一组代表贝塞尔曲线的控制点。它可以是五阶或 100 阶贝塞尔曲线,或介于两者之间的任何曲线。我正在寻找一种方法将贝塞尔曲线简化为多个三次贝塞尔曲线。下图显示了如何将十度曲线简化为三度曲线,但我想更
我有起点和终点以及曲线在这些点的斜率值。现在我必须通过给定的两个点绘制一条“平滑的二维贝塞尔曲线”。现在如何定位两个控制点来实现这一点。有什么办法吗?我知道控制点必须位于各自起点和终点的切线上。 注意
考虑以下很好的解决方案,以找到通过4个点的曲线的三次Bézier控制点: How to find control points for a BezierSegment given Start, End
样本点以固定采样率(例如,1s=25 帧)从飞行器中获取,它包含 x、y、z 位置。 需求是导入点列表并编辑曲线,然后将其导出到新的点列表。我想用三次贝塞尔曲线来显示点,问题是: 飞行路径是任意的,总
我有一条二次贝塞尔曲线,我想计算给定点切线的斜率。例如,让它成为二次贝塞尔曲线的中点,因此 t=0.5(请参阅下面的链接以获取此图片)。我已经计算了二次贝塞尔曲线公式的一阶导数;但是我得到 400 作
我知道有方法 approximate cubic Bezier curves ( this page 也是一个很好的引用),但是有没有更快的方法来逼近 N 次贝塞尔曲线?还是只能使用下面的概括? 来自
我有这个有点简单的动画。当鼠标悬停在目标元素上时,它可以很好地执行动画,但是当光标悬停在目标元素外时,它不会转换回原始位置。相反,它只是在一次跌倒和丑陋的猛扑中迅速反弹。 :)
我正在尝试做的事情:使 SKSpriteNode 遵循 UIBezierPath,其中端点是用户触摸的位置。 问题:当用户触摸时,我将位置发送到播放器节点,播放器节点自行处理移动。然而,这仅在播放器节
我已经在 View 的 3 个边上添加了阴影,但没有给出底部阴影,但是在初始加载时,它会在所有角落显示阴影,但是当我滚动时它会显示正确的结果。这是我的代码。 类 ScheduleClassesTabl
我有一个简单的动画,当它结束时我想“过冲”。然后它应该反转并在另一端“超调”。 代码看起来像这样: h1 { animation-name: test 3000ms infinite alte
我正在尝试创建一个 @keyframe 动画来将一个框从屏幕底部拉起,然后让它从 HTML 文档正文的顶部弹回。我用来执行此操作的方法不允许您在动画持续期间更改速度,实习生不会使它看起来非常逼真(请参
我在 Accordion 列表中使用 cubic-bezier(0.68, -0.55, 0.265, 1.55) 进行过渡。问题是下面的内容也在“跳跃”。 你有什么想法如何在我的 Accordion
对于我的一个应用程序,我需要在 Html5 Canvas 中的贝塞尔曲线路径上绘制虚线曲线...破折号的长度和中间的间隙应该是可变的...它可以在 JavaFx 中实现,see this link .
De Casteljau 的算法说伯恩斯坦多项式没有说什么,反之亦然? 如果我们知道伯恩斯坦多项式,为什么还需要 De Casteljau 算法? 它们是不同的还是相同的? 最佳答案 简短回答:一个是
我目前无法绘制贝塞尔曲线。 我现在的输出是: 我需要的输出是: 我应该在这里添加什么作为贝塞尔值来获得曲线? 自定义裁剪器的代码片段是: class OnBoardingClipper ext
我很确定对于以前尝试过此操作的人来说,这是一个相当简单和直接的问题,但我对所谓的“高级”动画来说是个新手。 我正在尝试使用 CAKeyframeAnimation (使用“位置”关键路径)创建对象的以
我只是无法想象为什么整个贝塞尔曲线在我没有看到控制点的情况下在我的脑海中具有这种形状。有这方面的设施吗? 最佳答案 有a function called CGPathApply 您可以使用。它需要一个
在 Maya 中使用 python 如何创建不弯曲或不平滑的线性样条线?我尝试了几种不同的选择,但我不清楚如何做到这一点。 这是我尝试创建的脚本的第一步。我正在尝试创建类似于下图的东西。 import
我有 ease cubic-bezier 函数:cubic-bezier(.25,.1,.25,1) ( http://cubic-bezier.com/#.25,.1,.25,1 ) 我想要相反的东
您将 cubic-bezier 传递给四个不同的实数值,它会创建一条贝塞尔曲线。 例如,cubic-bezier(0,0,1,1) 创建一条线性 曲线。 cubic-bezier(0.25,0.1,0
我是一名优秀的程序员,十分优秀!