请帮忙看看这个画线的问题...急..........在线等......

lxcy 2004-07-31 04:05:28
根据给出的四个点,在picturebox上画一条真值线,
想了好久也没有办法,能否给个算法或思路?
...全文
172 14 打赏 收藏 转发到动态 举报
写回复
用AI写文章
14 条回复
切换为时间正序
请发表友善的回复…
发表回复
熊孩子开学喽 2004-07-31
  • 打赏
  • 举报
回复
对了,顺便说一句,如果楼主在调用的时候写成:
DrawData GetDC(0),10,Picture1.ScaleHeight\2,5,2
试试看,呵呵,画到屏幕上去了,而不是画在你的程序中。
熊孩子开学喽 2004-07-31
  • 打赏
  • 举报
回复
给你一段代码吧,是我以前用过的.
说明一下:假设数据放在Data数组内,Data数组的长度根据实际大小ReDim
子程序DrawData的参数依次为:
HDC :要进行绘画的对象句炳
X0,Y0 :在对象上绘制图像的起点坐标,
XRatio,YRatio :水平比例和垂直比例
调用方法示例:DrawData Picture1.hdc,10,Picture1.ScaleHeight\2,5,2

Private Declare Function MoveToEx Lib "gdi32" (ByVal hdc As Long, ByVal x As Long, ByVal y As Long, lpPoint As Long) As Long

Private Declare Function LineTo Lib "gdi32" (ByVal hdc As Long, ByVal x As Long, ByVal y As Long) As Long
dim Data() as long
...
Sub DrawData(HDC as long, X0 as long,Y0 as long,XRatio as single,YRatio as long )
Dim I as long
dim Xb as long
dim Yb as long
dim Xe as long
Dim Ye as long
Xb=X0
Yb=Y0
For I = lbound(Data) To ubound(Data)
Xe = X0 + Int(I * XRatio)
Ye = Y0 + Int(Data(I) * YRatio)
MoveToEx HDC, Xb, Yb, Null
LineTo HDC, Xe, Ye
Xb = Xe
Yb = Ye
Next
End sub

使用XRatio和YRatio是因为,一般我们绘图都是以像素(Pixel)来计算的,而你实际采集的数据则可能非常大,也可能非常小,可能非常多,也可能非常少。为了使最后画出的曲线能够显示在一个范围之内,必须在X和Y方向加两个比例值。楼主应该明白我的意思吧。
熊孩子开学喽 2004-07-31
  • 打赏
  • 举报
回复
使用线性拟合的方法。
楼上所说的最小二乘法比较适合用在点比较少的情况下,如果数据比较多的话(几万个),那速度就非常慢了。
我作过一个类似的程序,有16K的点,将每个点取前后各一定数量(1,2,3...)的点进行加权平均。得到的波形就比较光滑了。(就是图像处理中的高斯虑波)
进行加权平均的点越多,光滑程度越好,速度也就越慢,总的形状误差也越大。

如果楼主只是需要画出连续的线条而不不要平滑的话,
可以使用一个现成的API:Polyline
Declare Function Polyline Lib "gdi32" (ByVal hdc As Long, lpPoint As POINTAPI, ByVal nCount As Long) As Long
该API可以根据给定的坐标结构数组画出一条连续曲线。
northwolves 2004-07-31
  • 打赏
  • 举报
回复
刚写的代码,看看能不能用:

http://blog.csdn.net/northwolves/archive/2004/07/31/57507.aspx
efengxu 2004-07-31
  • 打赏
  • 举报
回复
最好在picturebox里画线,用line画很容易,把你的四个值转换成你在picturebox里相对应的值
zyl910 2004-07-31
  • 打赏
  • 举报
回复
《计算机图形学》\三次样条插值\自然三次样条

推导与构造都比较复杂(牵涉到导数和线性代数),你自己买书看算了
Geo_Cra 2004-07-31
  • 打赏
  • 举报
回复
楼上正解……
但是我不会最小二乘……
northwolves 2004-07-31
  • 打赏
  • 举报
回复
最小二乘法取回归线
lxcy 2004-07-31
  • 打赏
  • 举报
回复
这样还有一个斜率的问题,感觉太复杂了.还有没有其他想法?
liuyan4794 2004-07-31
  • 打赏
  • 举报
回复
如果这些点分布在线段的两端,平均就可以
否则,用一个算法,求出一条线段,使得所有的点最靠近这条直线
lxcy 2004-07-31
  • 打赏
  • 举报
回复
现在做的是量测的软件,需要量测影像,因为影像模糊,所以在量直线的时候需要取多个点,这样就能准确一点.但是在取多个点后,这个直线怎么画,在下就不明白了,请高手指点.谢谢!!!!!!!!!1
liuyan4794 2004-07-31
  • 打赏
  • 举报
回复
Private Declare Function MoveToEx Lib "gdi32" (ByVal hdc As Long, ByVal x As Long, ByVal y As Long, lpPoint As Long) As Long
Private Declare Function LineTo Lib "gdi32" (ByVal hdc As Long, ByVal x As Long, ByVal y As Long) As Long
Private Sub Command1_Click()
MoveToEx Picture1.hdc, 10, 10, ByVal 0&
LineTo Picture1.hdc, 1000, 1000
End Sub
northwolves 2004-07-31
  • 打赏
  • 举报
回复
两点确定一条直线!
zyl910 2004-07-31
  • 打赏
  • 举报
回复
详细点

应该只是坐标计算问题

809

社区成员

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

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