关于三次bezier曲线

wendy425 2011-04-03 04:55:00
关于二维空间:
1.一般三次bezier曲线由4个控制点决定,那么给你5个控制点,怎么画出bezier曲线?

“三次Bezier曲线例子:
设在平面上给定的7个控制点坐标分别为:A(100,300),
B(120,200),C(220,200),D(270,100),E(370,100), F(420,200),G(420,300)。画出其曲线


关于三维空间:
2.给你三维空间中的两个点,我说的是三维空间中的点,怎么画一条三次bezier曲线链接两个点?
...全文
1030 11 打赏 收藏 转发到动态 举报
写回复
用AI写文章
11 条回复
切换为时间正序
请发表友善的回复…
发表回复
ryfdizuo 2011-04-05
  • 打赏
  • 举报
回复
[Quote=引用 7 楼 wendy425 的回复:]

引用 1 楼 dizuo 的回复:
lz可以参考photoshop中的钢笔路径工具,多段bezier曲线拼接:
三次bezier曲线四个控制点0,1,2,3.曲线经过0,3控制顶点。
问题2:要经过两个空间点要画bezier曲线,需要构造出第1,2个控制顶点。
我的博客:http://blog.csdn.net/dizuo/archive/2009/10/26/4728785.aspx
……
[/Quote]
lz 这个不难的吧,很多方法的。
我给出一种我的想法:
三维的0,3控制点可以作为一个bbox的min和max点。

// 只计算x轴
int BezierLine::computeBezierControlPoints()
{
float dist = abs( controlPoints[3].x() - controlPoints[0].x() ) / 2.0f;

controlPoints[1] = controlPoints[0];
controlPoints[1].rx() += dist;

controlPoints[2] = controlPoints[3];
controlPoints[2].rx() -= dist;

return 1;
}

// 计算x、y
int BezierLine::computeBezierControlPoints()
{
float distx = abs( controlPoints[3].x() - controlPoints[0].x() ) / 2.0f;
float disty = abs( controlPoints[3].x() - controlPoints[0].y() ) / 2.0f;

controlPoints[1] = controlPoints[0];
controlPoints[1].rx() += distx;
controlPoints[1].ry() += disty;

controlPoints[2] = controlPoints[3];
controlPoints[2].rx() -= distx;
controlPoints[2].ry() -= disty;

return 1;
}
无水先生 2011-04-05
  • 打赏
  • 举报
回复
先应该谈数学理论,而不是算法.
看不到再给一个:
向立天 2011-04-04
  • 打赏
  • 举报
回复
1
先用ABCD
然后再BCDE
以此类推画下去
2
再选两点画不行么
无水先生 2011-04-04
  • 打赏
  • 举报
回复
看我做的:
无水先生 2011-04-04
  • 打赏
  • 举报
回复
用二项式概率分布,求概率分布,另一中说法叫凸平均,很容易的.
ryfdizuo 2011-04-04
  • 打赏
  • 举报
回复
lz可以参考photoshop中的钢笔路径工具,多段bezier曲线拼接:
三次bezier曲线四个控制点0,1,2,3.曲线经过0,3控制顶点。
问题2:要经过两个空间点要画bezier曲线,需要构造出第1,2个控制顶点。
我的博客:http://blog.csdn.net/dizuo/archive/2009/10/26/4728785.aspx
TandyT 2011-04-04
  • 打赏
  • 举报
回复
[Quote=引用 8 楼 xianglitian 的回复:]
引用 6 楼 wendy425 的回复:

引用 4 楼 xianglitian 的回复:
1
先用ABCD
然后再BCDE
以此类推画下去
2
再选两点画不行么


1.那怎样连接成一条曲线?
2.怎么求另外两个控制点,我指的是三维空间中。

1、这样处理直接就是一条直线吧?猜的
2、我知道你说的三维空间,你强调很多遍了
两点可以确定一条直线
折合几维空间空间没……
[/Quote]

这个方法可行
向立天 2011-04-04
  • 打赏
  • 举报
回复
[Quote=引用 6 楼 wendy425 的回复:]

引用 4 楼 xianglitian 的回复:
1
先用ABCD
然后再BCDE
以此类推画下去
2
再选两点画不行么


1.那怎样连接成一条曲线?
2.怎么求另外两个控制点,我指的是三维空间中。
[/Quote]
1、这样处理直接就是一条直线吧?猜的
2、我知道你说的三维空间,你强调很多遍了
两点可以确定一条直线
折合几维空间空间没关系吧
有了直线方程就可以在直线上取一点吧
这也和空间没关系吧
这个时候改变第三点的某一个坐标就可以通过这三个点确定一个平面吧
有了平面方程就可以在这个平面上再选取一点吧
这样就是4个点了
wendy425 2011-04-04
  • 打赏
  • 举报
回复
[Quote=引用 1 楼 dizuo 的回复:]
lz可以参考photoshop中的钢笔路径工具,多段bezier曲线拼接:
三次bezier曲线四个控制点0,1,2,3.曲线经过0,3控制顶点。
问题2:要经过两个空间点要画bezier曲线,需要构造出第1,2个控制顶点。
我的博客:http://blog.csdn.net/dizuo/archive/2009/10/26/4728785.aspx
[/Quote]
我想知道三维空间中第 1和2个控制点是怎么计算的?二维空间的容易一些。
wendy425 2011-04-04
  • 打赏
  • 举报
回复
[Quote=引用 4 楼 xianglitian 的回复:]
1
先用ABCD
然后再BCDE
以此类推画下去
2
再选两点画不行么
[/Quote]

1.那怎样连接成一条曲线?
2.怎么求另外两个控制点,我指的是三维空间中。
wendy425 2011-04-04
  • 打赏
  • 举报
回复
[Quote=引用 3 楼 gongdiwudu 的回复:]
看我做的:
[/Quote]
无水先生,我看不到。

19,469

社区成员

发帖
与我相关
我的任务
社区描述
VC/MFC 图形处理/算法
社区管理员
  • 图形处理/算法社区
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧