怎样分解一条Bezier曲线???[求助]

mydeargogo 2005-12-18 03:24:11
这条曲线包含两个端点和两个控件点

怎样通过在Bezier曲线上的一点,将曲线分解为两条Bezier曲线?

(急,请帮帮忙)

图片:http://220.181.29.183/boardfile/tech13/200552/20051218151226.GIF
...全文
124 7 打赏 收藏 转发到动态 举报
写回复
用AI写文章
7 条回复
切换为时间正序
请发表友善的回复…
发表回复
mydeargogo 2005-12-19
  • 打赏
  • 举报
回复
...
mydeargogo 2005-12-19
  • 打赏
  • 举报
回复
你的解决方法非常好! 但是它不适合我,原因是这样的:

在你的这个解决方法中,是否没有控制点。你能否计算出新的两条Bezier曲线的控制点坐标??

northwolves 2005-12-19
  • 打赏
  • 举报
回复
PolyBezier, PolyBezierTo

VB声明
Declare Function PolyBezier& Lib "gdi32" (ByVal hdc As Long, lppt As POINTAPI, ByVal cPoints As Long)
Declare Function PolyBezierTo& Lib "gdi32" (ByVal hdc As Long, lppt As POINTAPI, ByVal cCount As Long)
说明
描绘一条或多条贝塞尔(Bezier)曲线。PolyBezierTo用于将当前画笔位置设为前一条曲线的终点
返回值
Long,非零表示成功,零表示失败
参数表
参数 类型及说明
hdc Long,要在其中绘图的设备场景
lppt POINTAPI,指定一个POINTAPI结构数组。其中的第一个结构指定了起点。剩下的点三个一组——包括两个控件点和一个终点
原文:An array of POINTAPI structures. The first structure specifies the starting point. The remaining points are in groups of three, consisting of two control points and an end point.
cPoints Long,lppt数组的总点数
mydeargogo 2005-12-19
  • 打赏
  • 举报
回复
明白了,你一条Bezier曲线有这么多控制点. :) 你能否可以让你的Bezier曲线只有两个控制点和两个端点,然后根据它们计算出新的Bezier曲线的两个控制点?
northwolves 2005-12-19
  • 打赏
  • 举报
回复
在你的这个解决方法中,是否没有控制点。你能否计算出新的两条Bezier曲线的控制点坐标??
------------------------------------------
每连续四个点中,第一点为起点,第四点为终点,中间两点为控制点。
northwolves 2005-12-18
  • 打赏
  • 举报
回复
你需要的只是抹去一段:

Private Declare Function PolyBezierTo& Lib "gdi32" (ByVal hdc As Long, lppt As POINTAPI, ByVal cCount As Long)
Private Type POINTAPI
x As Long
y As Long
End Type
Dim bpoints(30) As POINTAPI, bpoints2(12) As POINTAPI

Private Sub Command1_Click()
Picture1.Scale (0, 0)-(640, 480)
Picture1.ScaleMode = 3
PolyBezierTo Picture1.hdc, bpoints(0), 30 '--->3的倍数
End Sub



Private Sub Command2_Click()
Picture1.Scale (0, 0)-(640, 480)
Picture1.ScaleMode = 3
Picture1.ForeColor = Picture1.BackColor
PolyBezierTo Picture1.hdc, bpoints(10), 3 '-->抹去一段
End Sub

Private Sub Form_Load()
Picture1.AutoRedraw = True
Dim i As Integer
Dim j As Long
Picture1.Scale (0, 0)-(640, 480)
Picture1.ScaleMode = 3 '------------------>设置scalemode属性为pixels(像素),将API默认的坐标系和vb中使用的坐标系对应起来
For i = 0 To 30
bpoints(i).x = 32 + i * 20
bpoints(i).y = 100 + 100 * Sin((bpoints(i).x * 2 * 3.14159 / 640))
Picture1.PSet (bpoints(i).x, bpoints(i).y), vbBlue
Next
End Sub
northwolves 2005-12-18
  • 打赏
  • 举报
回复
按你的图例,控制点发生改变后,第二条曲线不再保持原来的形状

7,763

社区成员

发帖
与我相关
我的任务
社区描述
VB 基础类
社区管理员
  • VB基础类社区
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

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