我试图绘制自行车前轮的路径,而只知道后轮的贝塞尔曲线。现在,我想我知道如何得到公式,但答案必须是(一组)贝塞尔曲线。我猜测,如果后轮路径是贝塞尔曲线,前轮路径不是必需的。所以我可能不得不使用多条曲线反复近似它?
我想在SVG中查看结果。
由于我的数学在26年后有点生疏,请尝试小步解释......
要了解我正在谈论的内容,请查看: Bicycle wheel path example
此处的一些背景信息可能会有所帮助: 我正在尝试为Inkscape构建一个插件,用于计算CNC机器在移动具有给定偏移量的旋转刀时应遵循的路径。这类似于具有已知的自行车后轮路径并试图从中获得其前轮路径。因此,输入是一个SVG文件,其中包含路径(我想要切割的形状),输出是相同的文件,其中添加了额外的SVG路径(CNC机器应遵循的路径,以便切割所需的形状一把旋转刀。)
有趣的是,自行车将开始沿着与起点和控制点之间的线完全平行的线行驶,并且将完全平行于终点线之间的线路结束贝塞尔曲线的点及其控制点。这些点似乎在我无法控制之间发生了什么......答案 0 :(得分:1)
GOT IT!
我认为在仔细阅读了KIKO向我展示的底漆之后,我找到了一个优雅的解决方案。请看第6段(De Casteljau算法)
请注意,绿线与贝塞尔曲线相切。我们可以用它来表示自行车的车架(长度为L)(总是与这条直线平行)。这样可以很容易地绘制前轮路径。
但是我需要Bezier曲线形式的前轮路径......
步骤1: 复制第一个贝塞尔曲线并对其进行修改,使前两个控制点(示例中的p1和p2)偏移,长度L平行于线(p1,p2)。用P3和P4做同样的事情。这个Bezier将是我们对前轮路径的首次估算。 第2步: 开始绘制后轮和前轮的贝塞尔曲线,同时跟踪计算的前轮路径和估计的前轮贝塞尔曲线之间的差异。如果差异变大,则拆分估计的贝塞尔曲线并调整新形成的控制点。重复此过程,直到绘制完成。
答案 1 :(得分:0)
也许你想要:BézierCurves的入门书?
http://pomax.github.io/bezierinfo
对我来说看起来像一个有用的网页。但是从你给出的链接我看到它只是一个相位偏移的曲线,幅度稍高。最好以这种方式过滤后轮数据,以获得前轮数据。这一切都取决于您对后轮的数据。
答案 2 :(得分:0)
让我们假设我们假设“前轮与后轮之间的距离固定,并且始终在切线上”,这使问题易于处理。
Bézier曲线由下式给出 B(t)=(1-t)^ 3 P_0 +3(1-t)^ 2 t P_1 +3(1-t)t ^ 2 P_2 + t ^ 3 P_3
可以通过区分
找到切线T = dB / dt =`-3 P_0 t ^ 2 + 9 P_1 t ^ 2-9 P_2 t ^ 2 + 3 P_3 t ^ 2 + 6 P_0 t-12 P_1 t + 6 P_2 t-3 P_0 + 3 P_1
我们可以通过找到N = T / sqrt(T.T)找到单位长度正常N.我们想要的曲线B(t) + a N
。对于某些常数a。这不是一个好的表达。你可能最好计算一些点并拟合曲线。您可以使用CAS以代数方式执行操作。