gpt4 book ai didi

edit - 拖动贝塞尔曲线进行编辑

转载 作者:行者123 更新时间:2023-12-04 15:27:59 25 4
gpt4 key购买 nike

如果您使用 Gimp 或 Photoshop 等图形编辑程序,您就会明白我的意思。要在这些程序上编辑曲线(可能是贝塞尔曲线),我们可以单击曲线,拖动鼠标,曲线会相应改变。我怀疑这个机制背后的所有事情都与向量有关,但我找不到任何提到如何去做的文件。谁能告诉我我该怎么做?非常感谢。

[编辑] 我的意思是选择曲线本身来改变(编辑)它(点击曲线,然后拖动曲线来编辑它)。通常,我们选择控制点来改变曲线。我知道要更改曲线,我需要编辑控制点,但是如何将曲线上的更改解释为对控制点的更改?

最佳答案

有多种方法可以完成您所看到的内容,具体取决于您希望它的行为方式。我将解释一些通过曲线操作点修改贝塞尔曲线的更简单的方法。

首先要做的是找出用户单击曲线的参数值 (t)。这通常是一个近似值。如果您正在对贝塞尔曲线进行像素或子像素渲染,那么只需记录每个像素的 t 值并使用它。如果要分割为线段,请查看哪条线段最近,找到两个端点的 t 值,并根据沿线的距离计算 t 值。

获得 t 值后,您可以将其代入贝塞尔曲线方程。你最终会得到以下形式的东西:

P = k0*P0 + k1*P1 + k2*P2 + k3*P3

其中 P 是曲线上的点,P0、P1、P2 和 P3 是输入控制点,k0、k1、k2 和 k3 是给定 t 的常数。我将 k 值称为“贡献”,或者更具体地说,控制点对曲线 P(t) 上的点的贡献。要记住的一个很好的属性是 k0+k1+k2+k3 = 1。

因此,假设您有一个向量 V = P' - P,其中 P' 是新位置,P 是原始位置。我们需要移动一些控制点来让 P' 到达它需要去的地方,但是我们对于我们想要移动哪些控制点有一定的灵活性。可以使用具有非零贡献的任何点,或某种组合。

假设用户在 t=0 处点击曲线。在这种情况下,只有 k0 是非零的,所以
P0 := P0 + V

将产生正确的结果。这也可以写成
P0 := P0 + k0 * V

在所有贡献都非零的一般情况下,您可以对每个点应用相同的变换,这将产生非常平滑、展开变形的效果。

另一种选择是简单地移动具有最大贡献的控制点整个距离。我认为要使用的方程式类似于
Pmax := Pmax + 1/kmax * V

但无论哪种方式,它都归结为查看给定 t 值的贡献,并移动控制点,使新点位于所需位置。

这种方法相当通用,适用于 NURBS 和大多数其他样条曲线,甚至曲面。还有另一种相当常见的方法是使用 Greville Abscissae,它尽可能多地固定点,但根据我的经验,它很容易出现振荡。

关于edit - 拖动贝塞尔曲线进行编辑,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/2316865/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com