VBGood网站全文搜索 Google

搜索VBGood全站网页(全文搜索)

VB爱好者乐园(VBGood)

 找回密码
 立即注册
搜索
查看: 12135|回复: 15

[求助] 与VB曲线拟合或插值相关...

[复制链接]
 楼主| 发表于 2009-1-3 21:24:28 | 显示全部楼层 |阅读模式
昨天采集的数据画出的图形,刚开始温度逐渐升高,采集的数据画图像楼梯一样,实用LINE方法画的,请问有什么方法可以把它变得平滑些,下一个点的数据是实时采集的。

[ 本帖最后由 wswwxk 于 2009-1-3 21:26 编辑 ]
发表于 2009-1-3 21:38:05 | 显示全部楼层
YADA坛友研究过这个。。。
而且效果很不错

这方面我没试过。。。
听坛友提过,好象通过数值计算透明度,在相邻像素上画深浅不一的点实现平滑过渡效果的。。。

我没实践过。。。
一起研究下。。。
回复 支持 反对

使用道具 举报

发表于 2009-1-5 12:30:52 | 显示全部楼层
近期很忙加上眼压太高(真担心做瞎子),所以上网很少了。

楼主如果要把离散的点用曲线连接起来,可以到算法子论坛看看插值运算,点的数量少,可以用三次样条函数,效果一级棒。数量多的话就只好用邻近正弦插值了,否则太费时间,效果也是很不错的。

楼主如果要对付显示时的锯齿,那就要用到屏幕抗锯齿技术了。其原理很简单,就是把非整数位的点按接近程度分配到相邻的四个像素位上。画曲线的话,要先建立函数再根据函数密集取点,再分配,分配重叠的要相加,再与背景色融合,一点一点的很麻烦。实际上麻烦的事还有很多,比如两个亮度为125的点感觉上比不过一个亮度为250的点,显示器亮度对比度调节得不好也会出现亮暗不匀。其中曲率半径造成的亮度不均匀最头痛,比如画椭圆,按等角速度画,曲率半径小的部位容易偏亮,等线速度的话猜想更加严重。

数据采集之类,就简单的把点用直线连接起来吧,简单、高速,效果也马马虎虎过得去。用曲线的话,要先插值运算,后抗锯齿画图,严重消耗CPU不说(用C语言或汇编语言以及DIB,其速度就可以了),搞不好连接部分还会出现亮点或暗点,或者不同的段有不同的亮度,一节一节的。很容易出力不讨好的。

评分

参与人数 1威望 +6 金钱 +8 人气 +3 收起 理由
DreamonII + 6 + 8 + 3 精品文章

查看全部评分

回复 支持 反对

使用道具 举报

发表于 2009-1-5 13:47:12 | 显示全部楼层
YADA兄好久不见啦。。。
一定要保重身体呀。。。
新年了,祝身体健康,工作顺利,心想事成。。。

评分

参与人数 1威望 +1 收起 理由
YaDa + 1 谢谢。

查看全部评分

回复 支持 反对

使用道具 举报

发表于 2009-1-5 14:25:42 | 显示全部楼层

直线拟合算法

Public Function LineANA(StdX() As Single, Stdy() As Single) As Boolean

Dim StdNum As Integer '±ê×¼¸öÊý£¬ÐèÊäÈëÊý¾Ý

Dim k As Single, r As Single, b As Single '¼ÆËã½á¹ûµÄбÂÊ£¬½Ø¾àºÍÏßÐÔÏà¹ØϵÊý

Dim G1 As Single, G2 As Single, G3 As Single, G4 As Single
Dim G5 As Single, L1 As Single, L2 As Single, L3 As Single

Dim i As Integer


On Error GoTo ErrHandler
StdNum = UBound(StdX)
If StdNum = 1 Then
k = Stdy(1) / StdX(1) 'StdX(1)²»ÄܵÈÓÚ0
r = 1
b = 0
If k <= 0 Then GoTo ErrHandler
LineANA = True
End If
Exit Function

For i = 1 To StdNum
G1 = G1 + StdX(i)
G2 = G2 + Stdy(i)
G3 = G3 + StdX(i) * Stdy(i)
G4 = G4 + StdX(i) ^ 2
G5 = G5 + Stdy(i) ^ 2

Next

L1 = G3 - G1 * G2 / StdNum
L2 = G4 - G1 ^ 2 / StdNum
L3 = G5 - G2 ^ 2 / StdNum


r = L1 / Sqr(L2 * L3)
k = L1 / L2
b = (G2 - k * G1) / StdNum

If k <= 0 Then GoTo ErrHandler
LineANA = True
Exit Function

ErrHandler:
MsgBox "&Auml;&acirc;&ordm;&Iuml;&frac14;&AElig;&Euml;&atilde;&acute;í&Icirc;ó! ", vbCritical, gcstMsgBoxErrTitle
LineANA = False
End Function

评分

参与人数 1威望 +6 人气 +2 收起 理由
DreamonII + 6 + 2 发布源码

查看全部评分

回复 支持 反对

使用道具 举报

发表于 2009-1-5 14:27:36 | 显示全部楼层

B 贝塞尔曲线

B插样画图.rar

6.17 KB, 下载次数: 950

里面有直线拟合和曲线拟合你试试看

点评

好用,加分。  发表于 2013-5-7 15:07

评分

参与人数 1威望 +4 人气 +2 收起 理由
DreamonII + 4 + 2 精品文章

查看全部评分

回复 支持 反对

使用道具 举报

 楼主| 发表于 2009-1-5 16:50:18 | 显示全部楼层
谢谢大家,晚上看看效果在说。
回复 支持 反对

使用道具 举报

发表于 2009-2-22 17:51:46 | 显示全部楼层
谢谢,下来研究。
回复 支持 反对

使用道具 举报

发表于 2009-2-23 23:12:31 | 显示全部楼层
直线拟合和曲线拟合
多谢哈
回复 支持 反对

使用道具 举报

发表于 2009-5-17 07:53:08 | 显示全部楼层
正需要这方面的东西,谢谢了
回复 支持 反对

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

文字版|手机版|小黑屋|VBGood  

GMT+8, 2021-12-4 22:17

VB爱好者乐园(VBGood)
快速回复 返回顶部 返回列表