关于贝塞尔曲线的编辑

时间:2023-01-10 05:48:51
各位大侠,小弟最近在开发一个贝塞尔曲线的功能。曲线可以根据标准方程已经绘制成功。(三阶的)
现在有两个问题,望大侠指点一下。
一:贝塞尔曲线拖动曲线上任意一点时,怎么保证曲线始终通过鼠标点。
二:像coreldraw,photoshop中,双击贝塞尔曲线上任意一点就可以在鼠标点击位置生成一个控制点。这个又是怎么实现的。




因本人没积分了。所以没办法给各位积分,望谅解。愿意帮忙的话,小弟万分感谢。

10 个解决方案

#1


我实现过一个跟photoshop一样的~

#2


dizuo:
能提供一些思路吗?

#3


把鼠标坐标当成其中一个control point不就行了?

#4


楼主意思是随便点曲线上的点都切成两段贝塞尔曲线,并且形状保持一样?

#5


To:buluori
   恩。是这么个意思。应该采用什么方法呢

#6


引用 2 楼 lastvsky 的回复:
dizuo:
能提供一些思路吗?

http://blog.csdn.net/dizuo/archive/2009/10/26/4728785.aspx
我的一篇文章,有代码的。你可以看一下~

#7


通过点到曲线上的点算出U值来,然后 使用 贝塞尔曲线 的矩阵形式,可以 用 tu代掉公式里的U值,化解出切分后两个曲线的的线性代数公式(逆矩阵的使用是关键),把t用 1/U的值带入就能算出切分后两段贝塞尔曲线新的控制点坐标

#8


TO:buluori
   你好。请问你说的U值和tu分别是什么。我在贝塞尔的矩阵形式里并没看到U这个参数。
望指教。

#9


贝塞尔的矩阵形式的公式 是[u^3  u^2  u  1] * 常数 = p||, 有些文章里面可能是 t 吧 , 1>=u>=0

击中的点算得的 u值设为 m的话,要上面的公式成立, 则 u = t/m, 因为新的curve公式 t=m时即u = 1,最后一点, 带入

[ t/m^ 3 t/m^2 t/m 1] * 常数 = p|| 要为curve公式的话 需要转换成  [t^3  t^2  t  1] * ? * 常数 = p||,

?要移到右边去,得到右边的即为新的控制点,后段的曲线同理 m = 1-m而已

不知道我这么说你能理解不

#10


Ok,多谢各位大侠的无私帮助。结贴。

#1


我实现过一个跟photoshop一样的~

#2


dizuo:
能提供一些思路吗?

#3


把鼠标坐标当成其中一个control point不就行了?

#4


楼主意思是随便点曲线上的点都切成两段贝塞尔曲线,并且形状保持一样?

#5


To:buluori
   恩。是这么个意思。应该采用什么方法呢

#6


引用 2 楼 lastvsky 的回复:
dizuo:
能提供一些思路吗?

http://blog.csdn.net/dizuo/archive/2009/10/26/4728785.aspx
我的一篇文章,有代码的。你可以看一下~

#7


通过点到曲线上的点算出U值来,然后 使用 贝塞尔曲线 的矩阵形式,可以 用 tu代掉公式里的U值,化解出切分后两个曲线的的线性代数公式(逆矩阵的使用是关键),把t用 1/U的值带入就能算出切分后两段贝塞尔曲线新的控制点坐标

#8


TO:buluori
   你好。请问你说的U值和tu分别是什么。我在贝塞尔的矩阵形式里并没看到U这个参数。
望指教。

#9


贝塞尔的矩阵形式的公式 是[u^3  u^2  u  1] * 常数 = p||, 有些文章里面可能是 t 吧 , 1>=u>=0

击中的点算得的 u值设为 m的话,要上面的公式成立, 则 u = t/m, 因为新的curve公式 t=m时即u = 1,最后一点, 带入

[ t/m^ 3 t/m^2 t/m 1] * 常数 = p|| 要为curve公式的话 需要转换成  [t^3  t^2  t  1] * ? * 常数 = p||,

?要移到右边去,得到右边的即为新的控制点,后段的曲线同理 m = 1-m而已

不知道我这么说你能理解不

#10


Ok,多谢各位大侠的无私帮助。结贴。